Exemple #1
0
static  void    ConList( void ) {
//=========================

// Collect constants for data initialization.

    OPR         opr;
    itnode      *last_node;

    opr = FindSlash( &last_node );
    for(;;) {
        if( RecNextOpr( OPR_MUL ) ) {
            ProcDataRepExpr();
            if( ITIntValue( CITNode ) <= 0 ) {
                Error( DA_BAD_RPT_SPEC );
            }
            AddConst( CITNode );
            AdvanceITPtr();
        }
        if( !HexConst() ) {
            GetSConst();
            AddConst( CITNode );
        }
        AdvanceITPtr();
        if( CITNode == last_node )
            break;
        ReqComma();
        if( AError ) {
            break;
        }
    }
    CITNode->opr = opr;
    ReqDiv();
}
Exemple #2
0
static  void    VarList( void ) {
//=========================

// Process one variable list in a DATA statement.

    OPR         last_opr;
    OPR         opr;
    int         do_level;
    itnode      *last_node;

    do_level = 0;
    last_opr = FindSlash( &last_node );
    while( CITNode != last_node ) {
        if( AError )
            break;
        if( RecTrmOpr() && ( CITNode != ITHead ) ) {
            --do_level;
            FinishImpDo();
        } else if( StartImpDo() ) {
            ++do_level;
        } else if( ReqName( NAME_VAR_OR_ARR ) ) {
            InitVar = LkSym();
            if( InitVar->u.ns.u1.s.typ == FT_STRUCTURE ) {
                // make sure structure size is calculated - normally
                // structure size is calculated by StructResolve() which
                // is not called until the first executable statement
                CalcStructSize( InitVar->u.ns.xt.sym_record );
            }
            CkFlags();
            opr = CITNode->opr;
            ProcDataExpr();
            CITNode->opr = opr;
            ListItem();
            if( !RecTrmOpr() ) {
                ReqComma();
            }
        } else {
            AdvanceITPtr();
            AError = true;
            break;
        }
    }
    if( AError ) {
        while( do_level != 0 ) { // clean up hanging do entrys
            TermDo();
            --do_level;
        }
    } else {
        CITNode->opr = last_opr;
        ReqDiv();
    }
}
Exemple #3
0
void    CpSave( void ) {
//================

// Compile SAVE statement :    SAVE A1 {,A2 ... }
//
//      where Ai is 1. a common block name preceded and followed by a /
//                  2. an array name
//                  3. a variable name

    sym_id      sym_ptr;

    if( RecNOpn() && RecNextOpr( OPR_TRM ) ) {
        if( ( (SgmtSw & SG_LITTLE_SAVE) != 0 ) || ( (SgmtSw & SG_BIG_SAVE) != 0 ) ) {
            Error( SA_SAVED );
        }
        SgmtSw |= SG_BIG_SAVE;
    } else {
        for( ;; ) {
            if( RecNOpn() && RecNextOpr( OPR_DIV ) ) {
                AdvanceITPtr();
                if( ReqName( NAME_COMMON ) ) {
                    sym_ptr = LkCommon();
                    if( sym_ptr->u.ns.flags == 0 ) {
                        sym_ptr->u.ns.flags |= SY_USAGE | SY_COMMON;
                    }
                    Save( sym_ptr );
                }
                AdvanceITPtr();
                ReqDiv();
                ReqNOpn();
            } else if( ReqName( NAME_VAR_OR_ARR ) ) {
                sym_ptr = LkSym();
                if( ( sym_ptr->u.ns.flags & ~SV_ON_OR_OFF ) != SY_VARIABLE ) {
                    IllName( sym_ptr );
                } else {
                    Save( sym_ptr );
                }
            }
            AdvanceITPtr();
            if( !RecComma() ) {
                break;
            }
        }
        ReqEOS();
    }
}