define MAX_VSYMBS 100 enum NOTHING_VSYMB from 0 enum DICTIONARY_TABLE_VSYMB enum DICT_PAR1_VSYMB enum DICT_PAR2_VSYMB enum LARGEST_OBJECT_VSYMB enum ACTIONS_TABLE_VSYMB enum IDENTIFIERS_TABLE_VSYMB enum GRAMMAR_TABLE_VSYMB enum VERSION_NUMBER_VSYMB enum CLASSES_TABLE_VSYMB enum GLOBALS_ARRAY_VSYMB enum SELF_VSYMB enum GSELF_VSYMB enum CPV__START_VSYMB enum NUM_ATTR_BYTES_VSYMB enum CHILDREN_VSYMB enum PARENT_VSYMB enum CHILD_VSYMB enum SIBLING_VSYMB enum RANDOM_VSYMB enum INDIRECT_VSYMB enum SPACES_VSYMB enum METACLASS_VSYMB enum ROUTINE_VSYMB enum STRING_VSYMB enum CLASS_VSYMB enum OBJECT_VSYMB enum ASM_ARROW_VSYMB enum ASM_SP_VSYMB enum ASM_LABEL_VSYMB enum ASM_RTRUE_VSYMB enum ASM_RFALSE_VSYMB enum ASM_NEG_VSYMB enum ASM_NEG_RTRUE_VSYMB enum ASM_NEG_RFALSE_VSYMB enum Z__REGION_VSYMB enum CP__TAB_VSYMB enum RA__PR_VSYMB enum RL__PR_VSYMB enum OC__CL_VSYMB enum RV__PR_VSYMB enum OP__PR_VSYMB enum CA__PR_VSYMB enum RT__ERR_VSYMB enum FLOAT_NAN_VSYMB enum PROPERTY_METADATA_VSYMB enum FBNA_PROP_NUMBER_VSYMB enum VALUE_PROPERTY_HOLDERS_VSYMB enum VALUE_RANGE_VSYMB enum RESPONSETEXTS_VSYMB enum CREATEPROPERTYOFFSETS_VSYMB enum KINDHIERARCHY_VSYMB enum SAVED_SHORT_NAME_VSYMB enum NO_RESPONSES_VSYMB
void Veneer::create_indexes(inter_tree *I) { Veneer::index(I, NOTHING_VSYMB, I"nothing", NULL); Veneer::index(I, DICTIONARY_TABLE_VSYMB, I"#dictionary_table", NULL); Veneer::index(I, DICT_PAR1_VSYMB, I"#dict_par1", NULL); Veneer::index(I, DICT_PAR2_VSYMB, I"#dict_par2", NULL); Veneer::index(I, LARGEST_OBJECT_VSYMB, I"#largest_object", NULL); Veneer::index(I, ACTIONS_TABLE_VSYMB, I"#actions_table", NULL); Veneer::index(I, IDENTIFIERS_TABLE_VSYMB, I"#identifiers_table", NULL); Veneer::index(I, GRAMMAR_TABLE_VSYMB, I"#grammar_table", NULL); Veneer::index(I, VERSION_NUMBER_VSYMB, I"#version_number", NULL); Veneer::index(I, CLASSES_TABLE_VSYMB, I"#classes_table", NULL); Veneer::index(I, GLOBALS_ARRAY_VSYMB, I"#globals_array", NULL); Veneer::index(I, SELF_VSYMB, I"self", NULL); Veneer::index(I, GSELF_VSYMB, I"#g$self", NULL); Veneer::index(I, CPV__START_VSYMB, I"#cpv__start", NULL); Veneer::index(I, NUM_ATTR_BYTES_VSYMB, I"NUM_ATTR_BYTES", NULL); Veneer::index(I, PARENT_VSYMB, I"parent", NULL); Veneer::index(I, CHILD_VSYMB, I"child", NULL); Veneer::index(I, SIBLING_VSYMB, I"sibling", NULL); Veneer::index(I, INDIRECT_VSYMB, I"indirect", NULL); Veneer::index(I, RANDOM_VSYMB, I"random", NULL); Veneer::index(I, METACLASS_VSYMB, I"metaclass", NULL); Veneer::index(I, CHILDREN_VSYMB, I"children", NULL); Veneer::index(I, ROUTINE_VSYMB, I"Routine", NULL); Veneer::index(I, STRING_VSYMB, I"String", NULL); Veneer::index(I, CLASS_VSYMB, I"Class", NULL); Veneer::index(I, OBJECT_VSYMB, I"Object", NULL); Veneer::index(I, ASM_ARROW_VSYMB, I"__assembly_arrow", I"->"); Veneer::index(I, ASM_SP_VSYMB, I"__assembly_sp", I"sp"); Veneer::index(I, ASM_LABEL_VSYMB, I"__assembly_label", I"?"); Veneer::index(I, ASM_RTRUE_VSYMB, I"__assembly_rtrue_label", I"?rtrue"); Veneer::index(I, ASM_RFALSE_VSYMB, I"__assembly_rfalse_label", I"?rfalse"); Veneer::index(I, ASM_NEG_VSYMB, I"__assembly_negated_label", I"~"); Veneer::index(I, ASM_NEG_RTRUE_VSYMB, I"__assembly_negated_rtrue_label", I"?~rtrue"); Veneer::index(I, ASM_NEG_RFALSE_VSYMB, I"__assembly_negated_rfalse_label", I"?~rfalse"); Veneer::index(I, Z__REGION_VSYMB, I"Z__Region", NULL); Veneer::index(I, CP__TAB_VSYMB, I"CP__Tab", NULL); Veneer::index(I, RA__PR_VSYMB, I"RA__Pr", NULL); Veneer::index(I, RL__PR_VSYMB, I"RL__Pr", NULL); Veneer::index(I, OC__CL_VSYMB, I"OC__Cl", NULL); Veneer::index(I, RV__PR_VSYMB, I"RV__Pr", NULL); Veneer::index(I, OP__PR_VSYMB, I"OP__Pr", NULL); Veneer::index(I, CA__PR_VSYMB, I"CA__Pr", NULL); Veneer::index(I, RT__ERR_VSYMB, I"RT__Err", NULL); Veneer::index(I, FLOAT_NAN_VSYMB, I"FLOAT_NAN", NULL); Veneer::index(I, PROPERTY_METADATA_VSYMB, I"property_metadata", NULL); Veneer::index(I, FBNA_PROP_NUMBER_VSYMB, I"FBNA_PROP_NUMBER", NULL); Veneer::index(I, VALUE_PROPERTY_HOLDERS_VSYMB, I"value_property_holders", NULL); Veneer::index(I, VALUE_RANGE_VSYMB, I"value_range", NULL); Veneer::index(I, RESPONSETEXTS_VSYMB, I"ResponseTexts", NULL); Veneer::index(I, CREATEPROPERTYOFFSETS_VSYMB, I"CreatePropertyOffsets", NULL); Veneer::index(I, KINDHIERARCHY_VSYMB, I"KindHierarchy", NULL); Veneer::index(I, SAVED_SHORT_NAME_VSYMB, I"saved_short_name", NULL); Veneer::index(I, NO_RESPONSES_VSYMB, I"NO_RESPONSES", NULL); } void Veneer::index(inter_tree *I, int ix, text_stream *S, text_stream *T) { Dictionaries::create(I->site.veneer_symbols_indexed_by_name, S); Dictionaries::write_value(I->site.veneer_symbols_indexed_by_name, S, (void *) &(I->site.veneer_symbols[ix])); I->site.veneer_symbol_names[ix] = Str::duplicate(S); I->site.veneer_symbol_translations[ix] = Str::duplicate(T); } inter_symbol *Veneer::find_by_index(inter_tree *I, int ix, inter_symbol *unchecked_kind_symbol) { inter_symbol **slot = &(I->site.veneer_symbols[ix]); return Veneer::make(I, slot, I->site.veneer_symbol_names[ix], I->site.veneer_symbol_translations[ix], unchecked_kind_symbol); } inter_symbol *Veneer::find(inter_tree *I, text_stream *S, inter_symbol *unchecked_kind_symbol) { if (Dictionaries::find(I->site.veneer_symbols_indexed_by_name, S)) { inter_symbol **slot = (inter_symbol **) Dictionaries::read_value(I->site.veneer_symbols_indexed_by_name, S); if (slot == NULL) internal_error("accident with veneer dictionary"); if (*slot) return *slot; for (int ix=0; ix<MAX_VSYMBS; ix++) if (Str::eq(I->site.veneer_symbol_names[ix], S)) return Veneer::find_by_index(I, ix, unchecked_kind_symbol); internal_error("indexing accident with veneer dictionary"); } return NULL; } inter_symbol *Veneer::make(inter_tree *I, inter_symbol **slot, text_stream *S, text_stream *T, inter_symbol *unchecked_kind_symbol) { if (*slot == NULL) { inter_package *veneer_package = Packaging::incarnate(Site::veneer_request(I)); inter_bookmark *IBM = Site::veneer_booknark(I); inter_symbols_table *tab = Inter::Packages::scope(veneer_package); *slot = Inter::SymbolsTables::symbol_from_name_creating(tab, S); if (Str::len(T) > 0) Inter::Symbols::set_translate(*slot, T); Inter::Symbols::annotate_i(*slot, VENEER_IANN, 1); Produce::guard(Inter::Constant::new_numerical(IBM, Inter::SymbolsTables::id_from_symbol(Inter::Bookmarks::tree(IBM), veneer_package, *slot), Inter::SymbolsTables::id_from_symbol(Inter::Bookmarks::tree(IBM), veneer_package, unchecked_kind_symbol), LITERAL_IVAL, 0, (inter_t) Inter::Bookmarks::baseline(IBM) + 1, NULL)); } return *slot; }