# HG changeset patch # User Jaroslav Tulach # Date 1444214349 -7200 # Node ID bc0c838ba7059e76c855b7c342164444ffea71e5 # Parent 088b3121f5aeaa791ffad3f2945a481215532b88 Cache the parsed sources par individual language to avoid obtaining CallTarget parsed by a different language. diff -r 088b3121f5ae -r bc0c838ba705 truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java --- 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 { + private final Map COMPILED = Collections.synchronizedMap(new WeakHashMap()); + /** * Constructor to be called by subclasses. */ @@ -446,17 +448,15 @@ return super.importSymbol(vm, queryingLang, globalName); } - private static final Map COMPILED = Collections.synchronizedMap(new WeakHashMap()); - @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();