diff options
Diffstat (limited to 'deps/v8/test/debugger/debug/side-effect')
3 files changed, 23 insertions, 4 deletions
diff --git a/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-builtins.js b/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-builtins.js index 9a108be4a4..938461690e 100644 --- a/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-builtins.js +++ b/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-builtins.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: --no-enable-one-shot-optimization + Debug = debug.Debug var exception = null; diff --git a/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-runtime-check.js b/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-runtime-check.js index 7450cb2206..7a0f373be7 100644 --- a/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-runtime-check.js +++ b/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect-runtime-check.js @@ -50,8 +50,7 @@ success([1], `return_array_use_spread([1])`); // CallAccessorSetter var array = [1,2,3]; fail(`array.length = 2`); -// TODO(7515): this one should be side effect free -fail(`[1,2,3].length = 2`); +success(2, `[1,2,3].length = 2`); // StaDataPropertyInLiteral function return_literal_with_data_property(a) { diff --git a/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect.js b/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect.js index fa14b4b862..5504cef16d 100644 --- a/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect.js +++ b/deps/v8/test/debugger/debug/side-effect/debug-evaluate-no-side-effect.js @@ -9,6 +9,7 @@ let a = 1; var object = { property : 2, get getter() { return 3; } }; +var string0 = new String("string"); var string1 = { toString() { return "x"; } }; var string2 = { toString() { print("x"); return "x"; } }; var array = [4, 5]; @@ -19,6 +20,9 @@ function set_a() { a = 2; } function get_a() { return a; } var bound = get_a.bind(0); +function return_arg0() { return return_arg0.arguments[0]; } +function return_caller_name() { return return_caller_name.caller.name; } + var global_eval = eval; function listener(event, exec_state, event_data, data) { @@ -32,6 +36,7 @@ function listener(event, exec_state, event_data, data) { assertThrows(() => exec_state.frame(0).evaluate(source, true), EvalError); } + // Simple test. success(3, "1 + 2"); // Dymanic load. @@ -62,8 +67,9 @@ function listener(event, exec_state, event_data, data) { success("set_a", "set_a.name"); success(0, "bound.length"); success("bound get_a", "bound.name"); + success(1, "return_arg0(1)"); + success("f", "(function f() { return return_caller_name() })()"); // Non-evaluated call. - success("abc", "['abc'].join('foo')"); // Constructed literals. success([1], "[1]"); success({x: 1}, "({x: 1})"); @@ -82,13 +88,25 @@ function listener(event, exec_state, event_data, data) { fail("try { set_a() } catch (e) {}"); // Test that call to set accessor fails. fail("array.length = 4"); - fail("'x'.length = 1"); fail("set_a.name = 'set_b'"); fail("set_a.length = 1"); fail("bound.name = 'bound'"); fail("bound.length = 1"); + fail("set_a.prototype = null"); // Test that call to non-whitelisted get accessor fails. fail("error.stack"); + // Call to set accessors with receiver check. + success(1, "[].length = 1"); + success(1, "'x'.length = 1"); + fail("string0.length = 1"); + success(1, "(new String('abc')).length = 1"); + success("g", "(function(){}).name = 'g'"); + success(1, "(function(){}).length = 1"); + success("g", "get_a.bind(0).name = 'g'"); + success(1, "get_a.bind(0).length = 1"); + success(null, "(function(){}).prototype = null"); + success(true, "(new Error()).stack.length > 1"); + success("a", "(new Error()).stack = 'a'"); // Eval is not allowed. fail("eval('Math.sin(1)')"); fail("eval('exception = 1')"); |