diff options
Diffstat (limited to 'deps/v8/test/debugger/debug/es6/debug-scope-default-param-with-eval.js')
-rw-r--r-- | deps/v8/test/debugger/debug/es6/debug-scope-default-param-with-eval.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/deps/v8/test/debugger/debug/es6/debug-scope-default-param-with-eval.js b/deps/v8/test/debugger/debug/es6/debug-scope-default-param-with-eval.js new file mode 100644 index 0000000000..b60ecebe6e --- /dev/null +++ b/deps/v8/test/debugger/debug/es6/debug-scope-default-param-with-eval.js @@ -0,0 +1,60 @@ +// Copyright 2016 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. + + +// Test that the parameter initialization block scope set up for +// sloppy eval is visible to the debugger. + +var Debug = debug.Debug; +var exception = null; +var break_count = 0; + +function call_for_break() { + return 5; +} + +function test(x = eval("var y = 7; debugger; y") + call_for_break()) { + return x; +} + +function listener(event, exec_state, event_data, data) { + if (event != Debug.DebugEvent.Break) return; + try { + var frame = exec_state.frame(0); + var block_scope; + if (break_count++ == 0) { + // Inside eval. + assertEquals([ debug.ScopeType.Eval, + debug.ScopeType.Block, + debug.ScopeType.Closure, + debug.ScopeType.Script, + debug.ScopeType.Global ], + frame.allScopes().map(s => s.scopeType())); + exec_state.prepareStep(Debug.StepAction.StepOut); + block_scope = frame.scope(1); + } else { + // Outside of eval. + assertEquals([ debug.ScopeType.Block, + debug.ScopeType.Local, + debug.ScopeType.Script, + debug.ScopeType.Global ], + frame.allScopes().map(s => s.scopeType())); + block_scope = frame.scope(0); + } + assertTrue(block_scope.scopeObject().propertyNames().includes('y')); + assertEquals(7, block_scope.scopeObject().property('y').value().value()); + } catch (e) { + print(e); + exception = e; + } +} + +Debug.setListener(listener); + +assertEquals(12, test()); + +Debug.setListener(null); + +assertNull(exception); +assertEquals(2, break_count); |