コード例 #1
0
ファイル: p_stack.c プロジェクト: hyena/fuzzball
void
prim_ldup(PRIM_PROTOTYPE)
{
	int i;

	CHECKOP_READONLY(1);
	nargs = 0;

	if (arg[*top - 1].type != PROG_INTEGER)
		abort_interp("Operand is not an integer.");

	result = arg[*top - 1].data.number;

	if (result < 0)
		abort_interp("Operand is negative.");

	result++;
	CHECKOP_READONLY(result);
	nargs = 0;
	CHECKOFLOW(result);

	for (i = result; i > 0; i--) {
		copyinst(&arg[*top - result], &arg[*top]);
		(*top)++;
	}
}
コード例 #2
0
ファイル: p_stack.c プロジェクト: CyberLeo/protomuck
void
prim_pick(PRIM_PROTOTYPE)
{
    CHECKOP_READONLY(1);
    temp1 = *(oper1 = POP());
    if (temp1.type != PROG_INTEGER || temp1.data.number <= 0)
        abort_interp("Operand not a positive integer");
    CHECKOP_READONLY(temp1.data.number);
    copyinst(&arg[*top - temp1.data.number], &arg[*top]);
    (*top)++;
}
コード例 #3
0
ファイル: p_stack.c プロジェクト: CyberLeo/protomuck
void
prim_dup(PRIM_PROTOTYPE)
{
    CHECKOP_READONLY(1);
    CHECKOFLOW(1);
    copyinst(&arg[*top - 1], &arg[*top]);
    (*top)++;
}
コード例 #4
0
ファイル: p_stack.c プロジェクト: CyberLeo/protomuck
void
prim_over(PRIM_PROTOTYPE)
{
    CHECKOP_READONLY(2);
    CHECKOFLOW(1);
    copyinst(&arg[*top - 2], &arg[*top]);
    (*top)++;
}