Exemplo n.º 1
0
void op_fnnext(lv_val *src, mval *key, mval *dst)
{
	DCL_THREADGBL_ACCESS;

	SETUP_THREADGBL_ACCESS;
	assert(!TREF(in_op_fnnext));
	TREF(in_op_fnnext) = TRUE;
	op_fnorder(src, key, dst);
	assert(!TREF(in_op_fnnext)); /* should have been reset by op_fnorder */
	TREF(in_op_fnnext) = FALSE;
}
Exemplo n.º 2
0
void	op_indo2(mval *dst, uint4 indx, mval *direct)
{
	glvn_pool_entry	*slot;
	int4		dummy_intval;
	intszofptr_t	n;
	lv_val		*lv;
	mval		*key;
	opctype		oc;
	DCL_THREADGBL_ACCESS;

	SETUP_THREADGBL_ACCESS;
	MV_FORCE_NUM(direct);
	if (!MV_IS_TRUEINT(direct, &dummy_intval) || (direct->m[1] != (1 * MV_BIAS) && direct->m[1] != (-1 * MV_BIAS)))
		rts_error(VARLSTCNT(1) ERR_ORDER2);
	slot = &((TREF(glvn_pool_ptr))->slot[indx]);
	oc = slot->sav_opcode;
	if (OC_SAVLVN == oc)
	{	/* lvn */
		n = --slot->glvn_info.n;
		if (0 == n)
		{	/* lvn name */
			slot->glvn_info.n++;				/* quick restore count so glvnpop works correctly */
			/* like op_fnlvnameo2 */
			if ((1 * MV_BIAS) == direct->m[1])
				op_fnlvname(slot->lvname, FALSE, dst);
			else
				op_fnlvprvname(slot->lvname, dst);
		} else
		{	/* subscripted lv */
			key = (mval *)slot->glvn_info.arg[n];
			lv = op_rfrshlvn(indx, OC_RFRSHLVN);		/* funky opcode prevents UNDEF in rfrlvn */
			slot->glvn_info.n++;				/* quick restore count so glvnpop works correctly */
			/* like op_fnno2 */
			if ((1 * MV_BIAS) == direct->m[1])
				op_fnorder(lv, key, dst);
			else
				op_fnzprevious(lv, key, dst);
		}
	} else if (OC_NOOP != oc)					/* if indirect error blew set up, skip this */
	{	/* gvn */
		op_rfrshgvn(indx, oc);
		/* like op_gvno2 */
		if ((1 * MV_BIAS) == direct->m[1])
			op_gvorder(dst);
		else
			op_zprevious(dst);
	}
	return;
}
Exemplo n.º 3
0
void op_fno2(lv_val *src,mval *key,mval *dst,mval *direct)
{
    error_def(ERR_ORDER2);

    MV_FORCE_DEFINED(key);
    MV_FORCE_NUM(direct);
    if (!MV_IS_INT(direct) || (direct->m[1] != 1*MV_BIAS && direct->m[1] != -1*MV_BIAS))
        rts_error(VARLSTCNT(1) ERR_ORDER2);
    else
    {   if (direct->m[1] == 1*MV_BIAS)
            op_fnorder(src,key,dst);
        else
            op_fnzprevious(src,key,dst);
    }
}
Exemplo n.º 4
0
static	int pop_top (lv_val *src, mval *res)
{
	lv_val	*tmp;
	plength	pret;

	for (;;)
	{	/* get next element off the top */
		op_fnorder(src, (mval *)&literal_null, res);
		if (!res->str.len)
		{
			pret.p.pint = 0;
			op_kill(src);
			break;
		}
		tmp = op_getindx(VARLSTCNT(2) src, res);
		pret.p.pint = tmp->v.m[1];
		op_kill(tmp);	/* remove this element from tree */

		if (res->str.len > MAX_FBUFF)
			continue;
		break;
	}
	return pret.p.pint;
}