Mercurial > hg > truffle
changeset 22374:299c279c87b3
Backed out changeset dea950d41ef3
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Wed, 18 Nov 2015 09:02:41 +0100 |
parents | dea950d41ef3 |
children | b4e89154a774 |
files | truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java |
diffstat | 3 files changed, 22 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java Tue Nov 17 16:50:11 2015 +0100 +++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java Wed Nov 18 09:02:41 2015 +0100 @@ -37,7 +37,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.WeakHashMap; import java.util.concurrent.Executor; import java.util.logging.Logger; @@ -62,7 +61,6 @@ import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.api.source.Source; - import java.util.logging.Level; /** @@ -115,7 +113,6 @@ private final Map<String, Object> globals; private final Instrumenter instrumenter; private final Debugger debugger; - private final Map<Source, CallTarget> cache = new WeakHashMap<>(); private boolean disposed; /** @@ -425,16 +422,7 @@ try (Closeable d = SPI.executionStart(this, -1, debugger, s)) { TruffleLanguage<?> langImpl = l.getImpl(true); fillLang[0] = langImpl; - CallTarget cachedTarget = cache.get(s); - if (cachedTarget == null) { - cachedTarget = SPI.parseForEval(langImpl, s); - cache.put(s, cachedTarget); - } - try { - return cachedTarget.call(); - } catch (Throwable ex) { - throw new IOException(ex); - } + return SPI.eval(langImpl, s); } } @@ -897,8 +885,8 @@ } @Override - public CallTarget parseForEval(TruffleLanguage<?> l, Source s) throws IOException { - return super.parseForEval(l, s); + public Object eval(TruffleLanguage<?> l, Source s) throws IOException { + return super.eval(l, s); } @Override
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Tue Nov 17 16:50:11 2015 +0100 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Wed Nov 18 09:02:41 2015 +0100 @@ -31,7 +31,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.util.Objects; +import java.util.Collections; +import java.util.Map; +import java.util.WeakHashMap; import com.oracle.truffle.api.debug.Debugger; import com.oracle.truffle.api.debug.SuspendedEvent; @@ -47,6 +49,7 @@ import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.api.source.Source; +import java.util.Objects; /** * An entry point for everyone who wants to implement a Truffle based language. By providing an @@ -69,6 +72,7 @@ */ @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. @@ -436,12 +440,20 @@ } @Override - protected CallTarget parseForEval(TruffleLanguage<?> language, Source source) throws IOException { - CallTarget target = language.parse(source, null); + protected Object eval(TruffleLanguage<?> language, Source source) throws IOException { + CallTarget target = language.compiled.get(source); if (target == null) { - throw new IOException("Parsing has not produced a CallTarget for " + source); + target = language.parse(source, null); + if (target == null) { + throw new IOException("Parsing has not produced a CallTarget for " + source); + } + language.compiled.put(source, target); } - return target; + try { + return target.call(); + } catch (Throwable ex) { + throw new IOException(ex); + } } @Override
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Tue Nov 17 16:50:11 2015 +0100 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java Wed Nov 18 09:02:41 2015 +0100 @@ -153,8 +153,8 @@ return API.attachEnv(vm, language, stdOut, stdErr, stdIn, instrumenter); } - protected CallTarget parseForEval(TruffleLanguage<?> l, Source s) throws IOException { - return API.parseForEval(l, s); + protected Object eval(TruffleLanguage<?> l, Source s) throws IOException { + return API.eval(l, s); } protected Object evalInContext(Object vm, SuspendedEvent ev, String code, FrameInstance frame) throws IOException {