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