Mercurial > hg > truffle
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();