Mercurial > hg > truffle
diff truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 22446:5b6e15432aae
Truffle/debugging: minor changes to get "eval" working correctly in some cases
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Tue, 10 Nov 2015 18:25:30 -0800 |
parents | 2e5ac2d13d84 |
children | 163fdf64587d |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Tue Nov 10 15:33:18 2015 -0800 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Tue Nov 10 18:25:30 2015 -0800 @@ -482,14 +482,19 @@ @Override protected Object evalInContext(Object vm, SuspendedEvent ev, String code, FrameInstance frame) throws IOException { - Node n = frame == null ? ev.getNode() : frame.getCallNode(); + Node n = ev.getNode(); + if (n == null && frame != null) { + n = frame.getCallNode(); + } + if (n == null) { + throw new IOException("Can't determine language for text \"" + code + "\""); + } RootNode rootNode = n.getRootNode(); Class<? extends TruffleLanguage> languageType = findLanguage(rootNode); - Env env = findLanguage(vm, languageType); - TruffleLanguage<?> lang = findLanguage(env); - Source source = Source.fromText(code, "eval in context"); - CallTarget target = lang.parse(source, n); - return target.call(); + final Env env = findLanguage(vm, languageType); + final TruffleLanguage<?> lang = findLanguage(env); + final Source source = Source.fromText(code, "eval in context"); + return lang.evalInContext(source, n, frame.getFrame(null, true).materialize()); } @Override