| OLD | NEW | 
| (Empty) |  | 
 |   1 // Copyright 2015 the V8 project authors. All rights reserved. | 
 |   2 // Use of this source code is governed by a BSD-style license that can be | 
 |   3 // found in the LICENSE file. | 
 |   4  | 
 |   5 // Flags: --harmony-reflect --expose-debug-as debug --allow-natives-syntax | 
 |   6  | 
 |   7 // Test that live-editing a frame that uses new.target fails. | 
 |   8  | 
 |   9 Debug = debug.Debug | 
 |  10 var calls = 0; | 
 |  11 var exceptions = 0; | 
 |  12 var results = []; | 
 |  13 var replace_again; | 
 |  14  | 
 |  15 eval(` | 
 |  16   function LogNewTarget() { | 
 |  17     calls++; | 
 |  18     ReplaceOnce(); | 
 |  19     results.push(true); | 
 |  20     results.push(new.target); | 
 |  21   } | 
 |  22 `); | 
 |  23  | 
 |  24 function Dummy() {} | 
 |  25  | 
 |  26 function Replace(fun, original, patch) { | 
 |  27   %ExecuteInDebugContext(function() { | 
 |  28     var change_log = []; | 
 |  29     try { | 
 |  30       var script = Debug.findScript(fun); | 
 |  31       var patch_pos = script.source.indexOf(original); | 
 |  32       Debug.LiveEdit.TestApi.ApplySingleChunkPatch( | 
 |  33           script, patch_pos, original.length, patch, change_log); | 
 |  34     } catch (e) { | 
 |  35       assertEquals("BLOCKED_NO_NEW_TARGET_ON_RESTART", | 
 |  36           change_log[0].functions_on_stack[0].replace_problem); | 
 |  37       assertInstanceof(e, Debug.LiveEdit.Failure); | 
 |  38       exceptions++; | 
 |  39     } | 
 |  40   }); | 
 |  41 } | 
 |  42  | 
 |  43 function ReplaceOnce() { | 
 |  44   if (replace_again) { | 
 |  45     replace_again = false; | 
 |  46     Replace(LogNewTarget, "true", "false"); | 
 |  47   } | 
 |  48 } | 
 |  49  | 
 |  50 function Revert() { | 
 |  51   Replace(LogNewTarget, "false", "true"); | 
 |  52 } | 
 |  53  | 
 |  54 replace_again = true; | 
 |  55 ReplaceOnce(); | 
 |  56 new LogNewTarget(); | 
 |  57 Revert(); | 
 |  58 assertEquals(1, calls); | 
 |  59 assertEquals(0, exceptions); | 
 |  60 assertEquals([false, LogNewTarget], results); | 
 |  61  | 
 |  62 replace_again = true; | 
 |  63 LogNewTarget(); | 
 |  64  | 
 |  65 replace_again = true; | 
 |  66 new LogNewTarget(); | 
 |  67  | 
 |  68 replace_again = true; | 
 |  69 Reflect.construct(LogNewTarget, [], Dummy); | 
 |  70  | 
 |  71 assertEquals( | 
 |  72     [false, LogNewTarget, true, undefined, true, LogNewTarget, true, Dummy], | 
 |  73     results); | 
 |  74 assertEquals(4, calls);  // No restarts | 
 |  75 assertEquals(3, exceptions);  // Replace failed. | 
| OLD | NEW |