/* * Substitutes parameters in macro definition body with actual arguments. */ static List *subst(CppContext *ctx, Macro *macro, List *args, List *hideset) { List *r = make_list(); for (int i = 0; i < LIST_LEN(macro->body); i++) { bool islast = (i == LIST_LEN(macro->body) - 1); Token *t0 = LIST_REF(macro->body, i); Token *t1 = islast ? NULL : LIST_REF(macro->body, i + 1); bool t0_param = t0->toktype == TOKTYPE_MACRO_PARAM; bool t1_param = !islast && t1->toktype == TOKTYPE_MACRO_PARAM; if (is_punct(t0, '#') && t1_param) { list_push(r, stringize(t0, LIST_REF(args, t1->val.i))); i++; continue; } if (is_punct(t0, KEYWORD_TWOSHARPS) && t1_param) { List *arg = LIST_REF(args, t1->val.i); if (!LIST_IS_EMPTY(arg)) { glue_push(r, (Token *)LIST_REF(arg, 0)); List *tmp = make_list(); for (int i = 1; i < LIST_LEN(arg); i++) list_push(tmp, LIST_REF(arg, i)); list_append(r, expand_all(ctx, tmp)); } i++; continue; } if (is_punct(t0, KEYWORD_TWOSHARPS) && !islast) { hideset = t1->hideset; // wrong? glue_push(r, t1); i++; continue; } if (t0_param && !islast && is_punct(t1, KEYWORD_TWOSHARPS)) { hideset = t1->hideset; // wrong? List *arg = LIST_REF(args, t0->val.i); if (LIST_IS_EMPTY(arg)) i++; else list_append(r, arg); continue; } if (t0_param) { List *arg = LIST_REF(args, t0->val.i); list_append(r, expand_all(ctx, arg)); continue; } list_push(r, t0); } return add_hide_set(r, hideset); }
GtkTorrentSideBar::GtkTorrentSideBar(GtkTreeView *tree, const Glib::RefPtr<Gtk::Builder> rbuilder) : Gtk::TreeView(tree), m_builder(rbuilder) { rbuilder->get_widget_derived("GtkMainWindow", m_parent); rbuilder->get_widget_derived("rssDialog", m_rss); m_rss->set_transient_for(*m_parent); m_liststore = Gtk::TreeStore::create(m_cols); set_model(m_liststore); set_headers_visible(false); set_show_expanders(true); set_activate_on_single_click(); expand_all(); // Shouldn't this go after setupColumns()? signal_row_activated().connect([this](const Gtk::TreeModel::Path& Path, Gtk::TreeViewColumn *col){ this->onRowClicked(*m_liststore->get_iter(Path)); }); setupColumns(); }