diff truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 22373:dea950d41ef3

Make CallTarget caching local to PolyglotEngine instances.
author Christian Humer <christian.humer@oracle.com>
date Tue, 17 Nov 2015 16:50:11 +0100
parents 414e82b9fc35
children 299c279c87b3
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Tue Nov 17 11:02:55 2015 +0100
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Tue Nov 17 16:50:11 2015 +0100
@@ -31,9 +31,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-import java.util.Collections;
-import java.util.Map;
-import java.util.WeakHashMap;
+import java.util.Objects;
 
 import com.oracle.truffle.api.debug.Debugger;
 import com.oracle.truffle.api.debug.SuspendedEvent;
@@ -49,7 +47,6 @@
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.source.Source;
-import java.util.Objects;
 
 /**
  * An entry point for everyone who wants to implement a Truffle based language. By providing an
@@ -72,7 +69,6 @@
  */
 @SuppressWarnings("javadoc")
 public abstract class TruffleLanguage<C> {
-    private final Map<Source, CallTarget> compiled = Collections.synchronizedMap(new WeakHashMap<Source, CallTarget>());
 
     /**
      * Constructor to be called by subclasses.
@@ -440,20 +436,12 @@
         }
 
         @Override
-        protected Object eval(TruffleLanguage<?> language, Source source) throws IOException {
-            CallTarget target = language.compiled.get(source);
+        protected CallTarget parseForEval(TruffleLanguage<?> language, Source source) throws IOException {
+            CallTarget target = language.parse(source, null);
             if (target == null) {
-                target = language.parse(source, null);
-                if (target == null) {
-                    throw new IOException("Parsing has not produced a CallTarget for " + source);
-                }
-                language.compiled.put(source, target);
+                throw new IOException("Parsing has not produced a CallTarget for " + source);
             }
-            try {
-                return target.call();
-            } catch (Throwable ex) {
-                throw new IOException(ex);
-            }
+            return target;
         }
 
         @Override