void CpQuit(void) { //================ // Compile a QUIT statement. itnode *block_label; csnode *csblock; CSExtn(); block_label = GetBlockLabel(); csblock = CSHead; if( block_label->opnd_size != 0 ) { for(;;) { if( CmpNode2Str( block_label, &csblock->label ) ) break; if( csblock->link == NULL ) break; csblock = csblock->link; } } if( csblock->typ == CS_EMPTY_LIST ) { StmtErr( SP_BAD_QUIT ); } else if( (csblock->typ == CS_GUESS) || (csblock->typ == CS_ADMIT) ) { GBranch( csblock->branch ); } else { GBranch( csblock->bottom ); } BlockLabel(); }
bool RecKeyWord( char *key ) { //=============================== if( CITNode->opn.ds != DSOPN_NAM ) return( false ); return( CmpNode2Str( CITNode, key ) ); }
void CpCycle(void) { //================= // Compile the CYCLE statement. itnode *block_label; csnode *csblock; CSExtn(); block_label = GetBlockLabel(); csblock = CSHead; for(;;) { if( ( csblock->typ == CS_DO ) || ( csblock->typ == CS_DO_WHILE ) || ( csblock->typ == CS_WHILE ) || ( csblock->typ == CS_LOOP ) ) { if( block_label->opnd_size == 0 ) break; if( CmpNode2Str( block_label, &csblock->label ) ) break; } if( csblock->link == NULL ) break; csblock = csblock->link; } if( csblock->typ == CS_EMPTY_LIST ) { StmtErr( SP_BAD_QUIT ); } else { GBranch( csblock->cycle ); } BlockLabel(); }
static void CkRemBlkRec( void ) { csnode *node; node = CSHead; while( node->typ != CS_REMOTEBLOCK ) { node = node->link; } if( CmpNode2Str( CITNode, &node->label ) ) { Error( SP_RECURSE ); } }