static void CkSubEnd( void ) { // Check if we had an END statement. if( ( SgmtSw & SG_STMT_PROCESSED ) && !Remember.endstmt ) { FiniSubProg(); InitSubProg(); } CkDefStmtNo(); }
static bool CompSProg( void ) { bool fini_subprog; InitSubProg(); fini_subprog = FALSE; for(;;) { for(;;) { if( CurrFile->flags & INC_PENDING ) { CurrFile->flags &= ~INC_PENDING; ProcInclude(); ComRead(); } else if( CurrFile->flags & CONC_PENDING ) { if( ( ProgSw & PS_DONT_GENERATE ) && ( ( Options & OPT_SYNTAX ) == 0 ) && ( ( ProgSw & PS_ERROR ) == 0 ) && ( CurrFile->link == NULL ) ) break; Conclude(); if( CurrFile == NULL ) break; ComRead(); } else { break; } } Options = NewOptions; if( ProgSw & ( PS_SOURCE_EOF | PS_END_OF_SUBPROG ) ) break; CompStatement(); if( ProgSw & ( PS_SOURCE_EOF | PS_END_OF_SUBPROG ) ) { // consider: call sam // end // c$include sam // Before we open 'sam', we must finish off the subprogram // so we get the correct file name in the traceback. FiniSubProg(); fini_subprog = TRUE; } if( TBreak() ) return( TRUE ); } if( !fini_subprog ) { FiniSubProg(); } return( FALSE ); }