| // Copyright 2016 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. |
| |
| |
| var Debug = debug.Debug; |
| |
| var changed = false; |
| |
| function listenerSetJToResult( |
| event, exec_state, event_data, data) { |
| |
| if (event == Debug.DebugEvent.Break) { |
| var scope = exec_state.frame(1).scope(0); |
| var newval = "result"; |
| try { |
| scope.setVariableValue("j", newval); |
| changed = true; |
| } catch(e) { |
| changed = false; |
| } |
| } |
| } |
| |
| Debug.setListener(listenerSetJToResult); |
| |
| function g() { debugger; } |
| %NeverOptimizeFunction(g); |
| |
| function ChangeSmiConstantAndOsr() { |
| var j = 1; |
| for (var i = 0; i < 4; i++) { |
| if (i == 2) { |
| %OptimizeOsr(); |
| g(); |
| } |
| } |
| return j; |
| } |
| %PrepareFunctionForOptimization(ChangeSmiConstantAndOsr); |
| var r1 = ChangeSmiConstantAndOsr(); |
| if (changed) { |
| assertEquals("result", r1); |
| } else { |
| assertEquals(1, r1); |
| } |
| |
| function ChangeFloatConstantAndOsr() { |
| var j = 0.1; |
| for (var i = 0; i < 4; i++) { |
| if (i == 2) { |
| %OptimizeOsr(); |
| g(); |
| } |
| } |
| return j; |
| } |
| %PrepareFunctionForOptimization(ChangeFloatConstantAndOsr); |
| var r2 = ChangeFloatConstantAndOsr(); |
| if (changed) { |
| assertEquals("result", r2); |
| } else { |
| assertEquals(0.1, r2); |
| } |
| |
| function ChangeFloatVarAndOsr() { |
| var j = 0.1; |
| for (var i = 0; i < 4; i++) { |
| j = j + 0.1; |
| if (i == 2) { |
| %OptimizeOsr(); |
| g(); |
| } |
| } |
| return j; |
| } |
| %PrepareFunctionForOptimization(ChangeFloatVarAndOsr); |
| var r3 = ChangeFloatVarAndOsr(); |
| if (changed) { |
| assertEquals("result0.1", r3); |
| } else { |
| assertEquals(0.5, r3); |
| } |
| |
| function listenerSetJToObject( |
| event, exec_state, event_data, data) { |
| if (event == Debug.DebugEvent.Break) { |
| var scope = exec_state.frame(1).scope(0); |
| try { |
| scope.setVariableValue("j", 100); |
| changed = true; |
| } catch(e) { |
| changed = false; |
| } |
| } |
| } |
| |
| Debug.setListener(listenerSetJToObject); |
| |
| function ChangeIntVarAndOsr() { |
| var j = 1; |
| for (var i = 0; i < 4; i++) { |
| j = j + 1|0; |
| if (i == 2) { |
| %OptimizeOsr(); |
| g(); |
| } |
| } |
| return j; |
| } |
| %PrepareFunctionForOptimization(ChangeIntVarAndOsr); |
| |
| var r4 = ChangeIntVarAndOsr(); |
| if (changed) { |
| assertEquals(101, r4); |
| } else { |
| assertEquals(5, r4); |
| } |