Mercurial > hg > graal-compiler
comparison 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 |
comparison
equal
deleted
inserted
replaced
15562:de3dca7cc6fd | 15564:a3b0ecef8a15 |
---|---|
32 * This is runtime specific API. Do not use in a guest language. | 32 * This is runtime specific API. Do not use in a guest language. |
33 */ | 33 */ |
34 public final class DefaultDirectCallNode extends DirectCallNode { | 34 public final class DefaultDirectCallNode extends DirectCallNode { |
35 | 35 |
36 private boolean inliningForced; | 36 private boolean inliningForced; |
37 private final DefaultTruffleRuntime defaultTruffleRuntime; | |
37 | 38 |
38 public DefaultDirectCallNode(CallTarget target) { | 39 public DefaultDirectCallNode(CallTarget target, DefaultTruffleRuntime defaultTruffleRuntime) { |
39 super(target); | 40 super(target); |
41 this.defaultTruffleRuntime = defaultTruffleRuntime; | |
40 } | 42 } |
41 | 43 |
42 @Override | 44 @Override |
43 public Object call(VirtualFrame frame, Object[] arguments) { | 45 public Object call(final VirtualFrame frame, Object[] arguments) { |
44 return getCurrentCallTarget().call(arguments); | 46 final CallTarget currentCallTarget = defaultTruffleRuntime.getCurrentFrame().getCallTarget(); |
47 FrameInstance frameInstance = new FrameInstance() { | |
48 | |
49 public Frame getFrame(FrameAccess access, boolean slowPath) { | |
50 return frame; | |
51 } | |
52 | |
53 public boolean isVirtualFrame() { | |
54 return false; | |
55 } | |
56 | |
57 public Node getCallNode() { | |
58 return DefaultDirectCallNode.this; | |
59 } | |
60 | |
61 public CallTarget getCallTarget() { | |
62 return currentCallTarget; | |
63 } | |
64 }; | |
65 defaultTruffleRuntime.pushFrame(frameInstance); | |
66 try { | |
67 return getCurrentCallTarget().call(arguments); | |
68 } finally { | |
69 defaultTruffleRuntime.popFrame(); | |
70 } | |
45 } | 71 } |
46 | 72 |
47 @Override | 73 @Override |
48 public void forceInlining() { | 74 public void forceInlining() { |
49 inliningForced = true; | 75 inliningForced = true; |