package mumbler.truffle.node.read;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.frame.VirtualFrame;
import mumbler.truffle.MumblerException;
import mumbler.truffle.node.MumblerNode;
public class ReadArgumentNode extends MumblerNode {
public final int argumentIndex;
public ReadArgumentNode(int argumentIndex) {
this.argumentIndex = argumentIndex;
}
@Override
public Object execute(VirtualFrame virtualFrame) {
if (!this.isArgumentIndexInRange(virtualFrame, this.argumentIndex)) {
CompilerDirectives.transferToInterpreterAndInvalidate();
throw new MumblerException("Not enough arguments passed. Missing " +
(this.argumentIndex + 1) + "th argument");
}
return this.getArgument(virtualFrame, this.argumentIndex);
}
@Override
public String toString() {
return "(arg " + this.argumentIndex + ")";
}
}