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