Esempio n. 1
0
File: m_break.c Progetto: 5HT/mumps
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
	}
}