diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java @ 16992:5a1d764f6afc

Truffle: added support for Runtime#getCallTargets()
author Christian Humer <christian.humer@gmail.com>
date Thu, 28 Aug 2014 15:35:29 +0200
parents 534a87f866dc
children 7b45e33b7986
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Thu Aug 28 11:42:02 2014 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Thu Aug 28 15:35:29 2014 +0200
@@ -41,6 +41,7 @@
 
     private ThreadLocal<LinkedList<FrameInstance>> stackTraces = new ThreadLocal<>();
     private ThreadLocal<FrameInstance> currentFrames = new ThreadLocal<>();
+    private final Map<RootCallTarget, Void> callTargets = Collections.synchronizedMap(new WeakHashMap<RootCallTarget, Void>());
 
     public DefaultTruffleRuntime() {
         if (Truffle.getRuntime() != null) {
@@ -55,7 +56,9 @@
 
     @Override
     public RootCallTarget createCallTarget(RootNode rootNode) {
-        return new DefaultCallTarget(rootNode, this);
+        DefaultCallTarget target = new DefaultCallTarget(rootNode, this);
+        callTargets.put(target, null);
+        return target;
     }
 
     public DirectCallNode createDirectCallNode(CallTarget target) {
@@ -132,6 +135,11 @@
     }
 
     @Override
+    public List<RootCallTarget> getCallTargets() {
+        return new ArrayList<>(callTargets.keySet());
+    }
+
+    @Override
     public FrameInstance getCurrentFrame() {
         return currentFrames.get();
     }