void path_slicert::get_suffixes( const std::string &base, const typet &type, string_sett &s) { const irep_idt &type_id=ns.follow(type).id(); if(type_id==ID_struct || type_id==ID_union) { s.insert(base); const struct_typet &struct_type=to_struct_type(ns.follow(type)); for(struct_typet::componentst::const_iterator c_it=struct_type.components().begin(); c_it!=struct_type.components().end(); c_it++) { const typet &subtype=c_it->type(); const irep_idt &name=c_it->get(ID_name); get_suffixes(base+"."+id2string(name), subtype, s); } } else if(type_id==ID_array) { s.insert(base); get_suffixes(base+"[]", ns.follow(type).subtype(), s); } else { // no suffixes s.insert(base); } }
static void server_browse_entry_expand(GqBrowserNode *e, int error_context, GQTreeWidget *ctree, GQTreeWidgetNode *node, GqTab *tab) { GList *suffixes = NULL, *next; GqBrowserNodeServer *entry; g_assert(GQ_IS_BROWSER_NODE_SERVER(e)); entry = GQ_BROWSER_NODE_SERVER(e); if (!entry->once_expanded) { /* printf("expanding %s\n", entry->server->name); */ gq_tree_remove_children (ctree, node); entry->once_expanded = 1; suffixes = get_suffixes(error_context, entry->server); gtk_clist_freeze(GTK_CLIST(ctree)); for (next = suffixes ; next ; next = g_list_next(next) ) { add_suffix(entry, ctree, node, next->data); g_free(next->data); next->data = NULL; } gtk_clist_thaw(GTK_CLIST(ctree)); g_list_free(suffixes); } }
static void dump_server(GtkWidget *widget, GqTab *tab) { GQTreeWidget *ctree; GQTreeWidgetNode *node; GqBrowserNode *e; GqServer *server; GList *bases = NULL; GList *to_export = NULL, *I; struct dn_on_server *dos; int error_context; ctree = GQ_TAB_BROWSE(tab)->ctreeroot; node = GQ_TAB_BROWSE(tab)->tree_row_popped_up; e = GQ_BROWSER_NODE(gq_tree_get_node_data (ctree, node)); g_assert(GQ_IS_BROWSER_NODE_SERVER(e)); server = server_from_node(ctree, node); if (e == NULL || server == NULL) return; error_context = error_new_context(_("Exporting server to LDIF"), tab->win->mainwin); bases = get_suffixes(error_context, GQ_BROWSER_NODE_SERVER(e)->server); /* turn suffixes list into a list of dn_on_server objects (impedance match) */ for (I = g_list_first(bases) ; I ; I = g_list_next(I) ) { dos = new_dn_on_server(I->data, server); dos->flags = LDAP_SCOPE_SUBTREE; /* default is LDAP_SCOPE_BASE */ to_export = g_list_append(to_export, dos); g_free(I->data); I->data = NULL; } g_list_free(bases); export_many(error_context, tab->win->mainwin, to_export); error_flush(error_context); }
bool path_slicert::depends_lhs( const exprt &expr, string_sett &dependencies) { string_sett suffixes; get_suffixes("", expr.type(), suffixes); string_sett new_dependencies; bool result= depends_lhs_rec( expr, suffixes, // R suffixes, // W dependencies, new_dependencies); if(result) dependencies.insert( new_dependencies.begin(), new_dependencies.end()); return result; }