diff options
author | Michaƫl Zasso <targos@protonmail.com> | 2017-09-12 11:34:59 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-09-13 16:15:18 +0200 |
commit | d82e1075dbc2cec2d6598ade10c1f43805f690fd (patch) | |
tree | ccd242b9b491dfc341d1099fe11b0ef528839877 /deps/v8/test/debugger | |
parent | b4b7ac6ae811b2b5a3082468115dfb5a5246fe3f (diff) | |
download | android-node-v8-d82e1075dbc2cec2d6598ade10c1f43805f690fd.tar.gz android-node-v8-d82e1075dbc2cec2d6598ade10c1f43805f690fd.tar.bz2 android-node-v8-d82e1075dbc2cec2d6598ade10c1f43805f690fd.zip |
deps: update V8 to 6.1.534.36
PR-URL: https://github.com/nodejs/node/pull/14730
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'deps/v8/test/debugger')
53 files changed, 709 insertions, 301 deletions
diff --git a/deps/v8/test/debugger/debug/debug-allscopes-on-debugger.js b/deps/v8/test/debugger/debug/debug-allscopes-on-debugger.js index 4f09b0a61e..22dbb6ead4 100644 --- a/deps/v8/test/debugger/debug/debug-allscopes-on-debugger.js +++ b/deps/v8/test/debugger/debug/debug-allscopes-on-debugger.js @@ -44,8 +44,9 @@ var sum = 0; i++; // Break 2. i++; // Break 3. debugger; // Break 4. - return i; // Break 5. -}()); // Break 6. + return i // Break 5. + ; // Break 6. +}()); assertNull(exception); // Break 7. assertEquals(expected_breaks, break_count); diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-async.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-async.js index a3ac82c619..39893df276 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-async.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-async.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen // Test that asynchronous features do not work with // side-effect free debug-evaluate. diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins-2.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins-2.js index 19a4963c92..90f7cf2866 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins-2.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins-2.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen Debug = debug.Debug diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins.js index 26ddfdbee4..f1f4e58199 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-builtins.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen Debug = debug.Debug diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-control.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-control.js index 4c8492862d..17826a5138 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-control.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-control.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen Debug = debug.Debug diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-iife.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-iife.js index 6ceb082f66..3bc97f1973 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-iife.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-iife.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen // Test that declaring local variables in IIFEs works with // side-effect free debug-evaluate. diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-ops.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-ops.js index 27a77262cf..c900df2f93 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-ops.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect-ops.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen Debug = debug.Debug diff --git a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect.js b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect.js index cc971e8832..58d95628b8 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-no-side-effect.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen Debug = debug.Debug diff --git a/deps/v8/test/debugger/debug/debug-liveedit-stepin.js b/deps/v8/test/debugger/debug/debug-liveedit-stepin.js index a453525bc9..f96a079638 100644 --- a/deps/v8/test/debugger/debug/debug-liveedit-stepin.js +++ b/deps/v8/test/debugger/debug/debug-liveedit-stepin.js @@ -60,15 +60,18 @@ print(JSON.stringify(log, 1)); assertEquals([ "debugger;", "results.push(BestEditor());", - " return 'Emacs';","}", + " return 'Emacs';", + " return 'Emacs';", "results.push(BestEditor());", "results.push(BestEditor());", " return 'Emacs';", - " return 'Eclipse';","}", + " return 'Eclipse';", + " return 'Eclipse';", "results.push(BestEditor());", "results.push(BestEditor());", " return 'Eclipse';", " return 'Vim';", - "}","results.push(BestEditor());", + " return 'Vim';", + "results.push(BestEditor());", "Debug.setListener(null);" ], log); diff --git a/deps/v8/test/debugger/debug/debug-modules-set-variable-value.js b/deps/v8/test/debugger/debug/debug-modules-set-variable-value.js new file mode 100644 index 0000000000..61c032f026 --- /dev/null +++ b/deps/v8/test/debugger/debug/debug-modules-set-variable-value.js @@ -0,0 +1,378 @@ +// 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. + +// MODULE +// Flags: --no-always-opt + +// The first part of this file is copied over from debug-set-variable-value.js +// (a few tests were removed because they make no sense for modules). The second +// part is new. + +var Debug = debug.Debug; + +// Accepts a function/closure 'fun' that must have a debugger statement inside. +// A variable 'variable_name' must be initialized before debugger statement +// and returned after the statement. The test will alter variable value when +// on debugger statement and check that returned value reflects the change. +function RunPauseTest(scope_number, expected_old_result, variable_name, + new_value, expected_new_result, fun) { + var actual_old_result = fun(); + assertEquals(expected_old_result, actual_old_result); + + var listener_delegate; + var listener_called = false; + var exception = null; + + function listener_delegate(exec_state) { + var scope = exec_state.frame(0).scope(scope_number); + scope.setVariableValue(variable_name, new_value); + } + + function listener(event, exec_state, event_data, data) { + try { + if (event == Debug.DebugEvent.Break) { + listener_called = true; + listener_delegate(exec_state); + } + } catch (e) { + exception = e; + } + } + + // Add the debug event listener. + Debug.setListener(listener); + + var actual_new_result; + try { + actual_new_result = fun(); + } finally { + Debug.setListener(null); + } + + if (exception != null) { + assertUnreachable("Exception in listener\n" + exception.stack); + } + assertTrue(listener_called); + + assertEquals(expected_new_result, actual_new_result); +} + + +function ClosureTestCase(scope_index, old_result, variable_name, new_value, + new_result, success_expected, factory) { + this.scope_index_ = scope_index; + this.old_result_ = old_result; + this.variable_name_ = variable_name; + this.new_value_ = new_value; + this.new_result_ = new_result; + this.success_expected_ = success_expected; + this.factory_ = factory; +} + +ClosureTestCase.prototype.run_pause_test = function() { + var th = this; + var fun = this.factory_(true); + this.run_and_catch_(function() { + RunPauseTest(th.scope_index_ + 1, th.old_result_, th.variable_name_, + th.new_value_, th.new_result_, fun); + }); +} + +ClosureTestCase.prototype.run_and_catch_ = function(runnable) { + if (this.success_expected_) { + runnable(); + } else { + assertThrows(runnable); + } +} + + +// Test scopes visible from closures. + +var closure_test_cases = [ + new ClosureTestCase(0, 'cat', 'v1', 5, 5, true, + function Factory(debug_stop) { + var v1 = 'cat'; + return function() { + if (debug_stop) debugger; + return v1; + } + }), + + new ClosureTestCase(0, 4, 't', 7, 9, true, function Factory(debug_stop) { + var t = 2; + var r = eval("t"); + return function() { + if (debug_stop) debugger; + return r + t; + } + }), + + new ClosureTestCase(0, 6, 't', 10, 13, true, function Factory(debug_stop) { + var t = 2; + var r = eval("t = 3"); + return function() { + if (debug_stop) debugger; + return r + t; + } + }), + + new ClosureTestCase(2, 'capybara', 'foo', 77, 77, true, + function Factory(debug_stop) { + var foo = "capybara"; + return (function() { + var bar = "fish"; + try { + throw {name: "test exception"}; + } catch (e) { + return function() { + if (debug_stop) debugger; + bar = "beast"; + return foo; + } + } + })(); + }), + + new ClosureTestCase(0, 'AlphaBeta', 'eee', 5, '5Beta', true, + function Factory(debug_stop) { + var foo = "Beta"; + return (function() { + var bar = "fish"; + try { + throw "Alpha"; + } catch (eee) { + return function() { + if (debug_stop) debugger; + return eee + foo; + } + } + })(); + }) +]; + +for (var i = 0; i < closure_test_cases.length; i++) { + closure_test_cases[i].run_pause_test(); +} + + +// Test local scope. + +RunPauseTest(0, 'HelloYou', 'u', 'We', 'HelloWe', (function Factory() { + return function() { + var u = "You"; + var v = "Hello"; + debugger; + return v + u; + } +})()); + +RunPauseTest(0, 'Helloworld', 'p', 'GoodBye', 'HelloGoodBye', + (function Factory() { + function H(p) { + var v = "Hello"; + debugger; + return v + p; + } + return function() { + return H("world"); + } +})()); + +RunPauseTest(0, 'mouse', 'v1', 'dog', 'dog', (function Factory() { + return function() { + var v1 = 'cat'; + eval("v1 = 'mouse'"); + debugger; + return v1; + } +})()); + +// Check that we correctly update local variable that +// is referenced from an inner closure. +RunPauseTest(0, 'Blue', 'v', 'Green', 'Green', (function Factory() { + return function() { + function A() { + var v = "Blue"; + function Inner() { + return void v; + } + debugger; + return v; + } + return A(); + } +})()); + +// Check that we correctly update parameter, that is known to be stored +// both on stack and in heap. +RunPauseTest(0, 5, 'p', 2012, 2012, (function Factory() { + return function() { + function A(p) { + function Inner() { + return void p; + } + debugger; + return p; + } + return A(5); + } +})()); + + +//////////////////////////////////////////////////////////////////////////////// +// From here on we test the module scope. +//////////////////////////////////////////////////////////////////////////////// + + +// Non-existing variable. +{ + let exception; + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let module_scope = exec_state.frame().scope(1); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + try { + module_scope.setVariableValue('spargel', 42); + } catch(e) { exception = e; } + } + } + + Debug.setListener(listener); + assertThrows(() => spargel, ReferenceError); + debugger; + assertThrows(() => spargel, ReferenceError); + assertTrue(exception !== undefined); +} + + +// Local (non-exported) variable. +let salat = 12; +{ + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let module_scope = exec_state.frame().scope(1); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + module_scope.setVariableValue('salat', 42); + } + } + + Debug.setListener(listener); + assertEquals(12, salat); + debugger; + assertEquals(42, salat); +} + + +// Local (non-exported) variable, nested access. +let salad = 12; +{ + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let scope_count = exec_state.frame().scopeCount(); + let module_scope = exec_state.frame().scope(2); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + module_scope.setVariableValue('salad', 42); + } + } + + Debug.setListener(listener); + function foo() { + assertEquals(12, salad); + debugger; + assertEquals(42, salad); + }; + foo(); +} + + +// Exported variable. +export let salami = 1; +{ + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let module_scope = exec_state.frame().scope(1); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + module_scope.setVariableValue('salami', 2); + } + } + + Debug.setListener(listener); + assertEquals(1, salami); + debugger; + assertEquals(2, salami); +} + + +// Exported variable, nested access. +export let ham = 1; +{ + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let scope_count = exec_state.frame().scopeCount(); + let module_scope = exec_state.frame().scope(2); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + module_scope.setVariableValue('ham', 2); + } + } + + Debug.setListener(listener); + function foo() { + assertEquals(1, ham); + debugger; + assertEquals(2, ham); + }; + foo(); +} + + +// Imported variable. Setting is currently not supported. +import { salami as wurst } from "./debug-modules-set-variable-value.js"; +{ + let exception; + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let module_scope = exec_state.frame().scope(1); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + try { + module_scope.setVariableValue('wurst', 3); + } catch(e) { exception = e; } + } + } + + Debug.setListener(listener); + assertEquals(2, wurst); + debugger; + assertEquals(2, wurst); + assertTrue(exception !== undefined); +} + + +// Imported variable, nested access. Setting is currently not supported. +import { salami as wurstl } from "./debug-modules-set-variable-value.js"; +{ + let exception; + function listener(event, exec_state) { + if (event == Debug.DebugEvent.Break) { + let scope_count = exec_state.frame().scopeCount(); + let module_scope = exec_state.frame().scope(2); + assertEquals(debug.ScopeType.Module, module_scope.scopeType()); + try { + module_scope.setVariableValue('wurstl', 3); + } catch(e) { exception = e; } + } + } + + Debug.setListener(listener); + function foo() { + assertEquals(2, wurstl); + debugger; + assertEquals(2, wurstl); + assertTrue(exception !== undefined); + }; + foo(); +} + + +Debug.setListener(null); diff --git a/deps/v8/test/debugger/debug/debug-multiple-var-decl.js b/deps/v8/test/debugger/debug/debug-multiple-var-decl.js index 2e6deb781c..240654657c 100644 --- a/deps/v8/test/debugger/debug/debug-multiple-var-decl.js +++ b/deps/v8/test/debugger/debug/debug-multiple-var-decl.js @@ -19,8 +19,9 @@ function f() { const l7 = 7, // r l8 = 8, // s l9 = 9; // t - return 0; // u -} // v + return 0 // u + ; // v +} function listener(event, exec_state, event_data, data) { if (event != Debug.DebugEvent.Break) return; @@ -68,6 +69,6 @@ var expected = [ "l11","n11", // local var "o6","p11","q11", // local let "r13","s13","t13", // local const - "u2","v0", // return + "u2","v3", // return ]; assertEquals(expected, log); diff --git a/deps/v8/test/debugger/debug/debug-optimize.js b/deps/v8/test/debugger/debug/debug-optimize.js index f296816aa2..75f048fc04 100644 --- a/deps/v8/test/debugger/debug/debug-optimize.js +++ b/deps/v8/test/debugger/debug/debug-optimize.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --opt --no-always-opt +// Flags: --opt --no-always-opt --no-stress-fullcodegen var Debug = debug.Debug; diff --git a/deps/v8/test/debugger/debug/debug-print.js b/deps/v8/test/debugger/debug/debug-print.js index ea7e66be93..9b054d9d27 100644 --- a/deps/v8/test/debugger/debug/debug-print.js +++ b/deps/v8/test/debugger/debug/debug-print.js @@ -11,32 +11,32 @@ var obj = {}; array = []; %DebugPrint(array); -// FAST_SMI_ELEMENTS +// PACKED_SMI_ELEMENTS array = [1, 2, 3]; %DebugPrint(array); -// FAST_HOLEY_SMI_ELEMENTS +// HOLEY_SMI_ELEMENTS array[10] = 100; array[11] = 100; %DebugPrint(array); -// FAST_ELEMENTS +// PACKED_ELEMENTS array = [1, obj, obj]; %DebugPrint(array); -// FAST_HOLEY_ELEMENTS +// HOLEY_ELEMENTS array[100] = obj; array[101] = obj; %DebugPrint(array); -// FAST_DOUBLE_ELEMENTS +// PACKED_DOUBLE_ELEMENTS array = [1.1, 2.2, 3.3, 3.3, 3.3, NaN]; %DebugPrint(array); array.push(NaN); array.push(NaN); %DebugPrint(array); -// FAST_HOLEY_DOUBLE_ELEMENTS +// HOLEY_DOUBLE_ELEMENTS array[100] = 1.2; array[101] = 1.2; %DebugPrint(array); diff --git a/deps/v8/test/debugger/debug/debug-return-value.js b/deps/v8/test/debugger/debug/debug-return-value.js index cb4000ea31..77717ceb7c 100644 --- a/deps/v8/test/debugger/debug/debug-return-value.js +++ b/deps/v8/test/debugger/debug/debug-return-value.js @@ -31,6 +31,7 @@ listener_complete = false; exception = false; break_count = 0; expected_return_value = 0; +expected_source_position = []; debugger_source_position = 0; // Listener which expects to do four steps to reach returning from the function. @@ -47,18 +48,13 @@ function listener(event, exec_state, event_data, data) { break; case 2: // Position now at the if statement. - assertEquals(debugger_source_position + 10, + assertEquals(expected_source_position.shift() + debugger_source_position, exec_state.frame(0).sourcePosition()); break; case 3: // Position now at either of the returns. - if (expected_return_value == 1) { - assertEquals(debugger_source_position + 19, - exec_state.frame(0).sourcePosition()); - } else { - assertEquals(debugger_source_position + 38, - exec_state.frame(0).sourcePosition()); - } + assertEquals(expected_source_position.shift() + debugger_source_position, + exec_state.frame(0).sourcePosition()); break; default: fail("Unexpected"); @@ -66,9 +62,8 @@ function listener(event, exec_state, event_data, data) { exec_state.prepareStep(Debug.StepAction.StepIn); } else { // Position at the end of the function. - assertEquals(debugger_source_position + 50, - exec_state.frame(0).sourcePosition()); - + assertEquals(expected_source_position.shift() + debugger_source_position, + exec_state.frame(0).sourcePosition()); // Just about to return from the function. assertEquals(expected_return_value, exec_state.frame(0).returnValue().value()); @@ -95,6 +90,7 @@ function f(x) {debugger; if (x) { return 1; } else { return 2; } }; // Call f expecting different return values. break_count = 0; expected_return_value = 2; +expected_source_position = [10, 38, 47]; listener_complete = false; f(); assertFalse(exception, "exception in listener") @@ -103,6 +99,7 @@ assertEquals(4, break_count); break_count = 0; expected_return_value = 1; +expected_source_position = [10, 19, 28]; listener_complete = false; f(true); assertFalse(exception, "exception in listener") @@ -111,6 +108,7 @@ assertEquals(4, break_count); break_count = 0; expected_return_value = 2; +expected_source_position = [10, 38, 47]; listener_complete = false; f(false); assertFalse(exception, "exception in listener") diff --git a/deps/v8/test/debugger/debug/debug-scopes-suspended-generators.js b/deps/v8/test/debugger/debug/debug-scopes-suspended-generators.js index cf1b6468aa..ab35a5fa4a 100644 --- a/deps/v8/test/debugger/debug/debug-scopes-suspended-generators.js +++ b/deps/v8/test/debugger/debug/debug-scopes-suspended-generators.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen // The functions used for testing backtraces. They are at the top to make the // testing of source line/column easier. @@ -107,7 +107,7 @@ function *gen1() { } var g = gen1(); -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({}, 0, g); @@ -120,7 +120,7 @@ function *gen2(a) { } g = gen2(42); -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 42}, 0, g); @@ -134,7 +134,7 @@ function *gen3(a) { } g = gen3(0); -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 0, b: undefined}, 0, g); @@ -148,11 +148,12 @@ function *gen4(a, b) { var x = 2; yield a; var y = 3; + yield a; return b; } g = gen4(0, 1); -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 0, b: 1, x: undefined, y: undefined}, 0, g); @@ -167,12 +168,13 @@ CheckScopeContent({a: 0, b: 1, x: 2, y: 3}, 0, g); function *gen5(a) { eval('var b = 2'); + yield a; return b; } g = gen5(1); g.next(); -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 1, b: 2}, 0, g); @@ -190,13 +192,13 @@ function *gen6() { g = gen6(); g.next(); CheckScopeChain([debug.ScopeType.With, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({}, 0, g); g.next(); -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); @@ -216,7 +218,7 @@ g = gen7(); g.next(); CheckScopeChain([debug.ScopeType.With, debug.ScopeType.With, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({}, 0, g); @@ -237,7 +239,7 @@ g = gen8(); g.next(); CheckScopeChain([debug.ScopeType.With, debug.ScopeType.With, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 2, b: 1}, 0, g); @@ -259,7 +261,7 @@ function *gen9() { g = gen9(); g.next(); CheckScopeChain([debug.ScopeType.Catch, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({e: 42}, 0, g); @@ -275,23 +277,23 @@ g = gen10(); g.next(); CheckScopeChain([debug.ScopeType.Block, debug.ScopeType.Block, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); -CheckScopeContent({i: 0}, 0, g); +CheckScopeContent({i: 0}, 1, g); g.next(); -CheckScopeContent({i: 1}, 0, g); -CheckScopeContent({i: 0}, 1, g); // Additional block scope with i = 0; +CheckScopeContent({i: 1}, 1, g); // Nested generators. var gen12; function *gen11() { + var b = 2; gen12 = function*() { var a = 1; yield 1; - return 2; + return b; }(); var a = 0; @@ -301,12 +303,12 @@ function *gen11() { gen11().next(); g = gen12; -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Closure, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 1}, 0, g); -CheckScopeContent({a: 0}, 1, g); +CheckScopeContent({b: 2}, 1, g); // Set a variable in an empty scope. @@ -355,7 +357,7 @@ var g = gen15(); assertEquals(1, g.next().value); CheckScopeChain([debug.ScopeType.With, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({a: 1, b: 2}, 0, g); @@ -376,7 +378,7 @@ CheckScopeContent({a: 1, b: 2}, 0, g); CheckScopeContent({c: 1, d: 4, e: 42}, 1, g); assertEquals(5, g.next().value); // Initialized after set. -CheckScopeChain([debug.ScopeType.Closure, +CheckScopeChain([debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); @@ -404,15 +406,15 @@ g.next(); CheckScopeChain([debug.ScopeType.Block, debug.ScopeType.With, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); -CheckScopeContent({d: 4}, 0, g); +CheckScopeContent({d: 4, e: undefined}, 0, g); CheckScopeContent({a: 1, b: 2}, 1, g); CheckScopeContent({c: 3}, 2, g); Debug.generatorScope(g, 0).setVariableValue("d", 1); -CheckScopeContent({d: 1}, 0, g); +CheckScopeContent({d: 1, e: undefined}, 0, g); assertEquals(1, g.next().value); @@ -434,7 +436,7 @@ g = gen17(); g.next(); CheckScopeChain([debug.ScopeType.Catch, - debug.ScopeType.Closure, + debug.ScopeType.Local, debug.ScopeType.Script, debug.ScopeType.Global], g); CheckScopeContent({e: 42}, 0, g); diff --git a/deps/v8/test/debugger/debug/debug-scopes.js b/deps/v8/test/debugger/debug/debug-scopes.js index 7ee7a8d6e6..6f01cec210 100644 --- a/deps/v8/test/debugger/debug/debug-scopes.js +++ b/deps/v8/test/debugger/debug/debug-scopes.js @@ -722,6 +722,33 @@ closure_9(); EndTest(); +BeginTest("Closure passed to optimized Array.prototype.forEach"); +function closure_10(a) { + var x = a + 2; + function closure_11(b) { + debugger; + return a + b + x; + } + [42].forEach(closure_11); +} + +listener_delegate = function(exec_state) { + CheckScopeChain([debug.ScopeType.Local, + debug.ScopeType.Closure, + debug.ScopeType.Script, + debug.ScopeType.Global], exec_state); + CheckScopeContent({b:42}, 0, exec_state); + CheckScopeContent({a:5, x:7}, 1, exec_state); + CheckScopeChainNames( + ["closure_11", "closure_10", undefined, undefined], exec_state); +}; +begin_test_count++; closure_10(5); end_test_count++; +begin_test_count++; closure_10(5); end_test_count++; +%OptimizeFunctionOnNextCall(closure_10); +closure_10(5); +EndTest(); + + // Test a mixture of scopes. BeginTest("The full monty"); function the_full_monty(a, b) { diff --git a/deps/v8/test/debugger/debug/debug-step-into-json.js b/deps/v8/test/debugger/debug/debug-step-into-json.js index 1859141063..75bfde3c1d 100644 --- a/deps/v8/test/debugger/debug/debug-step-into-json.js +++ b/deps/v8/test/debugger/debug/debug-step-into-json.js @@ -21,8 +21,9 @@ function listener(event, exec_state, event_data, data) { }; function toJsonCallback() { - return "x"; // Break 2. -} // Break 3. + return "x" // Break 2. + ; // Break 3. +} var o = {}; o.toJSON = toJsonCallback; diff --git a/deps/v8/test/debugger/debug/debug-step-into-valueof.js b/deps/v8/test/debugger/debug/debug-step-into-valueof.js index ba5390cd71..b70bb2ff2a 100644 --- a/deps/v8/test/debugger/debug/debug-step-into-valueof.js +++ b/deps/v8/test/debugger/debug/debug-step-into-valueof.js @@ -20,8 +20,9 @@ function listener(event, exec_state, event_data, data) { }; function valueOfCallback() { - return 2; // Break 2. -} // Break 3. + return 2 // Break 2. + ; // Break 3. +} var o = {}; o.valueOf = valueOfCallback; diff --git a/deps/v8/test/debugger/debug/debug-stepin-builtin-callback-opt.js b/deps/v8/test/debugger/debug/debug-stepin-builtin-callback-opt.js index fbf5ab4c0e..1fb9ce78dc 100644 --- a/deps/v8/test/debugger/debug/debug-stepin-builtin-callback-opt.js +++ b/deps/v8/test/debugger/debug/debug-stepin-builtin-callback-opt.js @@ -21,8 +21,9 @@ function listener(event, exec_state, event_data, data) { }; function replaceCallback(a) { - return "x"; // Break 2. -} // Break 3. + return "x" // Break 2. + ; // Break 3. +} var re = /x/g; // Optimize the inner helper function for string replace. diff --git a/deps/v8/test/debugger/debug/debug-stepin-foreach.js b/deps/v8/test/debugger/debug/debug-stepin-foreach.js index 94a6341368..36fcf1605e 100644 --- a/deps/v8/test/debugger/debug/debug-stepin-foreach.js +++ b/deps/v8/test/debugger/debug/debug-stepin-foreach.js @@ -37,8 +37,9 @@ debugger; // Break 0. [3,4].forEach(bound_callback); // Break 6. function callback(x) { - return x; // Break 2. // Break 4. // Break 7. // Break 9. -} // Break 3. // Break 5. // Break 8. // Break 10. + return x // Break 2. // Break 4. // Break 7. // Break 9. + ; // Break 3. // Break 5. // Break 8. // Break 10. +} assertNull(exception); // Break 11. assertEquals(expected_breaks, break_count); diff --git a/deps/v8/test/debugger/debug/es6/debug-promises/stepin-handler.js b/deps/v8/test/debugger/debug/es6/debug-promises/stepin-handler.js index 721423a968..a897693509 100644 --- a/deps/v8/test/debugger/debug/es6/debug-promises/stepin-handler.js +++ b/deps/v8/test/debugger/debug/es6/debug-promises/stepin-handler.js @@ -48,8 +48,9 @@ Promise.resolve(42) }); function callback(x) { - return x; // Break 2. // Break 4. // Break 6. -} // Break 3. // Break 5. // Break 7. + return x // Break 2. // Break 4. // Break 6. + ; // Break 3. // Break 5. // Break 7. +} function finalize() { assertNull(exception); // Break 8. diff --git a/deps/v8/test/debugger/debug/es6/debug-step-destructuring-assignment.js b/deps/v8/test/debugger/debug/es6/debug-step-destructuring-assignment.js index d46f670ee1..cbbd4c522a 100644 --- a/deps/v8/test/debugger/debug/es6/debug-step-destructuring-assignment.js +++ b/deps/v8/test/debugger/debug/es6/debug-step-destructuring-assignment.js @@ -76,8 +76,9 @@ function f() { } // B34 function return1() { - return 1; // B26 -} // B27 + return 1 // B26 + ; // B27 +} f(); Debug.setListener(null); // B35 diff --git a/deps/v8/test/debugger/debug/es6/debug-step-destructuring-bind.js b/deps/v8/test/debugger/debug/es6/debug-step-destructuring-bind.js index b6446cfd6d..2e707b994c 100644 --- a/deps/v8/test/debugger/debug/es6/debug-step-destructuring-bind.js +++ b/deps/v8/test/debugger/debug/es6/debug-step-destructuring-bind.js @@ -98,12 +98,12 @@ function test() { } var { - x: a, // B46 - y: b = 9 // B47 - } = { x: 4 }; - assertEquals([4, 9], [a, b]); // B48 -} // B49 + x: a, + y: b = 9 + } = { x: 4 }; // B46 + assertEquals([4, 9], [a, b]); // B47 +} // B48 test(); -Debug.setListener(null); // B50 +Debug.setListener(null); // B49 assertNull(exception); diff --git a/deps/v8/test/debugger/debug/es6/debug-step-into-regexp-subclass.js b/deps/v8/test/debugger/debug/es6/debug-step-into-regexp-subclass.js index 5e70fad274..4b0648f406 100644 --- a/deps/v8/test/debugger/debug/es6/debug-step-into-regexp-subclass.js +++ b/deps/v8/test/debugger/debug/es6/debug-step-into-regexp-subclass.js @@ -21,8 +21,9 @@ function listener(event, exec_state, event_data, data) { }; function customSplit() { - return "x"; // Break 2. -} // Break 3. + return "x" // Break 2. + ; // Break 3. +} var o = {}; o[Symbol.split] = customSplit; diff --git a/deps/v8/test/debugger/debug/es6/debug-stepin-default-parameters.js b/deps/v8/test/debugger/debug/es6/debug-stepin-default-parameters.js index b0683a3e31..9f8eda5a68 100644 --- a/deps/v8/test/debugger/debug/es6/debug-stepin-default-parameters.js +++ b/deps/v8/test/debugger/debug/es6/debug-stepin-default-parameters.js @@ -41,5 +41,5 @@ Debug.setListener(null); // c assertNull(exception); assertEquals("default", result); -assertEquals(["a0","b13","f18b13","d2f18b13","e0f18b13","g2b13","h0b13","c0"], +assertEquals(["a0","b13","f18b13","d2f18b13","d19f18b13","g14b13","c0"], log); diff --git a/deps/v8/test/debugger/debug/es6/debug-stepin-microtasks.js b/deps/v8/test/debugger/debug/es6/debug-stepin-microtasks.js index f4a8c1a459..d3e4e6e458 100644 --- a/deps/v8/test/debugger/debug/es6/debug-stepin-microtasks.js +++ b/deps/v8/test/debugger/debug/es6/debug-stepin-microtasks.js @@ -47,21 +47,24 @@ Promise.resolve(42) function promise1() { debugger; // Break 0. - return exception || 1; // Break 1. -} // Break 2. StepOver. + return exception || 1 // Break 1. + ; // Break 2. StepOver. +} function promise2() { throw new Error; // Break 3. } function promise3() { - return break_count; // Break 4. -} // Break 5. + return break_count // Break 4. + ; // Break 5. +} function promise4() { finalize(); // Break 6. StepOver. - return 0; // Break 7. -} // Break 8. StepOut. + return 0 // Break 7. + ; // Break 8. StepOut. +} function finalize() { Promise.resolve().then(function() { diff --git a/deps/v8/test/debugger/debug/es6/debug-stepin-proxies.js b/deps/v8/test/debugger/debug/es6/debug-stepin-proxies.js index c830e775b2..546ee64b0c 100644 --- a/deps/v8/test/debugger/debug/es6/debug-stepin-proxies.js +++ b/deps/v8/test/debugger/debug/es6/debug-stepin-proxies.js @@ -53,8 +53,8 @@ assertEquals(42, get); assertEquals([ "a0", - "b17", "h4b17", "i2b17", // [[Has]] - "c15", "j4c15", "k2c15", // [[Get]] - "d0", "l4d11", "m2d11", // [[Set]] + "b10", "h4b17", "h16b17", // [[Has]] + "c10", "j4c16", "j14c16", // [[Get]] + "d0", "l4d11", "l17d11", // [[Set]] "g0" ], log); diff --git a/deps/v8/test/debugger/debug/es6/debug-stepin-string-template.js b/deps/v8/test/debugger/debug/es6/debug-stepin-string-template.js index d1a2ce7659..178424ad7c 100644 --- a/deps/v8/test/debugger/debug/es6/debug-stepin-string-template.js +++ b/deps/v8/test/debugger/debug/es6/debug-stepin-string-template.js @@ -47,14 +47,13 @@ assertNull(exception); assertEquals([ "a0", - "b44", - "b13", - "d2b13", - "e0b13", + "b8", + "d11b13", + "d25b13", "b25", - "d2b25", - "e0b25", + "d11b25", + "d25b25", "f4b44", - "g2b44", + "f15b44", "c0" ], log); diff --git a/deps/v8/test/debugger/debug/es6/debug-stepin-tailcalls.js b/deps/v8/test/debugger/debug/es6/debug-stepin-tailcalls.js deleted file mode 100644 index 6483d5b722..0000000000 --- a/deps/v8/test/debugger/debug/es6/debug-stepin-tailcalls.js +++ /dev/null @@ -1,46 +0,0 @@ -// 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. - -// Flags: --harmony-tailcalls - -"use strict"; - -var Debug = debug.Debug -var exception = null; -var breaks = 0; - -function f(x) { - if (x > 0) { // B3 B5 B7 B9 - return f(x - 1); // B4 B6 B8 - } -} // B10 - -function g(x) { - return f(x); // B2 -} - -function h(x) { - debugger; // B0 - g(x); // B1 -} // B11 - - -function listener(event, exec_state, event_data, data) { - if (event != Debug.DebugEvent.Break) return; - try { - print(event_data.sourceLineText()); - assertTrue(event_data.sourceLineText().indexOf(`B${breaks++}`) > 0); - exec_state.prepareStep(Debug.StepAction.StepIn); - } catch (e) { - exception = e; - }; -}; - -Debug.setListener(listener); - -h(3); - -Debug.setListener(null); // B12 -assertNull(exception); -assertEquals(13, breaks); diff --git a/deps/v8/test/debugger/debug/es6/debug-stepnext-for.js b/deps/v8/test/debugger/debug/es6/debug-stepnext-for.js index 29712d82bb..878dda940b 100644 --- a/deps/v8/test/debugger/debug/es6/debug-stepnext-for.js +++ b/deps/v8/test/debugger/debug/es6/debug-stepnext-for.js @@ -110,11 +110,11 @@ var expected = [ // For-in-let: get enumerable, next, body, next, ... "g16","g11","G4","g11","G4","g11","G4","g11", // For-of-var: [Symbol.iterator](), next(), body, next(), body, ... - "h16","h13","H4","h13","H4","h13","H4","h13", + "h16","h11","H4","h11","H4","h11","H4","h11", // For-of: [Symbol.iterator](), next(), body, next(), body, ... - "i12","i9","I4","i9","I4","i9","I4","i9", + "i12","i7","I4","i7","I4","i7","I4","i7", // For-of-let: [Symbol.iterator](), next(), body, next(), ... - "j18","j14","J4","j14","J4","j14","J4","j14", + "j18","j11","J4","j11","J4","j11","J4","j11", // For-var: init, condition, body, next, condition, body, ... "k15","k20","K4","k26","k20","K4","k26","k20","K4","k26","k20", // For: init, condition, body, next, condition, body, ... @@ -122,7 +122,7 @@ var expected = [ // For-let: init, condition, body, next, condition, body, ... "m15","m20","M4","m26","m20","M4","m26","m20","M4","m26","m20", // For-of, empty: [Symbol.iterator](), next() once - "n16", "n13", + "n16", "n11", // Spread: expression statement, spread "o2", "o9", // Exit. diff --git a/deps/v8/test/debugger/debug/es6/debug-stepout-tailcalls.js b/deps/v8/test/debugger/debug/es6/debug-stepout-tailcalls.js deleted file mode 100644 index 2e94c5058b..0000000000 --- a/deps/v8/test/debugger/debug/es6/debug-stepout-tailcalls.js +++ /dev/null @@ -1,45 +0,0 @@ -// 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. - -// Flags: --harmony-tailcalls - -"use strict"; - -var Debug = debug.Debug -var exception = null; -var breaks = 0; - -function f(x) { - if (x > 0) { - return f(x - 1); // Tail call - } - debugger; // Break 0 -} - -function g(x) { - return f(x); // Tail call -} - -function h(x) { - g(x); // Not tail call -} // Break 1 - - -function listener(event, exec_state, event_data, data) { - if (event != Debug.DebugEvent.Break) return; - try { - assertTrue(event_data.sourceLineText().indexOf(`Break ${breaks++}`) > 0); - exec_state.prepareStep(Debug.StepAction.StepOut); - } catch (e) { - exception = e; - }; -}; - -Debug.setListener(listener); - -h(3); - -Debug.setListener(null); // Break 2 -assertNull(exception); -assertEquals(3, breaks); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-abort-at-break.js b/deps/v8/test/debugger/debug/es8/async-debug-step-abort-at-break.js index 055552bfb9..85232b075b 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-abort-at-break.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-abort-at-break.js @@ -24,7 +24,7 @@ Debug.setListener(listener); var late_resolve; function g() { - return new Promise( // B3 StepOut + return new Promise( // B2 StepOut function(res, rej) { late_resolve = res; } @@ -34,8 +34,8 @@ function g() { async function f() { var a = 1; debugger; // B0 StepNext - a += // B1 StepNext - await // B4 StepNext + a += + await // B1 StepIn g(); // B2 StepIn return a; } @@ -44,10 +44,10 @@ f(); // Starting a new step action at an intermediate break point // means that we will abort the current async step. -debugger; // B5 StepNext +debugger; // B3 StepNext -late_resolve(3); // B6 Continue +late_resolve(3); // B4 Continue %RunMicrotasks(); -assertEquals(7, step_count); +assertEquals(5, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-continue-at-break.js b/deps/v8/test/debugger/debug/es8/async-debug-step-continue-at-break.js index 19c4001873..a4726bd7c1 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-continue-at-break.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-continue-at-break.js @@ -24,7 +24,7 @@ Debug.setListener(listener); var late_resolve; function g() { - return new Promise( // B3 StepOut + return new Promise( // B2 StepOut function(res, rej) { late_resolve = res; } @@ -34,20 +34,20 @@ function g() { async function f() { var a = 1; debugger; // B0 StepNext - a += // B1 StepNext - await // B4 StepNext + a += + await // B1 StepIn g(); // B2 StepIn - return a; // B6 StepNext -} // B7 Continue + return a; // B4 StepNext +} // B5 Continue f(); // Continuing at an intermediate break point means that we will // carry on with the current async step. -debugger; // B5 Continue +debugger; // B3 Continue late_resolve(3); %RunMicrotasks(); -assertEquals(8, step_count); +assertEquals(6, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-in-and-out.js b/deps/v8/test/debugger/debug/es8/async-debug-step-in-and-out.js index d4b16bea11..43fb16fa6f 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-in-and-out.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-in-and-out.js @@ -24,7 +24,7 @@ Debug.setListener(listener); var late_resolve; function g() { - return new Promise( // B3 StepOut + return new Promise( // B2 StepOut function(res, rej) { late_resolve = res; } @@ -34,11 +34,11 @@ function g() { async function f() { var a = 1; debugger; // B0 StepNext - a += // B1 StepNext - await // B4 StepNext - g(); // B2 StepIn - return a; // B5 StepNext -} // B6 Continue + a += + await // B1 StepIn + g(); + return a; // B3 StepNext +} // B4 Continue f(); @@ -46,4 +46,4 @@ late_resolve(3); %RunMicrotasks(); -assertEquals(7, step_count); +assertEquals(5, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-in-out-out.js b/deps/v8/test/debugger/debug/es8/async-debug-step-in-out-out.js index 3521b42782..c1d8fd71be 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-in-out-out.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-in-out-out.js @@ -24,7 +24,7 @@ Debug.setListener(listener); var late_resolve; function g() { - return new Promise( // B3 StepOut + return new Promise( // B2 StepOut function(res, rej) { late_resolve = res; } @@ -34,16 +34,16 @@ function g() { async function f() { var a = 1; debugger; // B0 StepNext - a += // B1 StepNext - await // B4 StepOut - g(); // B2 StepIn - return a; + a += + await // B1 StepIn + g(); + return a; // B3 Continue } f(); -late_resolve(3); // B5 Continue +late_resolve(3); %RunMicrotasks(); -assertEquals(6, step_count); +assertEquals(4, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-in.js b/deps/v8/test/debugger/debug/es8/async-debug-step-in.js index 1808b1628a..c32fa2fedc 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-in.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-in.js @@ -24,21 +24,21 @@ Debug.setListener(listener); var late_resolve; function g() { - return new Promise( // B3 StepIn + return new Promise( // B2 StepIn function(res, rej) { - late_resolve = res; // B4 StepIn - } // B5 StepIn - ); -} // B6 StepIn + late_resolve = res; // B3 StepIn + } // B4 StepIn + ); // B5 StepIn +} async function f() { var a = 1; debugger; // B0 StepNext - a += // B1 StepIn - await // B7 StepIn - g(); // B2 StepIn - return a; // B8 StepIn -} // B9 Continue + a += + await // B1 StepIn + g(); + return a; // B6 StepIn +} // B7 Continue f().then(value => assertEquals(4, value)); @@ -46,4 +46,4 @@ late_resolve(3); %RunMicrotasks(); -assertEquals(10, step_count); +assertEquals(8, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-nested.js b/deps/v8/test/debugger/debug/es8/async-debug-step-nested.js index 9a1342419b..79e8dfaaef 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-nested.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-nested.js @@ -24,7 +24,7 @@ Debug.setListener(listener); var late_resolve; function g() { - return new Promise( // B4 StepOut + return new Promise( // B3 StepOut function(res, rej) { late_resolve = res; } @@ -34,17 +34,17 @@ function g() { async function f1() { var a = 1; debugger; // B0 StepNext - a += // B1 StepNext - await // B6 StepNext + a += + await // B1 StepIn f2(); // B2 StepIn - return a; // B7 StepNext -} // B8 Continue + return a; // B5 StepNext +} // B6 Continue async function f2() { - var b = - await // B5 StepOut - g(); // B3 StepIn - return b; + var b = 0 + // B2 StepIn + await + g(); + return b; // B4 StepOut } f1(); @@ -53,4 +53,4 @@ late_resolve(3); %RunMicrotasks(); -assertEquals(9, step_count); +assertEquals(7, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-next-constant.js b/deps/v8/test/debugger/debug/es8/async-debug-step-next-constant.js index 11fda38f86..32833acc11 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-next-constant.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-next-constant.js @@ -25,13 +25,13 @@ async function f() { var a = 1; debugger; // B0 StepNext a += // B1 StepNext - await // B3 StepNext - 5; // B2 StepNext - return a; // B4 StepNext -} // B5 Continue + await + 5; + return a; // B2 StepNext +} // B3 Continue f(); %RunMicrotasks(); -assertEquals(6, step_count); +assertEquals(4, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-debug-step-next.js b/deps/v8/test/debugger/debug/es8/async-debug-step-next.js index 26be9f349d..597afd3876 100644 --- a/deps/v8/test/debugger/debug/es8/async-debug-step-next.js +++ b/deps/v8/test/debugger/debug/es8/async-debug-step-next.js @@ -34,11 +34,11 @@ function g() { async function f() { var a = 1; debugger; // B0 StepNext - a += // B1 StepNext - await // B3 StepNext - g(); // B2 StepNext - return a; // B4 StepNext -} // B5 Continue + a += + await // B1 StepNext + g(); + return a; // B2 StepNext +} // B3 Continue f(); @@ -46,4 +46,4 @@ late_resolve(3); %RunMicrotasks(); -assertEquals(6, step_count); +assertEquals(4, step_count); diff --git a/deps/v8/test/debugger/debug/es8/async-function-debug-evaluate.js b/deps/v8/test/debugger/debug/es8/async-function-debug-evaluate.js index a635482f51..c1fe532231 100644 --- a/deps/v8/test/debugger/debug/es8/async-function-debug-evaluate.js +++ b/deps/v8/test/debugger/debug/es8/async-function-debug-evaluate.js @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Flags: --noalways-opt + var Debug = debug.Debug; var breakPointCount = 0; @@ -12,10 +14,9 @@ function listener(event, exec_state, event_data, data) { if (breakPointCount === 1) { assertEquals( "inner", exec_state.frame(0).evaluate("inner").value()); - assertThrows(() => exec_state.frame(0).evaluate("letInner").value(), - ReferenceError); - assertThrows(() => exec_state.frame(0).evaluate("constInner").value(), - ReferenceError); + // Variables in TDZ have 'undefined' as their values. + assertEquals(undefined, exec_state.frame(0).evaluate("letInner").value()); + assertEquals(undefined, exec_state.frame(0).evaluate("constInner").value()); assertEquals("outer", exec_state.frame(0).evaluate("outer").value()); assertEquals( @@ -29,16 +30,15 @@ function listener(event, exec_state, event_data, data) { assertEquals( "let outer", exec_state.frame(1).evaluate("letOuter").value()); - assertThrows(() => exec_state.frame(0).evaluate("withVar").value(), - ReferenceError); + // Variables in TDZ have 'undefined' as their values. + assertEquals(undefined, exec_state.frame(0).evaluate("withVar").value()); } else if (breakPointCount === 2) { assertEquals( "inner", exec_state.frame(0).evaluate("inner").value()); - assertThrows(() => exec_state.frame(0).evaluate("letInner").value(), - ReferenceError); - assertThrows(() => exec_state.frame(0).evaluate("constInner").value(), - ReferenceError); + // Variables in TDZ have 'undefined' as their values. + assertEquals(undefined, exec_state.frame(0).evaluate("letInner").value()); + assertEquals(undefined, exec_state.frame(0).evaluate("constInner").value()); assertEquals(57, exec_state.frame(0).evaluate("x").value()); assertEquals(100, exec_state.frame(0).evaluate("y").value()); @@ -70,8 +70,8 @@ function listener(event, exec_state, event_data, data) { "Error", exec_state.frame(0).evaluate("error.constructor.name").value()); assertEquals("floof", exec_state.frame(0).evaluate("bun").value()); - assertThrows(() => exec_state.frame(0).evaluate("cow").value(), - ReferenceError); + // Variables in TDZ have 'undefined' as their values. + assertEquals(undefined, exec_state.frame(0).evaluate("cow").value()) assertEquals("outer", exec_state.frame(0).evaluate("outer").value()); assertEquals( diff --git a/deps/v8/test/debugger/debug/es8/async-function-debug-scopes.js b/deps/v8/test/debugger/debug/es8/async-function-debug-scopes.js index 6d54aea98b..172ec8fc56 100644 --- a/deps/v8/test/debugger/debug/es8/async-function-debug-scopes.js +++ b/deps/v8/test/debugger/debug/es8/async-function-debug-scopes.js @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Flags: --noalways-opt + var Debug = debug.Debug; var global_marker = 7; @@ -400,7 +402,7 @@ await test( debug.ScopeType.Closure, debug.ScopeType.Script, debug.ScopeType.Global], exec_state); - CheckScopeContent({a:1, x: 2}, 1, exec_state); + CheckScopeContent({a:1}, 1, exec_state); }, result => result()); @@ -418,7 +420,7 @@ await test( debug.ScopeType.Script, debug.ScopeType.Global], exec_state); CheckScopeContent({e: 'Exception'}, 0, exec_state); - CheckScopeContent({a:1, x: 2}, 2, exec_state); + CheckScopeContent({a:1}, 2, exec_state); }, result => result()); diff --git a/deps/v8/test/debugger/debug/ignition/elided-instruction.js b/deps/v8/test/debugger/debug/ignition/elided-instruction.js index 53bf624103..4663f36fda 100644 --- a/deps/v8/test/debugger/debug/ignition/elided-instruction.js +++ b/deps/v8/test/debugger/debug/ignition/elided-instruction.js @@ -24,13 +24,13 @@ function listener(event, exec_state, event_data, data) { function f() { var a = 1; // Break 2. 10. - return a; // Break 3. 2. -} // Break 4. 0. + return a; // Break 3. 11. +} Debug.setListener(listener); debugger; // Break 0. 0. f(); // Break 1. 0. -Debug.setListener(null); // Break 5. 0. +Debug.setListener(null); // Break 4. 0. assertNull(exception); -assertEquals(6, break_count); +assertEquals(5, break_count); diff --git a/deps/v8/test/debugger/debug/regress-3225.js b/deps/v8/test/debugger/debug/regress-3225.js index ed17f0ee10..454ff6e7a4 100644 --- a/deps/v8/test/debugger/debug/regress-3225.js +++ b/deps/v8/test/debugger/debug/regress-3225.js @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Flags: --noalways-opt Debug = debug.Debug diff --git a/deps/v8/test/debugger/debug/regress/regress-crbug-424142.js b/deps/v8/test/debugger/debug/regress/regress-crbug-424142.js index 261aa7de3c..bda061c79e 100644 --- a/deps/v8/test/debugger/debug/regress/regress-crbug-424142.js +++ b/deps/v8/test/debugger/debug/regress/regress-crbug-424142.js @@ -25,7 +25,7 @@ Debug = debug.Debug; Debug.setListener(function(){}); var script = Debug.findScript(sentinel); -var line = 14; +var line = 13; var line_start = Debug.findScriptSourcePosition(script, line, 0); var line_end = Debug.findScriptSourcePosition(script, line + 1, 0) - 1; var actual = Debug.setBreakPointByScriptIdAndPosition( diff --git a/deps/v8/test/debugger/debug/regress/regress-crbug-467180.js b/deps/v8/test/debugger/debug/regress/regress-crbug-467180.js index c2333fca93..71e38c3594 100644 --- a/deps/v8/test/debugger/debug/regress/regress-crbug-467180.js +++ b/deps/v8/test/debugger/debug/regress/regress-crbug-467180.js @@ -5,7 +5,7 @@ function f() { for (var i = 10; i < 14; i++) { // 1 - i; // 2 + i *= 1; // 2 } } // 3 diff --git a/deps/v8/test/debugger/debugger.status b/deps/v8/test/debugger/debugger.status index d76bd5017d..f04fe0439e 100644 --- a/deps/v8/test/debugger/debugger.status +++ b/deps/v8/test/debugger/debugger.status @@ -24,21 +24,24 @@ # Slow tests 'debug/debug-scopes': [PASS, SLOW], 'debug/debug-stepout-scope-part*': [PASS, SLOW], - 'debug/ignition/debug-step-prefix-bytecodes': [PASS, SLOW], + 'debug/ignition/debug-step-prefix-bytecodes': [PASS, SLOW, ['mode == debug', SKIP]], # Too slow in debug mode and on slow platforms. 'regress/regress-2318': [PASS, SLOW, ['mode == debug or (arch != ia32 and arch != x64) or asan == True or msan == True', SKIP]], + + # forcing weak callback in asan build change break order + 'debug/debug-stepin-builtin-callback': [['asan == True or msan == True', SKIP]], }], # ALWAYS ############################################################################## -['variant == stress or variant == noturbofan_stress', { +['variant == stress', { # TODO(jarin/mstarzinger): Functions with eval or debugger now get optimized # with Turbofan, which has issues with the debugger issues. 'debug/debug-evaluate-locals': [FAIL], # Very slow in stress mode. 'regress/regress-2318': [SKIP], -}], # variant == stress or variant == noturbofan_stress +}], # variant == stress ############################################################################## ['gc_stress == True', { @@ -63,12 +66,6 @@ }], # 'gc_stress == True' ############################################################################## -['variant == turbofan_opt', { - # TODO(jarin/mstarzinger): Investigate debugger issues with TurboFan. - 'debug/debug-evaluate-locals': [FAIL], -}], # variant == turbofan_opt - -############################################################################## ['variant == wasm_traps', { '*': [SKIP], }], # variant == wasm_traps @@ -80,12 +77,6 @@ }], # 'arch == arm and not simulator_run' ############################################################################## -['variant in [noturbofan, noturbofan_stress] and system == macos and asan', { - # Too slow for old pipeline and mac asan. - 'debug/*': [SKIP], -}], # variant in [noturbofan, noturbofan_stress] and system == macos and asan - -############################################################################## ['arch == s390 or arch == s390x', { # Stack manipulations in LiveEdit is not implemented for this arch. @@ -94,4 +85,25 @@ 'debug/debug-liveedit-stack-padding': [SKIP], 'debug/debug-liveedit-restart-frame': [SKIP], }], # 'arch == s390 or arch == s390x' + +############################################################################## +['variant == fullcode', { + # fullcode doesn't generate precise return positions + 'debug/debug-multiple-var-decl': [SKIP], + 'debug/debug-step-into-valueof': [SKIP], + 'regress/regress-5901-2': [SKIP], + 'debug/debug-step-into-json': [SKIP], + 'debug/es6/debug-step-destructuring-assignment': [SKIP], + 'debug/es6/debug-step-into-regexp-subclass': [SKIP], + 'debug/es8/async-debug-step-in': [SKIP], + 'debug/debug-stepin-builtin-callback-opt': [SKIP], + 'debug/debug-stepin-foreach': [SKIP], + 'debug/es6/debug-stepin-default-parameters': [SKIP], + 'debug/es6/debug-stepin-proxies': [SKIP], + 'debug/es6/debug-promises/stepin-handler': [SKIP], + 'debug/debug-liveedit-stepin': [SKIP], + 'debug/es6/debug-stepin-microtasks': [SKIP], + 'debug/ignition/elided-instruction': [SKIP], + 'debug/es6/debug-stepin-string-template': [SKIP], +}], # variant == fullcode ] diff --git a/deps/v8/test/debugger/regress/regress-5610.js b/deps/v8/test/debugger/regress/regress-5610.js index e2091524df..7736c040a2 100644 --- a/deps/v8/test/debugger/regress/regress-5610.js +++ b/deps/v8/test/debugger/regress/regress-5610.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --turbo - var Debug = debug.Debug; var step_count = 0; diff --git a/deps/v8/test/debugger/regress/regress-5901-1.js b/deps/v8/test/debugger/regress/regress-5901-1.js index 49becc9294..2309512904 100644 --- a/deps/v8/test/debugger/regress/regress-5901-1.js +++ b/deps/v8/test/debugger/regress/regress-5901-1.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --ignition --turbo +// Flags: --no-stress-fullcodegen function f() { throw new Error(); @@ -44,7 +44,7 @@ function listener(event, exec_state, event_data, data) { Debug.setListener(listener); Debug.setBreakOnException(); -% OptimizeFunctionOnNextCall(h); +%OptimizeFunctionOnNextCall(h); h(); Debug.setListener(null); assertNull(exception); diff --git a/deps/v8/test/debugger/regress/regress-5901-2.js b/deps/v8/test/debugger/regress/regress-5901-2.js index becad1bb07..cf6f0efd60 100644 --- a/deps/v8/test/debugger/regress/regress-5901-2.js +++ b/deps/v8/test/debugger/regress/regress-5901-2.js @@ -8,8 +8,8 @@ function f() { } function g() { - return f(); -} // Break + return f(); // Break +} function h() { return g(); @@ -38,7 +38,7 @@ function listener(event, exec_state, event_data, data) { } Debug.setListener(listener); -% OptimizeFunctionOnNextCall(h); +%OptimizeFunctionOnNextCall(h); h(); Debug.setListener(null); assertNull(exception); diff --git a/deps/v8/test/debugger/regress/regress-6526.js b/deps/v8/test/debugger/regress/regress-6526.js new file mode 100644 index 0000000000..90df244b3c --- /dev/null +++ b/deps/v8/test/debugger/regress/regress-6526.js @@ -0,0 +1,25 @@ +// Copyright 2017 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: --enable-inspector --allow-natives-syntax + +const Debug = debug.Debug; +Debug.setListener(() => {}); + +var a = [0,1,2,3,4,5,6,7,8,9]; + +var f = function() { + a.forEach(function(v) { + try { + throw new Error(); + } catch (e) { + } + }); +} + +f(); +f(); +%OptimizeFunctionOnNextCall(f); +f(); +f(); diff --git a/deps/v8/test/debugger/regress/regress-crbug-724858.js b/deps/v8/test/debugger/regress/regress-crbug-724858.js new file mode 100644 index 0000000000..d2d8883c97 --- /dev/null +++ b/deps/v8/test/debugger/regress/regress-crbug-724858.js @@ -0,0 +1,36 @@ +// Copyright 2017 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. + +const Debug = debug.Debug; +let exception = null; +let step_count = 0; + +Debug.setListener((event, execState, eventData, data) => { + if (event != Debug.DebugEvent.Break) return; + try { + const line = execState.frame(0).sourceLineText(); + print(line); + + const [match, expected_count, step] = /\/\/ B(\d) (\w+)$/.exec(line); + assertEquals(step_count++, parseInt(expected_count)); + + if (step != "Continue") execState.prepareStep(Debug.StepAction[step]); + } catch (e) { + print(e, e.stack); + exception = e; + } +}); + +function f(x) { + debugger; // B0 StepNext + with ({}) { // B1 StepNext + return x // B2 StepNext + ; // B3 Continue + } +} + +f(42); + +assertNull(exception); +assertEquals(4, step_count); diff --git a/deps/v8/test/debugger/regress/regress-crbug-736758.js b/deps/v8/test/debugger/regress/regress-crbug-736758.js new file mode 100644 index 0000000000..d483af25b2 --- /dev/null +++ b/deps/v8/test/debugger/regress/regress-crbug-736758.js @@ -0,0 +1,15 @@ +// Copyright 2017 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. + +var Debug = debug.Debug; + +function listener() {} +function f() { [1,2,3].forEach(g) } +function g() { debugger } + +f(); +f(); +Debug.setListener(listener); +%OptimizeFunctionOnNextCall(f) +f(); diff --git a/deps/v8/test/debugger/test-api.js b/deps/v8/test/debugger/test-api.js index c4533dee85..0e9670b277 100644 --- a/deps/v8/test/debugger/test-api.js +++ b/deps/v8/test/debugger/test-api.js @@ -67,13 +67,6 @@ class DebugWrapper { this.ExceptionBreak = { Caught : 0, Uncaught: 1 }; - // The different types of breakpoint position alignments. - // Must match BreakPositionAlignment in debug.h. - this.BreakPositionAlignment = { - Statement: 0, - BreakPosition: 1 - }; - // The different script break point types. this.ScriptBreakPointType = { ScriptId: 0, ScriptName: 1, @@ -180,14 +173,12 @@ class DebugWrapper { this.breakpoints.clear(); } - showBreakPoints(f, opt_position_alignment) { + showBreakPoints(f) { if (!%IsFunction(f)) throw new Error("Not passed a Function"); const source = %FunctionGetSourceCode(f); const offset = %FunctionGetScriptSourcePosition(f); - const position_alignment = opt_position_alignment === undefined - ? this.BreakPositionAlignment.Statement : opt_position_alignment; - const locations = %GetBreakLocations(f, position_alignment); + const locations = %GetBreakLocations(f); if (!locations) return source; |