int m_break(void) { if (window_token != TK_SPACE && window_token != TK_EOL) if (!m_xecute()) return FALSE; newtriple(OC_BREAK); if (for_stack_ptr == for_stack) start_fetches (OC_FETCH); else start_for_fetches (); return TRUE; }
int m_break(void) { DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; if ((TK_SPACE != TREF(window_token)) && (TK_EOL != TREF(window_token))) if (!m_xecute()) return FALSE; newtriple(OC_BREAK); if (TREF(for_stack_ptr) == TADR(for_stack)) start_fetches (OC_FETCH); else start_for_fetches (); return TRUE; }
int m_new(void) { oprtype tmparg; triple *ref, *next, *org, *tmp, *s, *fetch; int n; int count; mvar *var; error_def(ERR_INVSVN); error_def(ERR_RPARENMISSING); error_def(ERR_VAREXPECTED); switch (window_token) { case TK_IDENT: var = get_mvaddr(&window_ident); if (var->last_fetch != curr_fetch_trip) { fetch = newtriple(OC_PARAMETER); curr_fetch_opr->operand[1] = put_tref(fetch); fetch->operand[0] = put_ilit(var->mvidx); curr_fetch_count++; curr_fetch_opr = fetch; var->last_fetch = curr_fetch_trip; } tmp = maketriple(OC_NEWVAR); tmp->operand[0] = put_ilit(var->mvidx); ins_triple(tmp); advancewindow(); return TRUE; case TK_ATSIGN: if (!indirection(&tmparg)) return FALSE; ref = maketriple(OC_COMMARG); ref->operand[0] = tmparg; ref->operand[1] = put_ilit((mint) indir_new); ins_triple(ref); start_fetches(OC_FETCH); return TRUE; case TK_DOLLAR: advancewindow(); if (window_token == TK_IDENT) if ((n = namelook(svn_index, svn_names, window_ident.c)) >= 0) { tmp = maketriple(OC_NEWINTRINSIC); switch(svn_data[n].opcode) { case SV_ZTRAP: case SV_ETRAP: case SV_ESTACK: case SV_ZYERROR: case SV_ZGBLDIR: tmp->operand[0] = put_ilit(svn_data[n].opcode); break; default: stx_error(ERR_INVSVN); return FALSE; } advancewindow(); ins_triple(tmp); return TRUE; } stx_error(ERR_INVSVN); return FALSE; case TK_EOL: case TK_SPACE: tmp = maketriple(OC_XNEW); tmp->operand[0] = put_ilit((mint) 0); ins_triple(tmp); if (for_stack_ptr == for_stack) start_fetches (OC_FETCH); else start_for_fetches (); return TRUE; case TK_LPAREN: ref = org = maketriple(OC_XNEW); count = 0; do { advancewindow(); next = maketriple(OC_PARAMETER); ref->operand[1] = put_tref(next); switch (window_token) { case TK_IDENT: next->operand[0] = put_str(&window_ident.c[0],sizeof(mident)); advancewindow(); break; case TK_ATSIGN: if (!indirection(&tmparg)) return FALSE; s = newtriple(OC_INDLVARG); s->operand[0] = tmparg; next->operand[0] = put_tref(s); break; default: stx_error(ERR_VAREXPECTED); return FALSE; } ins_triple(next); ref = next; count++; } while (window_token == TK_COMMA); if (window_token != TK_RPAREN) { stx_error(ERR_RPARENMISSING); return FALSE; } advancewindow(); org->operand[0] = put_ilit((mint) count); ins_triple(org); if (for_stack_ptr == for_stack) start_fetches (OC_FETCH); else start_for_fetches (); return TRUE; default: stx_error(ERR_VAREXPECTED); return FALSE; } }