void CgFrontModInitFini( // PROCESS MODULE-INIT. AFTER FRONT-END void ) { SYMBOL mod; // - symbol for module-initialization func. CGFILE *fp; // - file for module initialization mod = ModuleInitFuncSym(); if( SymIsReferenced( mod ) && ErrCount == 0 ) { ModuleInitConnect(); } else { mod->flag |= SF_REFERENCED; fp = CgioLocateFile( mod ); CgioFreeFile( fp ); } }
bool CgDeclSkippableConstObj( // DETERMINE IF SKIPPABLE CONST OBJ SYMBOL sym ) // - symbol { if( SymAddrTaken( sym ) ) { return( false ); } if( SymIsAutomatic( sym ) && ( GenSwitches & DBG_LOCALS ) ) { // if we are debugging locals; don't skip initialization return( false ); } if( SymIsConstantInt( sym ) ) { return( true ); } if( SymIsConstantNoCode( sym ) && ! SymIsReferenced( sym ) ) { if( SymIsStaticData( sym ) ) { return( true ); } } return( false ); }
// Scope has dtor_reqd set off initially. // Turn it on if symbol requiring temp is found // void CgDeclSym( // PROCESS SYMBOL IN BLOCK-OPEN SCOPE SYMBOL sym ) // - current symbol { FN_CTL* fctl; // - function information SYMBOL orig; // - original symbol orig = sym; sym = inlineSymbol( sym ); fctl = FnCtlTop(); if( CgRetnOptIsOptVar( fctl, orig ) ) { sym->flag |= SF_RETN_OPT; return; } switch( sym->id ) { case SC_AUTO: case SC_REGISTER: if( SymIsCatchAlias( sym ) ) { if( fctl->debug_info && ( GenSwitches & DBG_LOCALS ) ) { SYMBOL base = SymDeAlias( sym ); switch( base->id ) { case SC_AUTO: case SC_REGISTER: if( ! SymIsAnonymous( sym ) ) { if( !SymIsTemporary( sym ) ) { if( GenSwitches & DBG_DF ){ DwarfSymDebugGenSymbol( sym, true, false ); }else{ SymbolicDebugGenSymbol( sym, true, false ); } } } break; } } } else { if( ! SymIsAnonymous( sym ) ) { if( SymIsTemporary( sym ) ) { if( SymIsReferenced( sym ) || SymIsInitialized( sym ) ) { declareAuto( sym ); } } else { declareAuto( sym ); if( fctl->debug_info && ( GenSwitches & DBG_LOCALS ) ) { if( GenSwitches & DBG_DF ){ DwarfDebugGenSymbol( sym, true ); }else{ SymbolicDebugGenSymbol( sym, true, false ); } } } } } break; case SC_STATIC: if( fctl->debug_info && ( GenSwitches & DBG_LOCALS ) ) { if( ! SymIsAnonymous( sym ) ) { if( SymIsReferenced( sym ) || SymIsInitialized( sym ) ) { if( ! CgDeclSkippableConstObj( sym ) ) { if( GenSwitches & DBG_DF ){ DwarfDebugGenSymbol( sym, true ); }else{ SymbolicDebugGenSymbol( sym, true, false ); } } } } } break; case SC_TYPEDEF: if( fctl->debug_info && ( GenSwitches & DBG_LOCALS ) ) { if( GenSwitches & (DBG_CV | DBG_DF ) ){ DBLocalType( (cg_sym_handle)sym, false ); } } break; } }