OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 assertScopeMirrorEquals(all_scopes[i], scope); | 109 assertScopeMirrorEquals(all_scopes[i], scope); |
110 | 110 |
111 // Check the global object when hitting the global scope. | 111 // Check the global object when hitting the global scope. |
112 if (scopes[i] == debug.ScopeType.Global) { | 112 if (scopes[i] == debug.ScopeType.Global) { |
113 // Objects don't have same class (one is "global", other is "Object", | 113 // Objects don't have same class (one is "global", other is "Object", |
114 // so just check the properties directly. | 114 // so just check the properties directly. |
115 assertPropertiesEqual(this, scope.scopeObject().value()); | 115 assertPropertiesEqual(this, scope.scopeObject().value()); |
116 } | 116 } |
117 } | 117 } |
118 CheckFastAllScopes(scopes, exec_state); | 118 CheckFastAllScopes(scopes, exec_state); |
119 | |
120 // Get the debug command processor. | |
121 var dcp = exec_state.debugCommandProcessor("unspecified_running_state"); | |
122 | |
123 // Send a scopes request and check the result. | |
124 var json; | |
125 var request_json = '{"seq":0,"type":"request","command":"scopes"}'; | |
126 var response_json = dcp.processDebugJSONRequest(request_json); | |
127 var response = JSON.parse(response_json); | |
128 assertEquals(scopes.length, response.body.scopes.length); | |
129 for (var i = 0; i < scopes.length; i++) { | |
130 assertEquals(i, response.body.scopes[i].index); | |
131 assertEquals(scopes[i], response.body.scopes[i].type); | |
132 if (scopes[i] == debug.ScopeType.Local || | |
133 scopes[i] == debug.ScopeType.Script || | |
134 scopes[i] == debug.ScopeType.Closure) { | |
135 assertTrue(response.body.scopes[i].object.ref < 0); | |
136 } else { | |
137 assertTrue(response.body.scopes[i].object.ref >= 0); | |
138 } | |
139 var found = false; | |
140 for (var j = 0; j < response.refs.length && !found; j++) { | |
141 found = response.refs[j].handle == response.body.scopes[i].object.ref; | |
142 } | |
143 assertTrue(found, "Scope object " + response.body.scopes[i].object.ref + " n
ot found"); | |
144 } | |
145 } | 119 } |
146 | 120 |
147 | 121 |
148 // Check that the scope chain contains the expected names of scopes. | 122 // Check that the scope chain contains the expected names of scopes. |
149 function CheckScopeChainNames(names, exec_state) { | 123 function CheckScopeChainNames(names, exec_state) { |
150 var all_scopes = exec_state.frame().allScopes(); | 124 var all_scopes = exec_state.frame().allScopes(); |
151 assertEquals(names.length, all_scopes.length, "FrameMirror.allScopes length"); | 125 assertEquals(names.length, all_scopes.length, "FrameMirror.allScopes length"); |
152 for (var i = 0; i < names.length; i++) { | 126 for (var i = 0; i < names.length; i++) { |
153 var scope = exec_state.frame().scope(i); | 127 var scope = exec_state.frame().scope(i); |
154 assertTrue(scope.isScope()); | 128 assertTrue(scope.isScope()); |
155 assertEquals(names[i], scope.details().name()) | 129 assertEquals(names[i], scope.details().name()) |
156 } | 130 } |
157 } | 131 } |
158 | 132 |
159 | 133 |
160 // Check that the scope contains at least minimum_content. For functions just | 134 // Check that the scope contains at least minimum_content. For functions just |
161 // check that there is a function. | 135 // check that there is a function. |
162 function CheckScopeContent(minimum_content, number, exec_state) { | 136 function CheckScopeContent(minimum_content, number, exec_state) { |
163 var scope = exec_state.frame().scope(number); | 137 var scope = exec_state.frame().scope(number); |
164 var minimum_count = 0; | 138 var minimum_count = 0; |
165 for (var p in minimum_content) { | 139 for (var p in minimum_content) { |
166 var property_mirror = scope.scopeObject().property(p); | 140 var property_mirror = scope.scopeObject().property(p); |
167 assertFalse(property_mirror.isUndefined(), 'property ' + p + ' not found in
scope'); | 141 assertFalse(property_mirror.isUndefined(), |
| 142 'property ' + p + ' not found in scope'); |
168 if (typeof(minimum_content[p]) === 'function') { | 143 if (typeof(minimum_content[p]) === 'function') { |
169 assertTrue(property_mirror.value().isFunction()); | 144 assertTrue(property_mirror.value().isFunction()); |
170 } else { | 145 } else { |
171 assertEquals(minimum_content[p], property_mirror.value().value(), 'propert
y ' + p + ' has unexpected value'); | 146 assertEquals(minimum_content[p], property_mirror.value().value(), |
| 147 'property ' + p + ' has unexpected value'); |
172 } | 148 } |
173 minimum_count++; | 149 minimum_count++; |
174 } | 150 } |
175 | 151 |
176 // 'arguments' and might be exposed in the local and closure scope. Just | 152 // 'arguments' and might be exposed in the local and closure scope. Just |
177 // ignore this. | 153 // ignore this. |
178 var scope_size = scope.scopeObject().properties().length; | 154 var scope_size = scope.scopeObject().properties().length; |
179 if (!scope.scopeObject().property('arguments').isUndefined()) { | 155 if (!scope.scopeObject().property('arguments').isUndefined()) { |
180 scope_size--; | 156 scope_size--; |
181 } | 157 } |
182 // Ditto for 'this'. | 158 // Ditto for 'this'. |
183 if (!scope.scopeObject().property('this').isUndefined()) { | 159 if (!scope.scopeObject().property('this').isUndefined()) { |
184 scope_size--; | 160 scope_size--; |
185 } | 161 } |
186 // Temporary variables introduced by the parser have not been materialized. | 162 // Temporary variables introduced by the parser have not been materialized. |
187 assertTrue(scope.scopeObject().property('').isUndefined()); | 163 assertTrue(scope.scopeObject().property('').isUndefined()); |
188 | 164 |
189 if (scope_size < minimum_count) { | 165 if (scope_size < minimum_count) { |
190 print('Names found in scope:'); | 166 print('Names found in scope:'); |
191 var names = scope.scopeObject().propertyNames(); | 167 var names = scope.scopeObject().propertyNames(); |
192 for (var i = 0; i < names.length; i++) { | 168 for (var i = 0; i < names.length; i++) { |
193 print(names[i]); | 169 print(names[i]); |
194 } | 170 } |
195 } | 171 } |
196 assertTrue(scope_size >= minimum_count); | 172 assertTrue(scope_size >= minimum_count); |
197 | |
198 // Get the debug command processor. | |
199 var dcp = exec_state.debugCommandProcessor("unspecified_running_state"); | |
200 | |
201 // Send a scope request for information on a single scope and check the | |
202 // result. | |
203 var request_json = '{"seq":0,"type":"request","command":"scope","arguments":{"
number":'; | |
204 request_json += scope.scopeIndex(); | |
205 request_json += '}}'; | |
206 var response_json = dcp.processDebugJSONRequest(request_json); | |
207 var response = JSON.parse(response_json); | |
208 assertEquals(scope.scopeType(), response.body.type); | |
209 assertEquals(number, response.body.index); | |
210 if (scope.scopeType() == debug.ScopeType.Local || | |
211 scope.scopeType() == debug.ScopeType.Script || | |
212 scope.scopeType() == debug.ScopeType.Closure) { | |
213 assertTrue(response.body.object.ref < 0); | |
214 } else { | |
215 assertTrue(response.body.object.ref >= 0); | |
216 } | |
217 var found = false; | |
218 for (var i = 0; i < response.refs.length && !found; i++) { | |
219 found = response.refs[i].handle == response.body.object.ref; | |
220 } | |
221 assertTrue(found, "Scope object " + response.body.object.ref + " not found"); | |
222 } | 173 } |
223 | 174 |
224 // Check that the scopes have positions as expected. | 175 // Check that the scopes have positions as expected. |
225 function CheckScopeChainPositions(positions, exec_state) { | 176 function CheckScopeChainPositions(positions, exec_state) { |
226 var all_scopes = exec_state.frame().allScopes(); | 177 var all_scopes = exec_state.frame().allScopes(); |
227 assertEquals(positions.length, all_scopes.length, "FrameMirror.allScopes lengt
h"); | 178 assertEquals(positions.length, all_scopes.length, "FrameMirror.allScopes lengt
h"); |
228 for (var i = 0; i < positions.length; i++) { | 179 for (var i = 0; i < positions.length; i++) { |
229 var scope = exec_state.frame().scope(i); | 180 var scope = exec_state.frame().scope(i); |
230 assertTrue(scope.isScope()); | 181 assertTrue(scope.isScope()); |
231 var position = positions[i]; | 182 var position = positions[i]; |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 } | 418 } |
468 | 419 |
469 listener_delegate = function(exec_state) { | 420 listener_delegate = function(exec_state) { |
470 CheckScopeChain([debug.ScopeType.With, | 421 CheckScopeChain([debug.ScopeType.With, |
471 debug.ScopeType.With, | 422 debug.ScopeType.With, |
472 debug.ScopeType.Local, | 423 debug.ScopeType.Local, |
473 debug.ScopeType.Script, | 424 debug.ScopeType.Script, |
474 debug.ScopeType.Global], exec_state); | 425 debug.ScopeType.Global], exec_state); |
475 CheckScopeContent(with_object, 0, exec_state); | 426 CheckScopeContent(with_object, 0, exec_state); |
476 CheckScopeContent(with_object, 1, exec_state); | 427 CheckScopeContent(with_object, 1, exec_state); |
477 assertEquals(exec_state.frame().scope(0).scopeObject(), exec_state.frame().sco
pe(1).scopeObject()); | 428 assertEquals(exec_state.frame().scope(0).scopeObject(), |
| 429 exec_state.frame().scope(1).scopeObject()); |
478 assertEquals(with_object, exec_state.frame().scope(1).scopeObject().value()); | 430 assertEquals(with_object, exec_state.frame().scope(1).scopeObject().value()); |
479 }; | 431 }; |
480 with_5(); | 432 with_5(); |
481 EndTest(); | 433 EndTest(); |
482 | 434 |
483 | 435 |
484 // Nested with blocks using existing object in global code. | 436 // Nested with blocks using existing object in global code. |
485 BeginTest("With 6"); | 437 BeginTest("With 6"); |
486 listener_delegate = function(exec_state) { | 438 listener_delegate = function(exec_state) { |
487 CheckScopeChain([debug.ScopeType.With, | 439 CheckScopeChain([debug.ScopeType.With, |
488 debug.ScopeType.With, | 440 debug.ScopeType.With, |
489 debug.ScopeType.Script, | 441 debug.ScopeType.Script, |
490 debug.ScopeType.Global], exec_state); | 442 debug.ScopeType.Global], exec_state); |
491 CheckScopeContent(with_object, 0, exec_state); | 443 CheckScopeContent(with_object, 0, exec_state); |
492 CheckScopeContent(with_object, 1, exec_state); | 444 CheckScopeContent(with_object, 1, exec_state); |
493 assertEquals(exec_state.frame().scope(0).scopeObject(), exec_state.frame().sco
pe(1).scopeObject()); | 445 assertEquals(exec_state.frame().scope(0).scopeObject(), |
| 446 exec_state.frame().scope(1).scopeObject()); |
494 assertEquals(with_object, exec_state.frame().scope(1).scopeObject().value()); | 447 assertEquals(with_object, exec_state.frame().scope(1).scopeObject().value()); |
495 }; | 448 }; |
496 | 449 |
497 var with_object = {c:3,d:4}; | 450 var with_object = {c:3,d:4}; |
498 with(with_object) { | 451 with(with_object) { |
499 with(with_object) { | 452 with(with_object) { |
500 debugger; | 453 debugger; |
501 } | 454 } |
502 } | 455 } |
503 EndTest(); | 456 EndTest(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 }; | 488 }; |
536 return f; | 489 return f; |
537 } | 490 } |
538 | 491 |
539 listener_delegate = function(exec_state) { | 492 listener_delegate = function(exec_state) { |
540 CheckScopeChain([debug.ScopeType.Local, | 493 CheckScopeChain([debug.ScopeType.Local, |
541 debug.ScopeType.Closure, | 494 debug.ScopeType.Closure, |
542 debug.ScopeType.Script, | 495 debug.ScopeType.Script, |
543 debug.ScopeType.Global], exec_state); | 496 debug.ScopeType.Global], exec_state); |
544 CheckScopeContent({a:1}, 1, exec_state); | 497 CheckScopeContent({a:1}, 1, exec_state); |
545 CheckScopeChainNames(["f", "closure_1", undefined, undefined], exec_state) | 498 CheckScopeChainNames(["f", "closure_1", undefined, undefined], exec_state); |
546 }; | 499 }; |
547 closure_1(1)(); | 500 closure_1(1)(); |
548 EndTest(); | 501 EndTest(); |
549 | 502 |
550 | 503 |
551 // Simple closure formed by returning an inner function referering the outer | 504 // Simple closure formed by returning an inner function referering the outer |
552 // functions arguments. Due to VM optimizations parts of the actual closure is | 505 // functions arguments. Due to VM optimizations parts of the actual closure is |
553 // missing from the debugger information. | 506 // missing from the debugger information. |
554 BeginTest("Closure 2"); | 507 BeginTest("Closure 2"); |
555 | 508 |
556 function closure_2(a, b) { | 509 function closure_2(a, b) { |
557 var x = a + 2; | 510 var x = a + 2; |
558 var y = b + 2; | 511 var y = b + 2; |
559 function f() { | 512 function f() { |
560 debugger; | 513 debugger; |
561 return a + x; | 514 return a + x; |
562 }; | 515 }; |
563 return f; | 516 return f; |
564 } | 517 } |
565 | 518 |
566 listener_delegate = function(exec_state) { | 519 listener_delegate = function(exec_state) { |
567 CheckScopeChain([debug.ScopeType.Local, | 520 CheckScopeChain([debug.ScopeType.Local, |
568 debug.ScopeType.Closure, | 521 debug.ScopeType.Closure, |
569 debug.ScopeType.Script, | 522 debug.ScopeType.Script, |
570 debug.ScopeType.Global], exec_state); | 523 debug.ScopeType.Global], exec_state); |
571 CheckScopeContent({a:1,x:3}, 1, exec_state); | 524 CheckScopeContent({a:1,x:3}, 1, exec_state); |
572 CheckScopeChainNames(["f", "closure_2", undefined, undefined], exec_state) | 525 CheckScopeChainNames(["f", "closure_2", undefined, undefined], exec_state); |
573 }; | 526 }; |
574 closure_2(1, 2)(); | 527 closure_2(1, 2)(); |
575 EndTest(); | 528 EndTest(); |
576 | 529 |
577 | 530 |
578 // Simple closure formed by returning an inner function referering the outer | 531 // Simple closure formed by returning an inner function referering the outer |
579 // functions arguments. Using all arguments and locals from the outer function | 532 // functions arguments. Using all arguments and locals from the outer function |
580 // in the inner function makes these part of the debugger information on the | 533 // in the inner function makes these part of the debugger information on the |
581 // closure. | 534 // closure. |
582 BeginTest("Closure 3"); | 535 BeginTest("Closure 3"); |
583 | 536 |
584 function closure_3(a, b) { | 537 function closure_3(a, b) { |
585 var x = a + 2; | 538 var x = a + 2; |
586 var y = b + 2; | 539 var y = b + 2; |
587 function f() { | 540 function f() { |
588 debugger; | 541 debugger; |
589 return a + b + x + y; | 542 return a + b + x + y; |
590 }; | 543 }; |
591 return f; | 544 return f; |
592 } | 545 } |
593 | 546 |
594 listener_delegate = function(exec_state) { | 547 listener_delegate = function(exec_state) { |
595 CheckScopeChain([debug.ScopeType.Local, | 548 CheckScopeChain([debug.ScopeType.Local, |
596 debug.ScopeType.Closure, | 549 debug.ScopeType.Closure, |
597 debug.ScopeType.Script, | 550 debug.ScopeType.Script, |
598 debug.ScopeType.Global], exec_state); | 551 debug.ScopeType.Global], exec_state); |
599 CheckScopeContent({a:1,b:2,x:3,y:4}, 1, exec_state); | 552 CheckScopeContent({a:1,b:2,x:3,y:4}, 1, exec_state); |
600 CheckScopeChainNames(["f", "closure_3", undefined, undefined], exec_state) | 553 CheckScopeChainNames(["f", "closure_3", undefined, undefined], exec_state); |
601 }; | 554 }; |
602 closure_3(1, 2)(); | 555 closure_3(1, 2)(); |
603 EndTest(); | 556 EndTest(); |
604 | 557 |
605 | 558 |
606 | 559 |
607 // Simple closure formed by returning an inner function referering the outer | 560 // Simple closure formed by returning an inner function referering the outer |
608 // functions arguments. Using all arguments and locals from the outer function | 561 // functions arguments. Using all arguments and locals from the outer function |
609 // in the inner function makes these part of the debugger information on the | 562 // in the inner function makes these part of the debugger information on the |
610 // closure. Use the inner function as well... | 563 // closure. Use the inner function as well... |
(...skipping 10 matching lines...) Expand all Loading... |
621 }; | 574 }; |
622 return f; | 575 return f; |
623 } | 576 } |
624 | 577 |
625 listener_delegate = function(exec_state) { | 578 listener_delegate = function(exec_state) { |
626 CheckScopeChain([debug.ScopeType.Local, | 579 CheckScopeChain([debug.ScopeType.Local, |
627 debug.ScopeType.Closure, | 580 debug.ScopeType.Closure, |
628 debug.ScopeType.Script, | 581 debug.ScopeType.Script, |
629 debug.ScopeType.Global], exec_state); | 582 debug.ScopeType.Global], exec_state); |
630 CheckScopeContent({a:1,b:2,x:3,y:4,f:function(){}}, 1, exec_state); | 583 CheckScopeContent({a:1,b:2,x:3,y:4,f:function(){}}, 1, exec_state); |
631 CheckScopeChainNames(["f", "closure_4", undefined, undefined], exec_state) | 584 CheckScopeChainNames(["f", "closure_4", undefined, undefined], exec_state); |
632 }; | 585 }; |
633 closure_4(1, 2)(); | 586 closure_4(1, 2)(); |
634 EndTest(); | 587 EndTest(); |
635 | 588 |
636 | 589 |
637 | 590 |
638 // Simple closure formed by returning an inner function referering the outer | 591 // Simple closure formed by returning an inner function referering the outer |
639 // functions arguments. In the presence of eval all arguments and locals | 592 // functions arguments. In the presence of eval all arguments and locals |
640 // (including the inner function itself) from the outer function becomes part of | 593 // (including the inner function itself) from the outer function becomes part of |
641 // the debugger infformation on the closure. | 594 // the debugger infformation on the closure. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 } | 636 } |
684 | 637 |
685 listener_delegate = function(exec_state) { | 638 listener_delegate = function(exec_state) { |
686 CheckScopeChain([debug.ScopeType.Local, | 639 CheckScopeChain([debug.ScopeType.Local, |
687 debug.ScopeType.Closure, | 640 debug.ScopeType.Closure, |
688 debug.ScopeType.Closure, | 641 debug.ScopeType.Closure, |
689 debug.ScopeType.Script, | 642 debug.ScopeType.Script, |
690 debug.ScopeType.Global], exec_state); | 643 debug.ScopeType.Global], exec_state); |
691 CheckScopeContent({a:1}, 1, exec_state); | 644 CheckScopeContent({a:1}, 1, exec_state); |
692 CheckScopeContent({f:function(){}}, 2, exec_state); | 645 CheckScopeContent({f:function(){}}, 2, exec_state); |
693 CheckScopeChainNames([undefined, "f", "closure_6", undefined, undefined], exec
_state) | 646 CheckScopeChainNames([undefined, "f", "closure_6", undefined, undefined], |
| 647 exec_state); |
694 }; | 648 }; |
695 closure_6(1, 2)(); | 649 closure_6(1, 2)(); |
696 EndTest(); | 650 EndTest(); |
697 | 651 |
698 | 652 |
699 // Two closures. In the presence of eval all information is provided as the | 653 // Two closures. In the presence of eval all information is provided as the |
700 // compiler cannot determine which parts are used. | 654 // compiler cannot determine which parts are used. |
701 BeginTest("Closure 7"); | 655 BeginTest("Closure 7"); |
702 function closure_7(a, b) { | 656 function closure_7(a, b) { |
703 var x = 3; | 657 var x = 3; |
(...skipping 16 matching lines...) Expand all Loading... |
720 | 674 |
721 listener_delegate = function(exec_state) { | 675 listener_delegate = function(exec_state) { |
722 CheckScopeChain([debug.ScopeType.Local, | 676 CheckScopeChain([debug.ScopeType.Local, |
723 debug.ScopeType.Closure, | 677 debug.ScopeType.Closure, |
724 debug.ScopeType.Closure, | 678 debug.ScopeType.Closure, |
725 debug.ScopeType.Script, | 679 debug.ScopeType.Script, |
726 debug.ScopeType.Global], exec_state); | 680 debug.ScopeType.Global], exec_state); |
727 CheckScopeContent({}, 0, exec_state); | 681 CheckScopeContent({}, 0, exec_state); |
728 CheckScopeContent({a:1,b:2,x:3,y:4,i:5,j:6}, 1, exec_state); | 682 CheckScopeContent({a:1,b:2,x:3,y:4,i:5,j:6}, 1, exec_state); |
729 CheckScopeContent({a:1,b:2,x:3,y:4,i:5,j:6,f:function(){}}, 2, exec_state); | 683 CheckScopeContent({a:1,b:2,x:3,y:4,i:5,j:6,f:function(){}}, 2, exec_state); |
730 CheckScopeChainNames([undefined, "f", "closure_7", undefined, undefined], exec
_state) | 684 CheckScopeChainNames([undefined, "f", "closure_7", undefined, undefined], |
| 685 exec_state); |
731 }; | 686 }; |
732 closure_7(1, 2)(); | 687 closure_7(1, 2)(); |
733 EndTest(); | 688 EndTest(); |
734 | 689 |
735 | 690 |
736 // Closure that may be optimized out. | 691 // Closure that may be optimized out. |
737 BeginTest("Closure 8"); | 692 BeginTest("Closure 8"); |
738 function closure_8() { | 693 function closure_8() { |
739 (function inner(x) { | 694 (function inner(x) { |
740 debugger; | 695 debugger; |
741 })(2); | 696 })(2); |
742 } | 697 } |
743 | 698 |
744 listener_delegate = function(exec_state) { | 699 listener_delegate = function(exec_state) { |
745 CheckScopeChain([debug.ScopeType.Local, | 700 CheckScopeChain([debug.ScopeType.Local, |
746 debug.ScopeType.Script, | 701 debug.ScopeType.Script, |
747 debug.ScopeType.Global], exec_state); | 702 debug.ScopeType.Global], exec_state); |
748 CheckScopeContent({x: 2}, 0, exec_state); | 703 CheckScopeContent({x: 2}, 0, exec_state); |
749 CheckScopeChainNames(["inner", undefined, undefined], exec_state) | 704 CheckScopeChainNames(["inner", undefined, undefined], exec_state); |
750 }; | 705 }; |
751 closure_8(); | 706 closure_8(); |
752 EndTest(); | 707 EndTest(); |
753 | 708 |
754 | 709 |
755 BeginTest("Closure 9"); | 710 BeginTest("Closure 9"); |
756 function closure_9() { | 711 function closure_9() { |
757 eval("var y = 1;"); | 712 eval("var y = 1;"); |
758 eval("var z = 1;"); | 713 eval("var z = 1;"); |
759 (function inner(x) { | 714 (function inner(x) { |
760 y++; | 715 y++; |
761 z++; | 716 z++; |
762 debugger; | 717 debugger; |
763 })(2); | 718 })(2); |
764 } | 719 } |
765 | 720 |
766 listener_delegate = function(exec_state) { | 721 listener_delegate = function(exec_state) { |
767 CheckScopeChain([debug.ScopeType.Local, | 722 CheckScopeChain([debug.ScopeType.Local, |
768 debug.ScopeType.Closure, | 723 debug.ScopeType.Closure, |
769 debug.ScopeType.Script, | 724 debug.ScopeType.Script, |
770 debug.ScopeType.Global], exec_state); | 725 debug.ScopeType.Global], exec_state); |
771 CheckScopeChainNames(["inner", "closure_9", undefined, undefined], exec_state) | 726 CheckScopeChainNames(["inner", "closure_9", undefined, undefined], |
| 727 exec_state); |
772 }; | 728 }; |
773 closure_9(); | 729 closure_9(); |
774 EndTest(); | 730 EndTest(); |
775 | 731 |
776 | 732 |
777 // Test a mixture of scopes. | 733 // Test a mixture of scopes. |
778 BeginTest("The full monty"); | 734 BeginTest("The full monty"); |
779 function the_full_monty(a, b) { | 735 function the_full_monty(a, b) { |
780 var x = 3; | 736 var x = 3; |
781 var y = 4; | 737 var y = 4; |
(...skipping 28 matching lines...) Expand all Loading... |
810 debug.ScopeType.Closure, | 766 debug.ScopeType.Closure, |
811 debug.ScopeType.Closure, | 767 debug.ScopeType.Closure, |
812 debug.ScopeType.Script, | 768 debug.ScopeType.Script, |
813 debug.ScopeType.Global], exec_state); | 769 debug.ScopeType.Global], exec_state); |
814 CheckScopeContent({b:16}, 0, exec_state); | 770 CheckScopeContent({b:16}, 0, exec_state); |
815 CheckScopeContent({a:15}, 1, exec_state); | 771 CheckScopeContent({a:15}, 1, exec_state); |
816 CheckScopeContent({x:14}, 2, exec_state); | 772 CheckScopeContent({x:14}, 2, exec_state); |
817 CheckScopeContent({j:13}, 3, exec_state); | 773 CheckScopeContent({j:13}, 3, exec_state); |
818 CheckScopeContent({a:1,b:2,x:9,y:10,i:11,j:12}, 4, exec_state); | 774 CheckScopeContent({a:1,b:2,x:9,y:10,i:11,j:12}, 4, exec_state); |
819 CheckScopeContent({a:1,b:2,x:3,y:4,i:5,j:6,f:function(){}}, 5, exec_state); | 775 CheckScopeContent({a:1,b:2,x:3,y:4,i:5,j:6,f:function(){}}, 5, exec_state); |
820 CheckScopeChainNames([undefined, undefined, undefined, "f", "f", "the_full_mon
ty", undefined, undefined], exec_state) | 776 CheckScopeChainNames([undefined, undefined, undefined, "f", "f", |
| 777 "the_full_monty", undefined, undefined], exec_state); |
821 }; | 778 }; |
822 the_full_monty(1, 2)(); | 779 the_full_monty(1, 2)(); |
823 EndTest(); | 780 EndTest(); |
824 | 781 |
825 | 782 |
826 BeginTest("Closure inside With 1"); | 783 BeginTest("Closure inside With 1"); |
827 function closure_in_with_1() { | 784 function closure_in_with_1() { |
828 with({x:1}) { | 785 with({x:1}) { |
829 (function inner(x) { | 786 (function inner(x) { |
830 debugger; | 787 debugger; |
(...skipping 26 matching lines...) Expand all Loading... |
857 | 814 |
858 listener_delegate = function(exec_state) { | 815 listener_delegate = function(exec_state) { |
859 CheckScopeChain([debug.ScopeType.With, | 816 CheckScopeChain([debug.ScopeType.With, |
860 debug.ScopeType.Local, | 817 debug.ScopeType.Local, |
861 debug.ScopeType.With, | 818 debug.ScopeType.With, |
862 debug.ScopeType.Script, | 819 debug.ScopeType.Script, |
863 debug.ScopeType.Global], exec_state); | 820 debug.ScopeType.Global], exec_state); |
864 CheckScopeContent({x: 3}, 0, exec_state); | 821 CheckScopeContent({x: 3}, 0, exec_state); |
865 CheckScopeContent({x: 2}, 1, exec_state); | 822 CheckScopeContent({x: 2}, 1, exec_state); |
866 CheckScopeContent({x: 1}, 2, exec_state); | 823 CheckScopeContent({x: 1}, 2, exec_state); |
867 CheckScopeChainNames(["inner", "inner", "closure_in_with_2", undefined, undefi
ned], exec_state) | 824 CheckScopeChainNames(["inner", "inner", "closure_in_with_2", |
| 825 undefined, undefined], exec_state); |
868 }; | 826 }; |
869 closure_in_with_2(); | 827 closure_in_with_2(); |
870 EndTest(); | 828 EndTest(); |
871 | 829 |
872 | 830 |
873 BeginTest("Closure inside With 3"); | 831 BeginTest("Closure inside With 3"); |
874 function createClosure(a) { | 832 function createClosure(a) { |
875 var b = a + 1; | 833 var b = a + 1; |
876 return function closure() { | 834 return function closure() { |
877 var c = b; | 835 var c = b; |
(...skipping 10 matching lines...) Expand all Loading... |
888 f(); | 846 f(); |
889 } | 847 } |
890 | 848 |
891 listener_delegate = function(exec_state) { | 849 listener_delegate = function(exec_state) { |
892 CheckScopeChain([debug.ScopeType.With, | 850 CheckScopeChain([debug.ScopeType.With, |
893 debug.ScopeType.Local, | 851 debug.ScopeType.Local, |
894 debug.ScopeType.Closure, | 852 debug.ScopeType.Closure, |
895 debug.ScopeType.Closure, | 853 debug.ScopeType.Closure, |
896 debug.ScopeType.Script, | 854 debug.ScopeType.Script, |
897 debug.ScopeType.Global], exec_state); | 855 debug.ScopeType.Global], exec_state); |
898 CheckScopeChainNames(["inner", "inner", "closure", "createClosure", undefined,
undefined], exec_state) | 856 CheckScopeChainNames(["inner", "inner", "closure", "createClosure", |
| 857 undefined, undefined], exec_state); |
899 } | 858 } |
900 closure_in_with_3(); | 859 closure_in_with_3(); |
901 EndTest(); | 860 EndTest(); |
902 | 861 |
903 | 862 |
904 BeginTest("Closure inside With 4"); | 863 BeginTest("Closure inside With 4"); |
905 listener_delegate = function(exec_state) { | 864 listener_delegate = function(exec_state) { |
906 CheckScopeChain([debug.ScopeType.Local, | 865 CheckScopeChain([debug.ScopeType.Local, |
907 debug.ScopeType.With, | 866 debug.ScopeType.With, |
908 debug.ScopeType.Script, | 867 debug.ScopeType.Script, |
909 debug.ScopeType.Global], exec_state); | 868 debug.ScopeType.Global], exec_state); |
910 CheckScopeContent({x: 2}, 0, exec_state); | 869 CheckScopeContent({x: 2}, 0, exec_state); |
911 CheckScopeContent({x: 1}, 1, exec_state); | 870 CheckScopeContent({x: 1}, 1, exec_state); |
912 CheckScopeChainNames([undefined, undefined, undefined, undefined], exec_state) | 871 CheckScopeChainNames([undefined, undefined, undefined, undefined], |
| 872 exec_state); |
913 }; | 873 }; |
914 | 874 |
915 with({x:1}) { | 875 with({x:1}) { |
916 (function(x) { | 876 (function(x) { |
917 debugger; | 877 debugger; |
918 })(2); | 878 })(2); |
919 } | 879 } |
920 EndTest(); | 880 EndTest(); |
921 | 881 |
922 | 882 |
923 // Test global scope. | 883 // Test global scope. |
924 BeginTest("Global"); | 884 BeginTest("Global"); |
925 listener_delegate = function(exec_state) { | 885 listener_delegate = function(exec_state) { |
926 CheckScopeChain([debug.ScopeType.Script, debug.ScopeType.Global], exec_state); | 886 CheckScopeChain([debug.ScopeType.Script, debug.ScopeType.Global], |
927 CheckScopeChainNames([undefined, undefined], exec_state) | 887 exec_state); |
| 888 CheckScopeChainNames([undefined, undefined], exec_state); |
928 }; | 889 }; |
929 debugger; | 890 debugger; |
930 EndTest(); | 891 EndTest(); |
931 | 892 |
932 | 893 |
933 BeginTest("Catch block 1"); | 894 BeginTest("Catch block 1"); |
934 function catch_block_1() { | 895 function catch_block_1() { |
935 try { | 896 try { |
936 throw 'Exception'; | 897 throw 'Exception'; |
937 } catch (e) { | 898 } catch (e) { |
938 debugger; | 899 debugger; |
939 } | 900 } |
940 }; | 901 }; |
941 | 902 |
942 | 903 |
943 listener_delegate = function(exec_state) { | 904 listener_delegate = function(exec_state) { |
944 CheckScopeChain([debug.ScopeType.Catch, | 905 CheckScopeChain([debug.ScopeType.Catch, |
945 debug.ScopeType.Local, | 906 debug.ScopeType.Local, |
946 debug.ScopeType.Script, | 907 debug.ScopeType.Script, |
947 debug.ScopeType.Global], exec_state); | 908 debug.ScopeType.Global], exec_state); |
948 CheckScopeContent({e:'Exception'}, 0, exec_state); | 909 CheckScopeContent({e:'Exception'}, 0, exec_state); |
949 CheckScopeChainNames(["catch_block_1", "catch_block_1", undefined, undefined],
exec_state) | 910 CheckScopeChainNames(["catch_block_1", "catch_block_1", |
| 911 undefined, undefined], exec_state); |
950 }; | 912 }; |
951 catch_block_1(); | 913 catch_block_1(); |
952 EndTest(); | 914 EndTest(); |
953 | 915 |
954 | 916 |
955 BeginTest("Catch block 2"); | 917 BeginTest("Catch block 2"); |
956 function catch_block_2() { | 918 function catch_block_2() { |
957 try { | 919 try { |
958 throw 'Exception'; | 920 throw 'Exception'; |
959 } catch (e) { | 921 } catch (e) { |
960 with({n:10}) { | 922 with({n:10}) { |
961 debugger; | 923 debugger; |
962 } | 924 } |
963 } | 925 } |
964 }; | 926 }; |
965 | 927 |
966 | 928 |
967 listener_delegate = function(exec_state) { | 929 listener_delegate = function(exec_state) { |
968 CheckScopeChain([debug.ScopeType.With, | 930 CheckScopeChain([debug.ScopeType.With, |
969 debug.ScopeType.Catch, | 931 debug.ScopeType.Catch, |
970 debug.ScopeType.Local, | 932 debug.ScopeType.Local, |
971 debug.ScopeType.Script, | 933 debug.ScopeType.Script, |
972 debug.ScopeType.Global], exec_state); | 934 debug.ScopeType.Global], exec_state); |
973 CheckScopeContent({n:10}, 0, exec_state); | 935 CheckScopeContent({n:10}, 0, exec_state); |
974 CheckScopeContent({e:'Exception'}, 1, exec_state); | 936 CheckScopeContent({e:'Exception'}, 1, exec_state); |
975 CheckScopeChainNames(["catch_block_2", "catch_block_2", "catch_block_2", undef
ined, undefined], exec_state) | 937 CheckScopeChainNames(["catch_block_2", "catch_block_2", "catch_block_2", |
| 938 undefined, undefined], exec_state); |
976 }; | 939 }; |
977 catch_block_2(); | 940 catch_block_2(); |
978 EndTest(); | 941 EndTest(); |
979 | 942 |
980 | 943 |
981 BeginTest("Catch block 3"); | 944 BeginTest("Catch block 3"); |
982 function catch_block_3() { | 945 function catch_block_3() { |
983 // Do eval to dynamically declare a local variable so that the context's | 946 // Do eval to dynamically declare a local variable so that the context's |
984 // extension slot is initialized with JSContextExtensionObject. | 947 // extension slot is initialized with JSContextExtensionObject. |
985 eval("var y = 78;"); | 948 eval("var y = 78;"); |
986 try { | 949 try { |
987 throw 'Exception'; | 950 throw 'Exception'; |
988 } catch (e) { | 951 } catch (e) { |
989 debugger; | 952 debugger; |
990 } | 953 } |
991 }; | 954 }; |
992 | 955 |
993 | 956 |
994 listener_delegate = function(exec_state) { | 957 listener_delegate = function(exec_state) { |
995 CheckScopeChain([debug.ScopeType.Catch, | 958 CheckScopeChain([debug.ScopeType.Catch, |
996 debug.ScopeType.Local, | 959 debug.ScopeType.Local, |
997 debug.ScopeType.Script, | 960 debug.ScopeType.Script, |
998 debug.ScopeType.Global], exec_state); | 961 debug.ScopeType.Global], exec_state); |
999 CheckScopeContent({e:'Exception'}, 0, exec_state); | 962 CheckScopeContent({e:'Exception'}, 0, exec_state); |
1000 CheckScopeContent({y:78}, 1, exec_state); | 963 CheckScopeContent({y:78}, 1, exec_state); |
1001 CheckScopeChainNames(["catch_block_3", "catch_block_3", undefined, undefined],
exec_state) | 964 CheckScopeChainNames(["catch_block_3", "catch_block_3", |
| 965 undefined, undefined], exec_state); |
1002 }; | 966 }; |
1003 catch_block_3(); | 967 catch_block_3(); |
1004 EndTest(); | 968 EndTest(); |
1005 | 969 |
1006 | 970 |
1007 BeginTest("Catch block 4"); | 971 BeginTest("Catch block 4"); |
1008 function catch_block_4() { | 972 function catch_block_4() { |
1009 // Do eval to dynamically declare a local variable so that the context's | 973 // Do eval to dynamically declare a local variable so that the context's |
1010 // extension slot is initialized with JSContextExtensionObject. | 974 // extension slot is initialized with JSContextExtensionObject. |
1011 eval("var y = 98;"); | 975 eval("var y = 98;"); |
1012 try { | 976 try { |
1013 throw 'Exception'; | 977 throw 'Exception'; |
1014 } catch (e) { | 978 } catch (e) { |
1015 with({n:10}) { | 979 with({n:10}) { |
1016 debugger; | 980 debugger; |
1017 } | 981 } |
1018 } | 982 } |
1019 }; | 983 }; |
1020 | 984 |
1021 listener_delegate = function(exec_state) { | 985 listener_delegate = function(exec_state) { |
1022 CheckScopeChain([debug.ScopeType.With, | 986 CheckScopeChain([debug.ScopeType.With, |
1023 debug.ScopeType.Catch, | 987 debug.ScopeType.Catch, |
1024 debug.ScopeType.Local, | 988 debug.ScopeType.Local, |
1025 debug.ScopeType.Script, | 989 debug.ScopeType.Script, |
1026 debug.ScopeType.Global], exec_state); | 990 debug.ScopeType.Global], exec_state); |
1027 CheckScopeContent({n:10}, 0, exec_state); | 991 CheckScopeContent({n:10}, 0, exec_state); |
1028 CheckScopeContent({e:'Exception'}, 1, exec_state); | 992 CheckScopeContent({e:'Exception'}, 1, exec_state); |
1029 CheckScopeContent({y:98}, 2, exec_state); | 993 CheckScopeContent({y:98}, 2, exec_state); |
1030 CheckScopeChainNames(["catch_block_4", "catch_block_4", "catch_block_4", undef
ined, undefined], exec_state) | 994 CheckScopeChainNames(["catch_block_4", "catch_block_4", "catch_block_4", |
| 995 undefined, undefined], exec_state); |
1031 }; | 996 }; |
1032 catch_block_4(); | 997 catch_block_4(); |
1033 EndTest(); | 998 EndTest(); |
1034 | 999 |
1035 | 1000 |
1036 // Test catch in global scope. | 1001 // Test catch in global scope. |
1037 BeginTest("Catch block 5"); | 1002 BeginTest("Catch block 5"); |
1038 listener_delegate = function(exec_state) { | 1003 listener_delegate = function(exec_state) { |
1039 CheckScopeChain([debug.ScopeType.Catch, | 1004 CheckScopeChain([debug.ScopeType.Catch, |
1040 debug.ScopeType.Script, | 1005 debug.ScopeType.Script, |
1041 debug.ScopeType.Global], exec_state); | 1006 debug.ScopeType.Global], exec_state); |
1042 CheckScopeContent({e:'Exception'}, 0, exec_state); | 1007 CheckScopeContent({e:'Exception'}, 0, exec_state); |
1043 CheckScopeChainNames([undefined, undefined, undefined], exec_state) | 1008 CheckScopeChainNames([undefined, undefined, undefined], exec_state); |
1044 }; | 1009 }; |
1045 | 1010 |
1046 try { | 1011 try { |
1047 throw 'Exception'; | 1012 throw 'Exception'; |
1048 } catch (e) { | 1013 } catch (e) { |
1049 debugger; | 1014 debugger; |
1050 } | 1015 } |
1051 | 1016 |
1052 EndTest(); | 1017 EndTest(); |
1053 | 1018 |
1054 | 1019 |
1055 // Closure inside catch in global code. | 1020 // Closure inside catch in global code. |
1056 BeginTest("Catch block 6"); | 1021 BeginTest("Catch block 6"); |
1057 listener_delegate = function(exec_state) { | 1022 listener_delegate = function(exec_state) { |
1058 CheckScopeChain([debug.ScopeType.Local, | 1023 CheckScopeChain([debug.ScopeType.Local, |
1059 debug.ScopeType.Catch, | 1024 debug.ScopeType.Catch, |
1060 debug.ScopeType.Script, | 1025 debug.ScopeType.Script, |
1061 debug.ScopeType.Global], exec_state); | 1026 debug.ScopeType.Global], exec_state); |
1062 CheckScopeContent({x: 2}, 0, exec_state); | 1027 CheckScopeContent({x: 2}, 0, exec_state); |
1063 CheckScopeContent({e:'Exception'}, 1, exec_state); | 1028 CheckScopeContent({e:'Exception'}, 1, exec_state); |
1064 CheckScopeChainNames([undefined, undefined, undefined, undefined], exec_state) | 1029 CheckScopeChainNames([undefined, undefined, undefined, undefined], |
| 1030 exec_state); |
1065 }; | 1031 }; |
1066 | 1032 |
1067 try { | 1033 try { |
1068 throw 'Exception'; | 1034 throw 'Exception'; |
1069 } catch (e) { | 1035 } catch (e) { |
1070 (function(x) { | 1036 (function(x) { |
1071 debugger; | 1037 debugger; |
1072 })(2); | 1038 })(2); |
1073 } | 1039 } |
1074 EndTest(); | 1040 EndTest(); |
(...skipping 10 matching lines...) Expand all Loading... |
1085 } | 1051 } |
1086 }; | 1052 }; |
1087 | 1053 |
1088 | 1054 |
1089 listener_delegate = function(exec_state) { | 1055 listener_delegate = function(exec_state) { |
1090 CheckScopeChain([debug.ScopeType.Catch, | 1056 CheckScopeChain([debug.ScopeType.Catch, |
1091 debug.ScopeType.Local, | 1057 debug.ScopeType.Local, |
1092 debug.ScopeType.Script, | 1058 debug.ScopeType.Script, |
1093 debug.ScopeType.Global], exec_state); | 1059 debug.ScopeType.Global], exec_state); |
1094 CheckScopeContent({e:'Exception'}, 0, exec_state); | 1060 CheckScopeContent({e:'Exception'}, 0, exec_state); |
1095 CheckScopeChainNames(["catch_block_7", "catch_block_7", undefined, undefined],
exec_state) | 1061 CheckScopeChainNames(["catch_block_7", "catch_block_7", |
| 1062 undefined, undefined], exec_state); |
1096 }; | 1063 }; |
1097 catch_block_7(); | 1064 catch_block_7(); |
1098 EndTest(); | 1065 EndTest(); |
1099 | 1066 |
1100 | 1067 |
1101 BeginTest("Classes and methods 1"); | 1068 BeginTest("Classes and methods 1"); |
1102 | 1069 |
1103 listener_delegate = function(exec_state) { | 1070 listener_delegate = function(exec_state) { |
1104 "use strict" | 1071 "use strict" |
1105 CheckScopeChain([debug.ScopeType.Local, | 1072 CheckScopeChain([debug.ScopeType.Local, |
1106 debug.ScopeType.Script, | 1073 debug.ScopeType.Script, |
1107 debug.ScopeType.Global], exec_state); | 1074 debug.ScopeType.Global], exec_state); |
1108 CheckScopeContent({}, 1, exec_state); | 1075 CheckScopeContent({}, 1, exec_state); |
1109 CheckScopeChainNames(["m", undefined, undefined], exec_state) | 1076 CheckScopeChainNames(["m", undefined, undefined], exec_state); |
1110 }; | 1077 }; |
1111 | 1078 |
1112 (function() { | 1079 (function() { |
1113 "use strict"; | 1080 "use strict"; |
1114 class C1 { | 1081 class C1 { |
1115 m() { | 1082 m() { |
1116 debugger; | 1083 debugger; |
1117 } | 1084 } |
1118 } | 1085 } |
1119 new C1().m(); | 1086 new C1().m(); |
1120 })(); | 1087 })(); |
1121 | 1088 |
1122 EndTest(); | 1089 EndTest(); |
1123 | 1090 |
1124 BeginTest("Scope positions"); | 1091 BeginTest("Scope positions"); |
1125 var code1 = "function f() { \n" + | 1092 var code1 = "function f() { \n" + |
1126 " var a = 1; \n" + | 1093 " var a = 1; \n" + |
1127 " function b() { \n" + | 1094 " function b() { \n" + |
1128 " debugger; \n" + | 1095 " debugger; \n" + |
1129 " return a + 1; \n" + | 1096 " return a + 1; \n" + |
1130 " } \n" + | 1097 " } \n" + |
1131 " b(); \n" + | 1098 " b(); \n" + |
1132 "} \n" + | 1099 "} \n" + |
1133 "f(); \n"; | 1100 "f(); \n"; |
1134 | 1101 |
1135 listener_delegate = function(exec_state) { | 1102 listener_delegate = function(exec_state) { |
1136 CheckScopeChainPositions([{start: 58, end: 118}, {start: 10, end: 162}, {}, {}
], exec_state); | 1103 CheckScopeChainPositions( |
| 1104 [{start: 58, end: 118}, {start: 10, end: 162}, {}, {}], exec_state); |
1137 } | 1105 } |
1138 eval(code1); | 1106 eval(code1); |
1139 EndTest(); | 1107 EndTest(); |
1140 | 1108 |
1141 | 1109 |
1142 function catch_block_2() { | 1110 function catch_block_2() { |
1143 try { | 1111 try { |
1144 throw 'Exception'; | 1112 throw 'Exception'; |
1145 } catch (e) { | 1113 } catch (e) { |
1146 with({n:10}) { | 1114 with({n:10}) { |
1147 debugger; | 1115 debugger; |
1148 } | 1116 } |
1149 } | 1117 } |
1150 }; | 1118 }; |
1151 | 1119 |
1152 BeginTest("Scope positions in catch and 'with' statement"); | 1120 BeginTest("Scope positions in catch and 'with' statement"); |
1153 var code2 = "function catch_block() { \n" + | 1121 var code2 = "function catch_block() { \n" + |
1154 " try { \n" + | 1122 " try { \n" + |
1155 " throw 'Exception'; \n" + | 1123 " throw 'Exception'; \n" + |
1156 " } catch (e) { \n" + | 1124 " } catch (e) { \n" + |
1157 " with({n : 10}) { \n" + | 1125 " with({n : 10}) { \n" + |
1158 " debugger; \n" + | 1126 " debugger; \n" + |
1159 " } \n" + | 1127 " } \n" + |
1160 " } \n" + | 1128 " } \n" + |
1161 "} \n" + | 1129 "} \n" + |
1162 "catch_block(); \n"; | 1130 "catch_block(); \n"; |
1163 | 1131 |
1164 listener_delegate = function(exec_state) { | 1132 listener_delegate = function(exec_state) { |
1165 CheckScopeChainPositions([{start: 131, end: 173}, {start: 94, end: 199}, {star
t: 20, end: 225}, {}, {}], exec_state); | 1133 CheckScopeChainPositions([{start: 131, end: 173}, |
| 1134 {start: 94, end: 199}, |
| 1135 {start: 20, end: 225}, |
| 1136 {}, {}], exec_state); |
1166 } | 1137 } |
1167 eval(code2); | 1138 eval(code2); |
1168 EndTest(); | 1139 EndTest(); |
1169 | 1140 |
1170 BeginTest("Scope positions in for statement"); | 1141 BeginTest("Scope positions in for statement"); |
1171 var code3 = "function for_statement() { \n" + | 1142 var code3 = "function for_statement() { \n" + |
1172 " for (let i = 0; i < 1; i++) { \n" + | 1143 " for (let i = 0; i < 1; i++) { \n" + |
1173 " debugger; \n" + | 1144 " debugger; \n" + |
1174 " } \n" + | 1145 " } \n" + |
1175 "} \n" + | 1146 "} \n" + |
1176 "for_statement(); \n"; | 1147 "for_statement(); \n"; |
1177 | 1148 |
1178 listener_delegate = function(exec_state) { | 1149 listener_delegate = function(exec_state) { |
1179 CheckScopeChain([debug.ScopeType.Block, | 1150 CheckScopeChain([debug.ScopeType.Block, |
1180 debug.ScopeType.Local, | 1151 debug.ScopeType.Local, |
1181 debug.ScopeType.Script, | 1152 debug.ScopeType.Script, |
1182 debug.ScopeType.Global], exec_state); | 1153 debug.ScopeType.Global], exec_state); |
1183 CheckScopeChainPositions([{start: 52, end: 111}, {start: 22, end: 145}, {}, {}
], exec_state); | 1154 CheckScopeChainPositions( |
| 1155 [{start: 52, end: 111}, {start: 22, end: 145}, {}, {}], exec_state); |
1184 } | 1156 } |
1185 eval(code3); | 1157 eval(code3); |
1186 EndTest(); | 1158 EndTest(); |
1187 | 1159 |
1188 BeginTest("Scope positions in for statement with lexical block"); | 1160 BeginTest("Scope positions in for statement with lexical block"); |
1189 var code4 = "function for_statement() { \n" + | 1161 var code4 = "function for_statement() { \n" + |
1190 " for (let i = 0; i < 1; i++) { \n" + | 1162 " for (let i = 0; i < 1; i++) { \n" + |
1191 " let j; \n" + | 1163 " let j; \n" + |
1192 " debugger; \n" + | 1164 " debugger; \n" + |
1193 " } \n" + | 1165 " } \n" + |
1194 "} \n" + | 1166 "} \n" + |
1195 "for_statement(); \n"; | 1167 "for_statement(); \n"; |
1196 | 1168 |
1197 listener_delegate = function(exec_state) { | 1169 listener_delegate = function(exec_state) { |
1198 CheckScopeChain([debug.ScopeType.Block, | 1170 CheckScopeChain([debug.ScopeType.Block, |
1199 debug.ScopeType.Block, | 1171 debug.ScopeType.Block, |
1200 debug.ScopeType.Local, | 1172 debug.ScopeType.Local, |
1201 debug.ScopeType.Script, | 1173 debug.ScopeType.Script, |
1202 debug.ScopeType.Global], exec_state); | 1174 debug.ScopeType.Global], exec_state); |
1203 CheckScopeChainPositions([{start: 66, end: 147}, {start: 52, end: 147}, {start
: 22, end: 181}, {}, {}], exec_state); | 1175 CheckScopeChainPositions([{start: 66, end: 147}, |
| 1176 {start: 52, end: 147}, |
| 1177 {start: 22, end: 181}, |
| 1178 {}, {}], exec_state); |
1204 } | 1179 } |
1205 eval(code4); | 1180 eval(code4); |
1206 EndTest(); | 1181 EndTest(); |
1207 | 1182 |
1208 BeginTest("Scope positions in lexical for each statement"); | 1183 BeginTest("Scope positions in lexical for each statement"); |
1209 var code5 = "function for_each_statement() { \n" + | 1184 var code5 = "function for_each_statement() { \n" + |
1210 " for (let i of [0]) { \n" + | 1185 " for (let i of [0]) { \n" + |
1211 " debugger; \n" + | 1186 " debugger; \n" + |
1212 " } \n" + | 1187 " } \n" + |
1213 "} \n" + | 1188 "} \n" + |
1214 "for_each_statement(); \n"; | 1189 "for_each_statement(); \n"; |
1215 | 1190 |
1216 listener_delegate = function(exec_state) { | 1191 listener_delegate = function(exec_state) { |
1217 CheckScopeChain([debug.ScopeType.Block, | 1192 CheckScopeChain([debug.ScopeType.Block, |
1218 debug.ScopeType.Local, | 1193 debug.ScopeType.Local, |
1219 debug.ScopeType.Script, | 1194 debug.ScopeType.Script, |
1220 debug.ScopeType.Global], exec_state); | 1195 debug.ScopeType.Global], exec_state); |
1221 CheckScopeChainPositions([{start: 55, end: 111}, {start: 27, end: 145}, {}, {}
], exec_state); | 1196 CheckScopeChainPositions( |
| 1197 [{start: 55, end: 111}, {start: 27, end: 145}, {}, {}], exec_state); |
1222 } | 1198 } |
1223 eval(code5); | 1199 eval(code5); |
1224 EndTest(); | 1200 EndTest(); |
1225 | 1201 |
1226 BeginTest("Scope positions in lexical for each statement with lexical block"); | 1202 BeginTest("Scope positions in lexical for each statement with lexical block"); |
1227 var code6 = "function for_each_statement() { \n" + | 1203 var code6 = "function for_each_statement() { \n" + |
1228 " for (let i of [0]) { \n" + | 1204 " for (let i of [0]) { \n" + |
1229 " let j; \n" + | 1205 " let j; \n" + |
1230 " debugger; \n" + | 1206 " debugger; \n" + |
1231 " } \n" + | 1207 " } \n" + |
1232 "} \n" + | 1208 "} \n" + |
1233 "for_each_statement(); \n"; | 1209 "for_each_statement(); \n"; |
1234 | 1210 |
1235 listener_delegate = function(exec_state) { | 1211 listener_delegate = function(exec_state) { |
1236 CheckScopeChain([debug.ScopeType.Block, | 1212 CheckScopeChain([debug.ScopeType.Block, |
1237 debug.ScopeType.Block, | 1213 debug.ScopeType.Block, |
1238 debug.ScopeType.Local, | 1214 debug.ScopeType.Local, |
1239 debug.ScopeType.Script, | 1215 debug.ScopeType.Script, |
1240 debug.ScopeType.Global], exec_state); | 1216 debug.ScopeType.Global], exec_state); |
1241 CheckScopeChainPositions([{start: 57, end: 147}, {start: 55, end: 147}, {start
: 27, end: 181}, {}, {}], exec_state); | 1217 CheckScopeChainPositions([{start: 57, end: 147}, |
| 1218 {start: 55, end: 147}, |
| 1219 {start: 27, end: 181}, |
| 1220 {}, {}], exec_state); |
1242 } | 1221 } |
1243 eval(code6); | 1222 eval(code6); |
1244 EndTest(); | 1223 EndTest(); |
1245 | 1224 |
1246 BeginTest("Scope positions in non-lexical for each statement"); | 1225 BeginTest("Scope positions in non-lexical for each statement"); |
1247 var code7 = "function for_each_statement() { \n" + | 1226 var code7 = "function for_each_statement() { \n" + |
1248 " var i; \n" + | 1227 " var i; \n" + |
1249 " for (i of [0]) { \n" + | 1228 " for (i of [0]) { \n" + |
1250 " debugger; \n" + | 1229 " debugger; \n" + |
1251 " } \n" + | 1230 " } \n" + |
1252 "} \n" + | 1231 "} \n" + |
1253 "for_each_statement(); \n"; | 1232 "for_each_statement(); \n"; |
1254 | 1233 |
1255 listener_delegate = function(exec_state) { | 1234 listener_delegate = function(exec_state) { |
1256 CheckScopeChain([debug.ScopeType.Local, | 1235 CheckScopeChain([debug.ScopeType.Local, |
1257 debug.ScopeType.Script, | 1236 debug.ScopeType.Script, |
1258 debug.ScopeType.Global], exec_state); | 1237 debug.ScopeType.Global], exec_state); |
1259 CheckScopeChainPositions([{start: 27, end: 181}, {}, {}], exec_state); | 1238 CheckScopeChainPositions([{start: 27, end: 181}, {}, {}], exec_state); |
1260 } | 1239 } |
1261 eval(code7); | 1240 eval(code7); |
1262 EndTest(); | 1241 EndTest(); |
1263 | 1242 |
1264 BeginTest("Scope positions in non-lexical for each statement with lexical block"
); | 1243 BeginTest( |
| 1244 "Scope positions in non-lexical for each statement with lexical block"); |
1265 var code8 = "function for_each_statement() { \n" + | 1245 var code8 = "function for_each_statement() { \n" + |
1266 " var i; \n" + | 1246 " var i; \n" + |
1267 " for (i of [0]) { \n" + | 1247 " for (i of [0]) { \n" + |
1268 " let j; \n" + | 1248 " let j; \n" + |
1269 " debugger; \n" + | 1249 " debugger; \n" + |
1270 " } \n" + | 1250 " } \n" + |
1271 "} \n" + | 1251 "} \n" + |
1272 "for_each_statement(); \n"; | 1252 "for_each_statement(); \n"; |
1273 | 1253 |
1274 listener_delegate = function(exec_state) { | 1254 listener_delegate = function(exec_state) { |
1275 CheckScopeChain([debug.ScopeType.Block, | 1255 CheckScopeChain([debug.ScopeType.Block, |
1276 debug.ScopeType.Local, | 1256 debug.ScopeType.Local, |
1277 debug.ScopeType.Script, | 1257 debug.ScopeType.Script, |
1278 debug.ScopeType.Global], exec_state); | 1258 debug.ScopeType.Global], exec_state); |
1279 CheckScopeChainPositions([{start: 89, end: 183}, {start: 27, end: 217}, {}, {}
], exec_state); | 1259 CheckScopeChainPositions( |
| 1260 [{start: 89, end: 183}, {start: 27, end: 217}, {}, {}], exec_state); |
1280 } | 1261 } |
1281 eval(code8); | 1262 eval(code8); |
1282 EndTest(); | 1263 EndTest(); |
1283 | 1264 |
1284 assertEquals(begin_test_count, break_count, | 1265 assertEquals(begin_test_count, break_count, |
1285 'one or more tests did not enter the debugger'); | 1266 'one or more tests did not enter the debugger'); |
1286 assertEquals(begin_test_count, end_test_count, | 1267 assertEquals(begin_test_count, end_test_count, |
1287 'one or more tests did not have its result checked'); | 1268 'one or more tests did not have its result checked'); |
OLD | NEW |