| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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: --allow-natives-syntax --expose-debug-as debug | |
| 6 | |
| 7 var Debug = debug.Debug; | |
| 8 | |
| 9 var changed = false; | |
| 10 | |
| 11 function listenerSetJToResult( | |
| 12 event, exec_state, event_data, data) { | |
| 13 | |
| 14 if (event == Debug.DebugEvent.Break) { | |
| 15 var scope = exec_state.frame(1).scope(0); | |
| 16 var newval = "result"; | |
| 17 try { | |
| 18 scope.setVariableValue("j", newval); | |
| 19 changed = true; | |
| 20 } catch(e) { | |
| 21 changed = false; | |
| 22 } | |
| 23 } | |
| 24 } | |
| 25 | |
| 26 Debug.setListener(listenerSetJToResult); | |
| 27 | |
| 28 function g() { debugger; } | |
| 29 %NeverOptimizeFunction(g); | |
| 30 | |
| 31 function ChangeSmiConstantAndOsr() { | |
| 32 var j = 1; | |
| 33 for (var i = 0; i < 4; i++) { | |
| 34 if (i == 2) { | |
| 35 %OptimizeOsr(); | |
| 36 g(); | |
| 37 } | |
| 38 } | |
| 39 return j; | |
| 40 } | |
| 41 var r1 = ChangeSmiConstantAndOsr(); | |
| 42 if (changed) { | |
| 43 assertEquals("result", r1); | |
| 44 } else { | |
| 45 assertEquals(1, r1); | |
| 46 } | |
| 47 | |
| 48 function ChangeFloatConstantAndOsr() { | |
| 49 var j = 0.1; | |
| 50 for (var i = 0; i < 4; i++) { | |
| 51 if (i == 2) { | |
| 52 %OptimizeOsr(); | |
| 53 g(); | |
| 54 } | |
| 55 } | |
| 56 return j; | |
| 57 } | |
| 58 var r2 = ChangeFloatConstantAndOsr(); | |
| 59 if (changed) { | |
| 60 assertEquals("result", r2); | |
| 61 } else { | |
| 62 assertEquals(0.1, r2); | |
| 63 } | |
| 64 | |
| 65 function ChangeFloatVarAndOsr() { | |
| 66 var j = 0.1; | |
| 67 for (var i = 0; i < 4; i++) { | |
| 68 j = j + 0.1; | |
| 69 if (i == 2) { | |
| 70 %OptimizeOsr(); | |
| 71 g(); | |
| 72 } | |
| 73 } | |
| 74 return j; | |
| 75 } | |
| 76 var r3 = ChangeFloatVarAndOsr(); | |
| 77 if (changed) { | |
| 78 assertEquals("result0.1", r3); | |
| 79 } else { | |
| 80 assertEquals(0.5, r3); | |
| 81 } | |
| 82 | |
| 83 var counter = 0; | |
| 84 var o = { toString : function() { counter++; return 100; } }; | |
| 85 | |
| 86 function listenerSetJToObject( | |
| 87 event, exec_state, event_data, data) { | |
| 88 if (event == Debug.DebugEvent.Break) { | |
| 89 var scope = exec_state.frame(1).scope(0); | |
| 90 try { | |
| 91 scope.setVariableValue("j", o); | |
| 92 changed = true; | |
| 93 } catch(e) { | |
| 94 changed = false; | |
| 95 } | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 Debug.setListener(listenerSetJToObject); | |
| 100 | |
| 101 function ChangeIntVarAndOsr() { | |
| 102 var j = 1; | |
| 103 for (var i = 0; i < 4; i++) { | |
| 104 j = j + 1|0; | |
| 105 if (i == 2) { | |
| 106 %OptimizeOsr(); | |
| 107 g(); | |
| 108 } | |
| 109 } | |
| 110 return j; | |
| 111 } | |
| 112 | |
| 113 var r4 = ChangeIntVarAndOsr(); | |
| 114 if (changed) { | |
| 115 assertEquals(101, r4); | |
| 116 assertEquals(1, counter); | |
| 117 } else { | |
| 118 assertEquals(5, r4); | |
| 119 } | |
| OLD | NEW |