diff options
Diffstat (limited to 'deps/v8/test/debugger/debug/debug-evaluate-shadowed-context.js')
-rw-r--r-- | deps/v8/test/debugger/debug/debug-evaluate-shadowed-context.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/deps/v8/test/debugger/debug/debug-evaluate-shadowed-context.js b/deps/v8/test/debugger/debug/debug-evaluate-shadowed-context.js new file mode 100644 index 0000000000..564bdc6fc3 --- /dev/null +++ b/deps/v8/test/debugger/debug/debug-evaluate-shadowed-context.js @@ -0,0 +1,83 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --no-analyze-environment-liveness + +// Test that debug-evaluate only resolves variables that are used by +// the function inside which we debug-evaluate. This is to avoid +// incorrect variable resolution when a context-allocated variable is +// shadowed by a stack-allocated variable. + +Debug = debug.Debug + +var exception = null; +function listener(event, exec_state, event_data, data) { + if (event != Debug.DebugEvent.Break) return; + try { + for (var i = 0; i < exec_state.frameCount() - 1; i++) { + var frame = exec_state.frame(i); + var value; + try { + value = frame.evaluate("x").value(); + } catch (e) { + value = e.name; + } + print(frame.sourceLineText()); + var expected = frame.sourceLineText().match(/\/\/ (.*$)/)[1]; + assertEquals(String(expected), String(value)); + } + assertEquals("[object global]", + String(exec_state.frame(0).evaluate("this").value())); + assertEquals("y", exec_state.frame(0).evaluate("y").value()); + assertEquals("a", exec_state.frame(0).evaluate("a").value()); + exec_state.frame(0).evaluate("a = 'A'"); + assertThrows(() => exec_state.frame(0).evaluate("z"), ReferenceError); + } catch (e) { + exception = e; + print(e + e.stack); + } +} + +Debug.setListener(listener); + +var a = "a"; +(function() { + var x = 1; // context allocate x + (() => x); + var y = "y"; + var z = "z"; + (function() { + var x = 2; // stack allocate shadowing x + (function() { + y; // access y + debugger; // ReferenceError + })(); // 2 + })(); // 1 + return y; +})(); + +assertEquals("A", a); +a = "a"; + +(function() { + var x = 1; // context allocate x + (() => x); + var y = "y"; + var z = "z"; + (function() { + var x = 2; // stack allocate shadowing x + (() => { + y; + a; + this; // context allocate receiver + debugger; // ReferenceError + })(); // 2 + })(); // 1 + return y; +})(); + +assertEquals("A", a); + +Debug.setListener(null); +assertNull(exception); |