diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteLocalFrameVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteLocalFrameVariableNode.java index 56acae1d73b302d92d856f5ddc54366fcce291d5..527369c269b2ec70f155db167f6ff1df97fcb10b 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteLocalFrameVariableNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/WriteLocalFrameVariableNode.java @@ -97,12 +97,12 @@ public abstract class WriteLocalFrameVariableNode extends BaseWriteVariableNode CompilerDirectives.transferToInterpreterAndInvalidate(); containsNoActiveBinding = FrameSlotChangeMonitor.getContainsNoActiveBindingAssumption(frame.getFrameDescriptor()); } + Object newValue = shareObjectValue(frame, frameSlot, storedObjectProfile.profile(value), mode, false); if (containsNoActiveBinding.isValid()) { - Object newValue = shareObjectValue(frame, frameSlot, storedObjectProfile.profile(value), mode, false); FrameSlotChangeMonitor.setObjectAndInvalidate(frame, frameSlot, newValue, false, invalidateProfile); } else { // it's a local variable lookup; so use 'frame' for both, executing and looking up - return handleActiveBinding(frame, frame, value, frameSlot, invalidateProfile, isActiveBindingProfile); + return handleActiveBinding(frame, frame, newValue, frameSlot, invalidateProfile, isActiveBindingProfile); } return value; } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java index a298e3af601c7bf86a6088d86fa9236510b0457b..d2da41043eeffeee9a0cb48b3914c734195706a9 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java @@ -90,7 +90,7 @@ public class TestMiscBuiltins extends TestBase { assertEval("{ x<-7; as.list(environment()) }"); assertEval("{ x<-7; .y<-42; as.list(environment()) }"); // not sorted so can't compare list print - assertEval("{ x<-7; .y<-42; length(as.list(environment(), all.names=TRUE)) }"); + assertEval("{ env <- new.env(); env$x<-7; env$.y<-42; length(as.list(env, all.names=TRUE)) }"); assertEval("{ x<-7; f<-function() x<<-42; f_copy<-as.list(environment())[[\"f\"]]; f_copy(); x }"); // as.matrix 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 a419f8ff22805537f4df67539b1f2b4e7cfd2fb4..fb0161aacfad939b1c3475d327fdcde757e78a67 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 @@ -488,7 +488,7 @@ public class FastRDebugTest { assertEquals(line, currentLine); final String currentCode = suspendedEvent.getSourceSection().getCode().trim(); assertEquals(code, currentCode); - compareScope(line, code, false, true, expectedFrame); + compareScope(line, code, false, false, expectedFrame); } catch (RuntimeException | Error e) { final DebugStackFrame frame = suspendedEvent.getTopStackFrame();