changeset 22283:bc0c838ba705

Cache the parsed sources par individual language to avoid obtaining CallTarget parsed by a different language.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 07 Oct 2015 12:39:09 +0200
parents 088b3121f5ae
children 33d49924a921
files truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java
diffstat 1 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Wed Oct 07 09:26:41 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Wed Oct 07 12:39:09 2015 +0200
@@ -78,6 +78,8 @@
  */
 @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.
      */
@@ -446,17 +448,15 @@
             return super.importSymbol(vm, queryingLang, globalName);
         }
 
-        private static final Map<Source, CallTarget> COMPILED = Collections.synchronizedMap(new WeakHashMap<Source, CallTarget>());
-
         @Override
         protected Object eval(TruffleLanguage<?> language, Source source) throws IOException {
-            CallTarget target = COMPILED.get(source);
+            CallTarget target = language.COMPILED.get(source);
             if (target == null) {
                 target = language.parse(source, null);
                 if (target == null) {
                     throw new IOException("Parsing has not produced a CallTarget for " + source);
                 }
-                COMPILED.put(source, target);
+                language.COMPILED.put(source, target);
             }
             try {
                 return target.call();