aux_info *AuxLookupAdd( char *name, int name_len ) { //===================================================== aux_info *aux; aux = AuxLookupName( name, name_len ); if( aux == NULL ) { aux = NewAuxEntry( name, name_len ); CopyAuxInfo( aux, &FortranInfo ); } return( aux ); }
bool GetPragAuxAlias( void ) { bool isfar16; isfar16 = PragRecog( "far16" ); if( IS_ID_OR_KEYWORD( CurToken ) ) { CurrAlias = SearchPragAuxAlias( Buffer ); NextToken(); } if( CurToken == T_RIGHT_PAREN ) NextToken(); if( isfar16 ) AuxInfo.flags |= AUX_FLAG_FAR16; CopyAuxInfo(); return( true ); }
static int GetAliasInfo( void ) /*****************************/ { int isfar16; if( CurToken != T_LEFT_PAREN ) // #pragma aux symbol ..... return( 1 ); NextToken(); if( CurToken != T_ID ) // error return( 0 ); LookAhead(); if( LAToken == T_RIGHT_PAREN ) { // #pragma aux (alias) symbol ..... PragCurrAlias( SavedId ); AdvanceToken(); NextToken(); return( 1 ); } else if( LAToken == T_COMMA ) { // #pragma aux (symbol, alias) HashValue = SavedHash; SetCurrInfo( SavedId ); AdvanceToken(); NextToken(); if( CurToken != T_ID ) // error return( 0 ); isfar16 = PragRecog( "far16" ); if( CurToken == T_ID ) { PragCurrAlias( Buffer ); NextToken(); } if( CurToken == T_RIGHT_PAREN ) NextToken(); if( isfar16 ) AuxInfo.flags |= AUX_FLAG_FAR16; CopyAuxInfo(); PragEnding(); return( 0 ); /* process no more! */ } else { // error AdvanceToken(); return( 0 ); // shut up the compiler } }
void PragAux( void ) /******************/ { struct { unsigned f_call : 1; unsigned f_loadds : 1; unsigned f_rdosdev: 1; unsigned f_export : 1; unsigned f_parm : 1; unsigned f_value : 1; unsigned f_modify : 1; unsigned f_frame : 1; unsigned uses_auto: 1; } have; InitAuxInfo(); if( !GetAliasInfo() ) return; if( CurToken != T_ID ) return; SetCurrInfo( Buffer ); NextToken(); PragObjNameInfo( &AuxInfo.objname ); have.f_call = 0; have.f_loadds = 0; have.f_rdosdev = 0; have.f_export = 0; have.f_parm = 0; have.f_value = 0; have.f_modify = 0; have.f_frame = 0; have.uses_auto = 0; /* BBB - Jan 26, 1994 */ for( ;; ) { if( !have.f_call && CurToken == T_EQUAL ) { have.uses_auto = GetByteSeq( &AuxInfo.code ); have.f_call = 1; } else if( !have.f_call && PragRecog( "far" ) ) { AuxInfo.cclass |= FAR; have.f_call = 1; } else if( !have.f_call && PragRecog( "near" ) ) { AuxInfo.cclass &= ~FAR; AuxInfoFlg.f_near = 1; have.f_call = 1; } else if( !have.f_loadds && PragRecog( "loadds" ) ) { AuxInfo.cclass |= LOAD_DS_ON_ENTRY; have.f_loadds = 1; } else if( !have.f_rdosdev && PragRecog( "rdosdev" ) ) { AuxInfo.cclass |= LOAD_RDOSDEV_ON_ENTRY; have.f_rdosdev = 1; } else if( !have.f_export && PragRecog( "export" ) ) { AuxInfo.cclass |= DLL_EXPORT; have.f_export = 1; } else if( !have.f_parm && PragRecog( "parm" ) ) { GetParmInfo(); have.f_parm = 1; } else if( !have.f_value && PragRecog( "value" ) ) { GetRetInfo(); have.f_value = 1; } else if( !have.f_value && PragRecog( "aborts" ) ) { AuxInfo.cclass |= SUICIDAL; have.f_value = 1; } else if( !have.f_modify && PragRecog( "modify" ) ) { GetSaveInfo(); have.f_modify = 1; } else if( !have.f_frame && PragRecog( "frame" ) ) { AuxInfo.cclass |= GENERATE_STACK_FRAME; have.f_frame = 1; } else { break; } } if( have.uses_auto ) { /* We want to force the calling routine to set up a [E]BP frame for the use of this pragma. This is done by saying the pragma modifies the [E]SP register. A kludge, but it works. */ HW_CTurnOn( AuxInfo.save, HW_SP ); } CopyAuxInfo(); PragEnding(); }