コード例 #1
0
ファイル: csquit.c プロジェクト: ABratovic/open-watcom-v2
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();
}
コード例 #2
0
ファイル: recog.c プロジェクト: bhanug/open-watcom-v2
bool    RecKeyWord( char *key ) {
//===============================

    if( CITNode->opn.ds != DSOPN_NAM )
        return( false );
    return( CmpNode2Str( CITNode, key ) );
}
コード例 #3
0
ファイル: cscycle.c プロジェクト: Azarien/open-watcom-v2
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();
}
コード例 #4
0
static void CkRemBlkRec( void )
{
    csnode      *node;

    node = CSHead;
    while( node->typ != CS_REMOTEBLOCK ) {
        node = node->link;
    }
    if( CmpNode2Str( CITNode, &node->label ) ) {
        Error( SP_RECURSE );
    }
}