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