From 647280dce87a1f16b84a78d713a3d00d872402ee Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Thu, 18 May 2017 16:00:01 +0200 Subject: [PATCH] Fix: Returned wrong foreign access. --- .../oracle/truffle/r/runtime/env/RScope.java | 41 ++++++++++++------- .../truffle/r/test/tck/FastRDebugTest.java | 3 ++ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java index 977affc8f0..d44fd73c87 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java @@ -65,7 +65,20 @@ public final class RScope extends AbstractScope { @Override protected String getName() { - return isPromiseScope() ? "promise" : "function"; + // just to be sure + if (env == REnvironment.emptyEnv()) { + return "empty environment"; + } + + assert env.getFrame() != null; + RFunction function = RArguments.getFunction(env.getFrame()); + if (function != null) { + String name = function.getName(); + return "function environment" + (name != null ? " for function " + name : ""); + } else { + String name = env.getName(); + return "explicit environment" + (name != null ? ": " + name : ""); + } } @Override @@ -103,24 +116,22 @@ public final class RScope extends AbstractScope { } private static String[] collectArgs(REnvironment env) { - assert RArguments.isRFrame(env.getFrame()); - RFunction f = RArguments.getFunction(env.getFrame()); - if (f != null) { - return RContext.getRRuntimeASTAccess().getArgumentsSignature(f).getNames(); - } else { - ArgumentsSignature suppliedSignature = RArguments.getSuppliedSignature(env.getFrame()); - if (suppliedSignature != null) { - return suppliedSignature.getNames(); + + if (env != REnvironment.emptyEnv()) { + assert RArguments.isRFrame(env.getFrame()); + RFunction f = RArguments.getFunction(env.getFrame()); + if (f != null) { + return RContext.getRRuntimeASTAccess().getArgumentsSignature(f).getNames(); + } else { + ArgumentsSignature suppliedSignature = RArguments.getSuppliedSignature(env.getFrame()); + if (suppliedSignature != null) { + return suppliedSignature.getNames(); + } } } return new String[0]; } - private boolean isPromiseScope() { - Frame frame = env.getFrame(); - return RArguments.getFunction(frame) == null && RArguments.getSuppliedSignature(frame) != null; - } - public static RScope createScope(Node node, Frame frame) { return new RScope(node.getRootNode(), getEnv(frame)); } @@ -288,7 +299,7 @@ public final class RScope extends AbstractScope { @Override public ForeignAccess getForeignAccess() { - return VariableNamesMessageResolutionForeign.ACCESS; + return ArgumentNamesMessageResolutionForeign.ACCESS; } public static boolean isInstance(TruffleObject obj) { diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRDebugTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRDebugTest.java index 9adb1d9053..134b0b01d3 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRDebugTest.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRDebugTest.java @@ -341,6 +341,9 @@ public class FastRDebugTest { debuggerSession.suspendNextExecution(); }); + assertArguments(1, "main(1, 2, 3, 4)"); + + stepInto(1); assertArguments(2, "x <- 10L", "a", "b", "c", "d"); continueExecution(); performWork(); -- GitLab