diff options
Diffstat (limited to 'deps/v8/test/mjsunit/es6/debug-liveedit-new-target-2.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/debug-liveedit-new-target-2.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/es6/debug-liveedit-new-target-2.js b/deps/v8/test/mjsunit/es6/debug-liveedit-new-target-2.js new file mode 100644 index 0000000000..8c6dc7e7e1 --- /dev/null +++ b/deps/v8/test/mjsunit/es6/debug-liveedit-new-target-2.js @@ -0,0 +1,63 @@ +// 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: --expose-debug-as debug --allow-natives-syntax + +// Test that live-editing a frame to introduce new.target fails. + +Debug = debug.Debug +var calls = 0; +var exceptions = 0; +var results = []; +var replace_again; + +eval(` + function LogNewTarget() { + calls++; + ReplaceOnce(); + results.push(true); + } +`); + +function Replace(fun, original, patch) { + %ExecuteInDebugContext(function() { + var change_log = []; + try { + var script = Debug.findScript(fun); + var patch_pos = script.source.indexOf(original); + Debug.LiveEdit.TestApi.ApplySingleChunkPatch( + script, patch_pos, original.length, patch, change_log); + } catch (e) { + assertEquals("BLOCKED_NO_NEW_TARGET_ON_RESTART", + change_log[0].functions_on_stack[0].replace_problem); + assertInstanceof(e, Debug.LiveEdit.Failure); + exceptions++; + } + }); +} + +function ReplaceOnce(x) { + if (replace_again) { + replace_again = false; + Replace(LogNewTarget, "true", "new.target"); + } +} + +function Revert() { + Replace(LogNewTarget, "new.target", "true"); +} + +replace_again = true; +ReplaceOnce(); +new LogNewTarget(); +Revert(); +assertEquals(1, calls); +assertEquals(0, exceptions); +assertEquals([LogNewTarget], results); + +replace_again = true; +new LogNewTarget(); +assertEquals(2, calls); // No restarts +assertEquals(1, exceptions); // Replace failed. +assertEquals([LogNewTarget, true], results); |