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 |