// Copyright (c) 1996-2002 Brian D. Carlstrom

package bdc.scheme.procedure;

import bdc.scheme.Reader;
import bdc.scheme.Scheme;
import bdc.scheme.SchemeException;
import bdc.scheme.Stack;
import bdc.scheme.expression.Procedure1;
import java.io.PushbackReader;

/**
    (read x) (read x i)
*/
public class Read extends Procedure1
{
    public Object apply0 (Stack stack) throws SchemeException
    {
        try {
            stack.addElement(stack.currentInputPort);
            return apply1(stack);
        }
        finally {
            stack.inUse -= 1;
        }
    }

    public Object apply1 (Stack stack) throws SchemeException
    {
        Object o1 = stack.array[stack.inUse-1];

        PushbackReader port = Scheme.pushbackReader(o1, this);
        Reader reader = new Reader(port.toString(), port);
        return reader.read();
    }
}
