# HG changeset patch # User Andreas Woess # Date 1407271850 -7200 # Node ID 1ab64f590c88445735db53fc5fd903f2c2058b30 # Parent bd6b44b04143f69cbc14f2f0bcd8bc52bd6a8541# Parent 5f9c3335edd799e041346ba8f44d5cbd60c491be Merge diff -r bd6b44b04143 -r 1ab64f590c88 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultIndirectCallNode.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultIndirectCallNode.java Tue Aug 05 22:00:12 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultIndirectCallNode.java Tue Aug 05 22:50:50 2014 +0200 @@ -32,10 +32,32 @@ * This is runtime specific API. Do not use in a guest language. */ final class DefaultIndirectCallNode extends IndirectCallNode { + @Override + public Object call(final VirtualFrame frame, final CallTarget target, Object[] arguments) { + DefaultTruffleRuntime truffleRuntime = (DefaultTruffleRuntime) Truffle.getRuntime(); + final CallTarget currentCallTarget = truffleRuntime.getCurrentFrame().getCallTarget(); + FrameInstance frameInstance = new FrameInstance() { + public Frame getFrame(FrameAccess access, boolean slowPath) { + return frame; + } - @Override - public Object call(VirtualFrame frame, CallTarget target, Object[] arguments) { - return target.call(arguments); + public boolean isVirtualFrame() { + return false; + } + + public Node getCallNode() { + return DefaultIndirectCallNode.this; + } + + public CallTarget getCallTarget() { + return currentCallTarget; + } + }; + truffleRuntime.pushFrame(frameInstance); + try { + return target.call(arguments); + } finally { + truffleRuntime.popFrame(); + } } - }