+ if (sht!=NULL) {
+ int repeat=1;
+ while(repeat) {
+ repeat=0;
+ for (i = 0; i < dwarf_entry_array_size; i++) {
+ cur_entry = &dwarf_entry_array[i];
+ if (entry_is_type(cur_entry)) {
+ collection_type* collection_ptr = (collection_type*)(cur_entry->entry_ptr);
+ int j=0;
+ int offset=0;
+ int value=0;
+
+ if (!gencontains(sht,collection_ptr->name))
+ continue;
+ if (gencontains(ght,collection_ptr->name)) {
+ struct valuepair *vp=(struct valuepair*)gengettable(ght,collection_ptr->name);
+ if (vp->index!=i)
+ continue;
+ }
+
+ for(j=0;j<collection_ptr->num_members;j++) {
+ dwarf_entry *entry=collection_ptr->members[j];
+ if (entry->tag_name==DW_TAG_inheritance) {
+ inherit *in_ptr=(inherit*)collection_ptr->members[j]->entry_ptr;
+ dwarf_entry *typeptr=in_ptr->target_ptr;
+ collection_type* sub_ptr = (collection_type*)(typeptr->entry_ptr);
+ if (!gencontains(sht,sub_ptr->name)) {
+ repeat=1;
+ genputtable(sht,sub_ptr->name,sub_ptr->name);
+ }
+ } else {
+ member * member_ptr=(member *)entry->entry_ptr;
+ char *name=member_ptr->name;
+ dwarf_entry *type=member_ptr->type_ptr;
+ char *typestr=printname(type,GETJUSTTYPE);
+ if (typestr!=NULL&&!gencontains(sht,typestr)) {
+ repeat=1;
+ genputtable(sht,typestr,typestr);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+