void CpEndLoop( void ) { // Compile an ENDLOOP statment. if( CSHead->typ == CS_LOOP ) { GLabel( CSHead->cycle ); FiniLoop(); } else { Match(); } DelCSNode(); CSNoMore(); }
void CpEndWhile( void ) { // Compile an ENDWHILE statement. if( CSHead->typ == CS_WHILE ) { GLabel( CSHead->cycle ); FiniLoop(); } else { Match(); } DelCSNode(); CSNoMore(); }
void CpEndBlock( void ) { CheckCSList( CS_REMOTEBLOCK ); if( CSHead->typ == CS_REMOTEBLOCK ) { GLabel( CSHead->bottom ); FreeLabel( CSHead->bottom ); // Make sure REMOTEBLOCK statement was valid. if( CSHead->cs_info.rb != NULL ) { GEndBlock(); } GLabel( CSHead->branch ); FreeLabel( CSHead->branch ); DelCSNode(); } else { Match(); } CSNoMore(); StNumbers.in_remote = FALSE; ClearRem(); CSNoMore(); BIEndRBorEP(); }
void CpUntil( void ) { // Compile an UNTIL statement. if( ( CSHead->typ == CS_LOOP ) || ( CSHead->typ == CS_WHILE ) ) { GLabel( CSHead->cycle ); CSCond( CSHead->branch ); GLabel( CSHead->bottom ); FreeLabel( CSHead->branch ); FreeLabel( CSHead->bottom ); FreeLabel( CSHead->cycle ); } else { Match(); } DelCSNode(); CSNoMore(); }
void CpElse(void) { //================ // Process an ELSE statement. if( ( CSHead->typ == CS_IF ) || ( CSHead->typ == CS_ELSEIF ) ) { GBranch( CSHead->bottom ); GLabel( CSHead->branch ); FreeLabel( CSHead->branch ); CSHead->typ = CS_ELSE; CSHead->block = ++BlockNum; } else if( CSHead->typ == CS_ELSE ) { Error( IF_ELSE_LAST ); } else { Match(); } CSNoMore(); }
void CpEndif(void) { //================= // Process an ENDIF statement. if( ( CSHead->typ == CS_IF ) || ( CSHead->typ == CS_ELSEIF ) ) { GLabel( CSHead->branch ); FreeLabel( CSHead->branch ); GLabel( CSHead->bottom ); FreeLabel( CSHead->bottom ); } else if( CSHead->typ == CS_ELSE ) { GLabel( CSHead->bottom ); FreeLabel( CSHead->bottom ); } else { Match(); } DelCSNode(); CSNoMore(); }
void CpEndDo( void ) { // Compile an ENDDO statement. if( CSHead->typ == CS_DO ) { if( CSHead->cs_info.do_parms->do_term == 0 ) { TermDo(); } else { BadDoEnd(); } } else if( CSHead->typ == CS_DO_WHILE ) { if( CSHead->cs_info.do_term == 0 ) { TermDoWhile(); } else { BadDoEnd(); } } else { Match(); } CSNoMore(); }
void CpContinue( void ) { // Compile a CONTINUE statement. CSNoMore(); }