Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java @ 15564:a3b0ecef8a15
Truffle: Provide default implementation on non-Graal VMs for stack trace functionality.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 08 May 2014 22:53:28 +0200 |
parents | 5634b199c4da |
children | 0a35e2789735 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java Thu May 08 15:00:52 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java Thu May 08 22:53:28 2014 +0200 @@ -34,14 +34,40 @@ public final class DefaultDirectCallNode extends DirectCallNode { private boolean inliningForced; + private final DefaultTruffleRuntime defaultTruffleRuntime; - public DefaultDirectCallNode(CallTarget target) { + public DefaultDirectCallNode(CallTarget target, DefaultTruffleRuntime defaultTruffleRuntime) { super(target); + this.defaultTruffleRuntime = defaultTruffleRuntime; } @Override - public Object call(VirtualFrame frame, Object[] arguments) { - return getCurrentCallTarget().call(arguments); + public Object call(final VirtualFrame frame, Object[] arguments) { + final CallTarget currentCallTarget = defaultTruffleRuntime.getCurrentFrame().getCallTarget(); + FrameInstance frameInstance = new FrameInstance() { + + public Frame getFrame(FrameAccess access, boolean slowPath) { + return frame; + } + + public boolean isVirtualFrame() { + return false; + } + + public Node getCallNode() { + return DefaultDirectCallNode.this; + } + + public CallTarget getCallTarget() { + return currentCallTarget; + } + }; + defaultTruffleRuntime.pushFrame(frameInstance); + try { + return getCurrentCallTarget().call(arguments); + } finally { + defaultTruffleRuntime.popFrame(); + } } @Override