| OLD | NEW | 
| (Empty) |  | 
 |    1 // Copyright 2011 the V8 project authors. All rights reserved. | 
 |    2 // Redistribution and use in source and binary forms, with or without | 
 |    3 // modification, are permitted provided that the following conditions are | 
 |    4 // met: | 
 |    5 // | 
 |    6 //     * Redistributions of source code must retain the above copyright | 
 |    7 //       notice, this list of conditions and the following disclaimer. | 
 |    8 //     * Redistributions in binary form must reproduce the above | 
 |    9 //       copyright notice, this list of conditions and the following | 
 |   10 //       disclaimer in the documentation and/or other materials provided | 
 |   11 //       with the distribution. | 
 |   12 //     * Neither the name of Google Inc. nor the names of its | 
 |   13 //       contributors may be used to endorse or promote products derived | 
 |   14 //       from this software without specific prior written permission. | 
 |   15 // | 
 |   16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
 |   17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
 |   18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
 |   19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
 |   20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
 |   21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
 |   22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
 |   23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
 |   24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
 |   25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
 |   26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
 |   27  | 
 |   28 // Flags: --expose-debug-as debug --expose-natives-as=builtins | 
 |   29  | 
 |   30 // Check that the ScopeIterator can properly recreate the scope at | 
 |   31 // every point when stepping through functions. | 
 |   32  | 
 |   33 var Debug = debug.Debug; | 
 |   34  | 
 |   35 function listener(event, exec_state, event_data, data) { | 
 |   36   if (event == Debug.DebugEvent.Break) { | 
 |   37     // Access scope details. | 
 |   38     var scope_count = exec_state.frame().scopeCount(); | 
 |   39     for (var i = 0; i < scope_count; i++) { | 
 |   40       var scope = exec_state.frame().scope(i); | 
 |   41       // assertTrue(scope.isScope()); | 
 |   42       scope.scopeType(); | 
 |   43       scope.scopeObject(); | 
 |   44     } | 
 |   45  | 
 |   46     // Do steps until we reach the global scope again. | 
 |   47     if (true) { | 
 |   48       exec_state.prepareStep(Debug.StepAction.StepInMin, 1); | 
 |   49     } | 
 |   50   } | 
 |   51 } | 
 |   52  | 
 |   53 Debug.setListener(listener); | 
 |   54  | 
 |   55  | 
 |   56 function test1() { | 
 |   57   debugger; | 
 |   58   with ({x:1}) { | 
 |   59     x = 2; | 
 |   60   } | 
 |   61 } | 
 |   62 test1(); | 
 |   63  | 
 |   64  | 
 |   65 function test2() { | 
 |   66   if (true) { | 
 |   67     with ({}) { | 
 |   68       debugger; | 
 |   69     } | 
 |   70   } else { | 
 |   71     with ({}) { | 
 |   72       return 10; | 
 |   73     } | 
 |   74   } | 
 |   75 } | 
 |   76 test2(); | 
 |   77  | 
 |   78  | 
 |   79 function test3() { | 
 |   80   if (true) { | 
 |   81     debugger; | 
 |   82   } else { | 
 |   83     with ({}) { | 
 |   84       return 10; | 
 |   85     } | 
 |   86   } | 
 |   87 } | 
 |   88 test3(); | 
 |   89  | 
 |   90  | 
 |   91 function test4() { | 
 |   92   debugger; | 
 |   93   with ({x:1}) x = 1 | 
 |   94 } | 
 |   95 test4(); | 
 |   96  | 
 |   97  | 
 |   98 function test5() { | 
 |   99   debugger; | 
 |  100   var dummy = 1; | 
 |  101   with ({}) { | 
 |  102     with ({}) { | 
 |  103       dummy = 2; | 
 |  104     } | 
 |  105   } | 
 |  106   dummy = 3; | 
 |  107 } | 
 |  108 test5(); | 
 |  109  | 
 |  110  | 
 |  111 function test6() { | 
 |  112   debugger; | 
 |  113   try { | 
 |  114     throw 'stuff'; | 
 |  115   } catch (e) { | 
 |  116     e = 1; | 
 |  117   } | 
 |  118 } | 
 |  119 test6(); | 
 |  120  | 
 |  121  | 
 |  122 function test7() { | 
 |  123   debugger; | 
 |  124   function foo() {} | 
 |  125 } | 
 |  126 test7(); | 
 |  127  | 
 |  128  | 
 |  129 function test8() { | 
 |  130   debugger; | 
 |  131   (function foo() {})(); | 
 |  132 } | 
 |  133 test8(); | 
 |  134  | 
 |  135  | 
 |  136 function test10() { | 
 |  137   debugger; | 
 |  138   with ({}) { | 
 |  139     return 10; | 
 |  140   } | 
 |  141 } | 
 |  142 test10(); | 
 |  143  | 
 |  144  | 
 |  145 function test11() { | 
 |  146   debugger; | 
 |  147   try { | 
 |  148     throw 'stuff'; | 
 |  149   } catch (e) { | 
 |  150     return 10; | 
 |  151   } | 
 |  152 } | 
 |  153 test11(); | 
 |  154  | 
 |  155  | 
 |  156 var prefixes = [ | 
 |  157     "debugger; ", | 
 |  158     "if (false) { try { throw 0; } catch(x) { return x; } }; debugger; " ]; | 
 |  159  | 
 |  160  | 
 |  161 // Return from function constructed with Function constructor. | 
 |  162 var anon = 12; | 
 |  163 for (var i = 0; i < prefixes.length; ++i) { | 
 |  164   var pre = prefixes[i]; | 
 |  165   Function(pre + "return 42")(); | 
 |  166   Function(pre + "return 42 ")(); | 
 |  167   Function(pre + "return 42;")(); | 
 |  168   Function(pre + "return 42; ")(); | 
 |  169   Function(pre + "return anon")(); | 
 |  170   Function(pre + "return anon ")(); | 
 |  171   Function(pre + "return anon;")(); | 
 |  172   Function(pre + "return anon; ")(); | 
 |  173 } | 
 |  174  | 
 |  175  | 
 |  176 try { | 
 |  177   with({}) { | 
 |  178     debugger; | 
 |  179     eval("{}$%:^"); | 
 |  180   } | 
 |  181 } catch(e) { | 
 |  182   nop(); | 
 |  183 } | 
 |  184  | 
 |  185  | 
 |  186 function nop() {} | 
 |  187  | 
 |  188  | 
 |  189 // With block as the last(!) statement in global code. | 
 |  190 with ({}) { debugger; } | 
| OLD | NEW |