diff truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 22386:086776aa7548

Caching Source -> CallTarget mapping per PolyglotEngine.Language
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Thu, 19 Nov 2015 09:40:21 +0100
parents 2acc64b45848
children 9f64eb5ad9c1
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Thu Nov 19 09:29:24 2015 +0100
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Thu Nov 19 09:40:21 2015 +0100
@@ -72,8 +72,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.
      */
@@ -461,14 +459,14 @@
         }
 
         @Override
-        protected Object eval(TruffleLanguage<?> language, Source source) throws IOException {
-            CallTarget target = language.compiled.get(source);
+        protected Object eval(TruffleLanguage<?> language, Source source, Map<Source, CallTarget> cache) throws IOException {
+            CallTarget target = cache.get(source);
             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);
+                cache.put(source, target);
             }
             try {
                 return target.call();