// Copyright (c) 1996-2002 Brian D. Carlstrom

package bdc.scheme.procedure;

import bdc.scheme.Environment;
import bdc.scheme.Scheme;
import bdc.scheme.SchemeException;
import bdc.scheme.Stack;
import bdc.scheme.exception.ArgumentTypeException;
import bdc.scheme.expression.Procedure2;

/**
    (eval x y)
*/
public class Eval extends Procedure2
{
    public Object apply2 (Stack stack) throws SchemeException
    {
        Object o1 = stack.array[stack.inUse-1];
        Object o2 = stack.array[stack.inUse-2];

        o2 = Scheme.schemeNullToNull(o2);
        if (!(o2 == null || o2 instanceof Environment)) {
            throw new ArgumentTypeException(this, "Environment", o2);
        }
        return stack.scheme.compiler.eval(o1, stack);
    }
}
