void FinishImpDo( void ) { //===================== // Finish the implied DO. TermDo(); AdvanceITPtr(); }
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(); } }
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(); }