void DetSubList(void) { //==================== itnode *cit; int count; byte no_subs; itnode *save_cit; uint ch_size; if( CITNode->opn.us & USOPN_FLD ) { no_subs = _DimCount( CITNode->sym_ptr->u.fd.dim_ext->dim_flags ); } else { no_subs = _DimCount( CITNode->sym_ptr->u.ns.si.va.u.dim_ext->dim_flags ); } count = 0; cit = CITNode; AdvanceITPtr(); while( RecComma() || RecFBr() ) { if( CheckColon() ) { if( count == 0 ) { save_cit = CITNode; CITNode = cit; OpndErr( SV_TRIED_SSTR ); CITNode = save_cit; } else if( count != no_subs ) { Error( SV_INV_SSCR ); } SubStrArgs( cit ); cit->opn.us &= ~USOPN_WHAT; cit->opn.us |= USOPN_ASS; Detach( cit ); return; } if( RecNOpn() ) break; ++count; CkScrStr(); AdvanceITPtr(); } if( !RecCloseParen() ) { Error( PC_NO_CLOSEPAREN ); } if( count != no_subs ) { Error( SV_INV_SSCR ); } // we must make sure the array isn't substrung before we can set OPN_SS1 if( !( cit->opn.us & USOPN_FLD ) && ( cit->sym_ptr->u.ns.u1.s.typ == FT_CHAR ) ) { ch_size = cit->sym_ptr->u.ns.xt.size; if( ch_size > 0 ) { cit->opn.us |= USOPN_SS1; cit->value.st.ss_size = ch_size; } } Detach( cit ); }
static void CkNameNoList( void ) { //============================== // Check that array/subprogram with no list is alright. if( ( ASType & AST_IO ) && RecTrmOpr() && RecNextOpr( OPR_TRM ) ) { if( ( CITNode->opn.us & USOPN_WHAT ) != USOPN_ARR ) { ClassErr( SV_NO_LIST, CITNode->sym_ptr ); } return; } if( ( !RecNextOpr( OPR_COM ) && !RecNextOpr( OPR_RBR ) ) || ( !RecComma() && !RecFBr() ) ) { ClassErr( SV_NO_LIST, CITNode->sym_ptr ); } }