13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2011 the V8 project authors. All rights reserved.
23ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Redistribution and use in source and binary forms, with or without
33ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// modification, are permitted provided that the following conditions are
43ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// met:
53ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//
63ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//     * Redistributions of source code must retain the above copyright
73ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       notice, this list of conditions and the following disclaimer.
83ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//     * Redistributions in binary form must reproduce the above
93ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       copyright notice, this list of conditions and the following
103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       disclaimer in the documentation and/or other materials provided
113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       with the distribution.
123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//     * Neither the name of Google Inc. nor the names of its
133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       contributors may be used to endorse or promote products derived
143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//       from this software without specific prior written permission.
153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch//
163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --expose-debug-as debug --expose-natives-as=builtins
293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Check that the ScopeIterator can properly recreate the scope at
313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// every point when stepping through functions.
323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar Debug = debug.Debug;
343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction listener(event, exec_state, event_data, data) {
363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (event == Debug.DebugEvent.Break) {
373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    // Access scope details.
383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    var scope_count = exec_state.frame().scopeCount();
393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    for (var i = 0; i < scope_count; i++) {
403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      var scope = exec_state.frame().scope(i);
413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      // assertTrue(scope.isScope());
423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      scope.scopeType();
433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      scope.scopeObject();
443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    // Do steps until we reach the global scope again.
473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    if (true) {
483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      exec_state.prepareStep(Debug.StepAction.StepInMin, 1);
493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
533ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDebug.setListener(listener);
543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test1() {
573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x:1}) {
593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    x = 2;
603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest1();
633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test2() {
663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (true) {
673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({}) {
683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      debugger;
693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } else {
713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({}) {
723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      return 10;
733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest2();
773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test3() {
803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (true) {
813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    debugger;
823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } else {
833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({}) {
843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      return 10;
853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest3();
893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test4() {
923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x:1}) x = 1
943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest4();
963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test5() {
993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var dummy = 1;
1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({}) {
1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({}) {
1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      dummy = 2;
1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  dummy = 3;
1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest5();
1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test6() {
1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  try {
1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    throw 'stuff';
1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } catch (e) {
1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    e = 1;
1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest6();
1203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test7() {
1233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  function foo() {}
1253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest7();
1273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test8() {
1303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  (function foo() {})();
1323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest8();
1343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar q = 42;
1373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar prefixes = [ "debugger; ",
1383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                 "if (false) { try { throw 0; } catch(x) { return x; } }; debugger; " ];
1393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar bodies = [ "1",
1403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "1 ",
1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "1;",
1423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "1; ",
1433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "q",
1443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "q ",
1453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "q;",
1463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "q; ",
1473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "try { throw 'stuff' } catch (e) { e = 1; }",
1483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "try { throw 'stuff' } catch (e) { e = 1; } ",
1493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "try { throw 'stuff' } catch (e) { e = 1; };",
1503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch               "try { throw 'stuff' } catch (e) { e = 1; }; " ];
1513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar with_bodies = [ "with ({}) {}",
1523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x",
1533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x = 1",
1543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x ",
1553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x = 1 ",
1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x;",
1573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x = 1;",
1583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x; ",
1593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                    "with ({x:1}) x = 1; " ];
1603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test9() {
1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  for (var i = 0; i < prefixes.length; ++i) {
1653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    var pre = prefixes[i];
1663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    for (var j = 0; j < bodies.length; ++j) {
1673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      var body = bodies[j];
1683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      eval(pre + body);
1693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      eval("'use strict'; " + pre + body);
1703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
1713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    for (var j = 0; j < with_bodies.length; ++j) {
1723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      var body = with_bodies[j];
1733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      eval(pre + body);
1743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
1753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
1763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest9();
1783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test10() {
1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({}) {
1833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    return 10;
1843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
1853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest10();
1873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test11() {
1903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
1913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  try {
1923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    throw 'stuff';
1933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } catch (e) {
1943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    return 10;
1953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
1973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest11();
1983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Test global eval and function constructor.
2013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfor (var i = 0; i < prefixes.length; ++i) {
2023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var pre = prefixes[i];
2033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  for (var j = 0; j < bodies.length; ++j) {
2043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    var body = bodies[j];
2053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    eval(pre + body);
2063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    eval("'use strict'; " + pre + body);
2073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    Function(pre + body)();
2083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  for (var j = 0; j < with_bodies.length; ++j) {
2103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    var body = with_bodies[j];
2113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    eval(pre + body);
2123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    Function(pre + body)();
2133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
2153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtry {
2183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with({}) {
2193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    debugger;
2203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    eval("{}$%:^");
2213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} catch(e) {
2233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  nop();
2243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
2253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Return from function constructed with Function constructor.
2273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar anon = 12;
2283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfor (var i = 0; i < prefixes.length; ++i) {
2293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var pre = prefixes[i];
2303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return 42")();
2313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return 42 ")();
2323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return 42;")();
2333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return 42; ")();
2343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return anon")();
2353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return anon ")();
2363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return anon;")();
2373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  Function(pre + "return anon; ")();
2383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
2393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction nop() {}
2423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction stress() {
2453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  debugger;
2463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  L: with ({x:12}) {
2483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    break L;
2493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
2533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    label: {
2543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
2553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        break label;
2563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
2573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
2583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
2623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    label: {
2633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
2643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        break label;
2653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
2663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
2673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    nop();
2683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
2723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    label: {
2733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'middle'}) {
2743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        with ({x: 'inner'}) {
2753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          break label;
2763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
2773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
2783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
2793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
2833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    label: {
2843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'middle'}) {
2853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        with ({x: 'inner'}) {
2863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          break label;
2873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
2883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
2893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
2903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    nop();
2913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
2923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
2953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    for (var i = 0; i < 3; ++i) {
2963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner' + i}) {
2973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        continue;
2983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
2993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
3043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    label: for (var i = 0; i < 3; ++i) {
3053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'middle' + i}) {
3063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        for (var j = 0; j < 3; ++j) {
3073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          with ({x: 'inner' + j}) {
3083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            continue label;
3093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          }
3103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
3113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
3173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    try {
3183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
3193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        throw 0;
3203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    } catch (e) {
3223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
3273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    try {
3283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
3293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        throw 0;
3303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    } catch (e) {
3323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      nop();
3333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  with ({x: 'outer'}) {
3383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    try {
3393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'middle'}) {
3403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        with ({x: 'inner'}) {
3413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          throw 0;
3423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
3433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    } catch (e) {
3453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  try {
3503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({x: 'outer'}) {
3513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      try {
3523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        with ({x: 'inner'}) {
3533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          throw 0;
3543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
3553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      } finally {
3563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } catch (e) {
3593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  try {
3633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({x: 'outer'}) {
3643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      try {
3653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        with ({x: 'inner'}) {
3663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          throw 0;
3673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        }
3683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      } finally {
3693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        nop();
3703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } catch (e) {
3733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  function stress1() {
3773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({x:12}) {
3783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      return x;
3793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  stress1();
3823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  function stress2() {
3853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    with ({x: 'outer'}) {
3863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
3873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        return x;
3883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
3903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
3913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  stress2();
3923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
3933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  function stress3() {
3943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    try {
3953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
3963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        throw 0;
3973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
3983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    } catch (e) {
3993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      return e;
4003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
4013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
4023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  stress3();
4033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
4043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
4053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  function stress4() {
4063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    try {
4073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
4083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        throw 0;
4093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
4103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    } catch (e) {
4113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      with ({x: 'inner'}) {
4123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch        return e;
4133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      }
4143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    }
4153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
4163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  stress4();
4173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
4183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
4193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochstress();
4203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
4213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
4223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// With block as the last(!) statement in global code.
4233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochwith ({}) { debugger; }