SYMBOL CgBackOpDelete( // GET ADDRESIBLE OPERATOR DELETE FOR A TYPE TYPE type ) // - the type { SEARCH_RESULT* result; // - lookup result SYMBOL op_del; // - operator delete result = ScopeFindNaked( TypeScope( type ), CppOperatorName( CO_DELETE ) ); op_del = ClassFunMakeAddressable( result->sym_name->name_syms ); ScopeFreeResult( result ); return op_del; }
static SYMBOL rtSymbolLookup( // LOOKUP RUN-TIME SYMBOL IN FILE SCOPE NAME name ) // - name of run-time function { SEARCH_RESULT *result; // - lookup result SYMBOL sym; // - symbol for lookup result = ScopeFindNaked( GetInternalScope(), name ); if( result == NULL ) { sym = NULL; } else { sym = result->sym_name->name_syms; ScopeFreeResult( result ); } return sym; }
static void insertOperand // INSERT FOR OPERAND, IF POSSIBLE ( PTREE* a_node ) // - addr[ operand ] { PTREE node = *a_node; // - operand SEARCH_RESULT *result; // - result of lookup SYMBOL sym; // - a symbol looked up if( NULL != node ) { switch( node->op ) { case PT_ID : if( NULL != sym_at ) { if( node->op == PT_ID ) { switch( node->cgop ) { case CO_NAME_CDTOR_EXTRA : case CO_NAME_DTOR : break; default : result = ScopeFindNaked( GetCurrScope(), node->u.id.name ); if( NULL == result ) break; sym = result->sym_name->name_syms; if( NULL == sym ) break; if( SymIsAnError( sym ) ) break; if( SymIsConstantInt( sym ) ) break; // drops thru case CO_NAME_THIS : case CO_NAME_CONVERT : node = insert( node, name_at ); break; } } } break; case PT_BINARY : switch( node->cgop ) { case CO_ARROW : case CO_DOT : node = insert( node, name_op ); break; default : break; } break; default : break; } *a_node = node; } }
static SYMBOL lookupOptSym( // LOOK UP OPTIMIZATION SYMBOL OPT_DEFN *odef ) // - optimization definition { SEARCH_RESULT* result; // - lookup result SYMBOL var; // - name defined in compiled code result = ScopeFindNaked( GetFileScope(), optName( odef ) ); if( result == NULL ) { var = NULL; } else { var = result->sym_name->name_syms; odef->sym = var; ScopeFreeResult( result ); } return var; }
// forms: #pragma extref( symbol [, ...] ) // #pragma extref( "name" [, ...] ) // // causes a external reference to be emitted for the symbol or "name" // static void parseExtRef( // PARSE SYMBOL NAME void ) { PRAG_EXT_REF *entry; if( CurToken == T_STRING ) { entry = RingAlloc( &pragmaExtrefs, offsetof( PRAG_EXT_REF, name ) + TokenLen + 1 ); memcpy( entry->name, Buffer, TokenLen + 1 ); entry->symbol = NULL; } else if( IS_ID_OR_KEYWORD( CurToken ) ) { SEARCH_RESULT* result; NAME name = NameCreateLen( Buffer, TokenLen ); result = ScopeFindNaked( GetCurrScope(), name ); if( result == NULL ) { CErr2p( ERR_PRAG_EXTREF_NONE, Buffer ); } else { SYMBOL_NAME sname = result->sym_name; SYMBOL sym = sname->name_syms; ScopeFreeResult( result ); if( sym == NULL ) { CErr2p( ERR_PRAG_EXTREF_BAD, Buffer ); } else if( SymIsFunction( sym ) ) { if( IsOverloadedFunc( sym ) ) { CErr2p( ERR_PRAG_EXTREF_OVERLOADED, sym ); sym = NULL; } } else if( SymIsData( sym ) ) { // no checks now } else { CErr2p( ERR_PRAG_EXTREF_BAD, sym ); sym = NULL; } if( sym != NULL ) { entry = RingAlloc( &pragmaExtrefs, offsetof( PRAG_EXT_REF, name ) + 1 ); entry->symbol = sym; entry->name[0] = '\0'; } } } }
static void pragDumpObjectModel( // DUMP OBJECT MODEL void ) { if( IS_ID_OR_KEYWORD( CurToken ) ) { NAME name = NameCreateLen( Buffer, TokenLen ); SEARCH_RESULT* result = ScopeFindNaked( GetCurrScope(), name ); if( result == NULL ) { CErr2p( ERR_DUMP_OBJ_MODEL, Buffer ); } else { SYMBOL_NAME sname = result->sym_name; ScopeFreeResult( result ); if( sname->name_syms == NULL ) { TYPE type = sname->name_type->sym_type; if( TypeDefined( type ) ) { TYPE dump_type; dump_type = StructType( type ); if( dump_type != NULL ) { DumpObjectModelClass( dump_type ); } else { dump_type = EnumType( type ); if( dump_type != NULL ) { DumpObjectModelEnum( dump_type ); } else { CErr2p( ERR_DUMP_OBJ_MODEL, Buffer ); } } } else { CErr2p( ERR_DUMP_OBJ_MODEL, Buffer ); } } else { CErr2p( ERR_DUMP_OBJ_MODEL, Buffer ); } } NextToken(); } }