169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// Copyright 2011 the V8 project authors. All rights reserved. 2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without 3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met: 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions of source code must retain the above copyright 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// notice, this list of conditions and the following disclaimer. 8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions in binary form must reproduce the above 9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// copyright notice, this list of conditions and the following 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// disclaimer in the documentation and/or other materials provided 11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// with the distribution. 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Neither the name of Google Inc. nor the names of its 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// contributors may be used to endorse or promote products derived 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// from this software without specific prior written permission. 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --harmony-scoping --allow-natives-syntax 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// TODO(ES6): properly activate extended mode 313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch"use strict"; 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Check that the following functions are optimizable. 343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar functions = [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch f15, f16, f17, f18, f19, f20, f21, f22, f23 ]; 363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfor (var i = 0; i < functions.length; ++i) { 383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var func = functions[i]; 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print("Testing:"); 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print(func); 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch for (var j = 0; j < 10; ++j) { 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch func(12); 433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %OptimizeFunctionOnNextCall(func); 453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch func(12); 463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertTrue(%GetOptimizationStatus(func) != 2); 473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f1() { } 503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f2(x) { } 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f3() { 543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x; 553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f4() { 583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function foo() { 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f5() { 633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x = 1; 643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f6() { 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch const x = 1; 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f7(x) { 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f8() { 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x; 763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f9() { 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function x() { 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f10(x) { 863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x = 1; 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f11() { 903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x; 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x = 1; 923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f12() { 953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function x() {}; 963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x = 1; 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f13(x) { 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f14() { 1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x; 1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f15() { 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function x() { 1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f16() { 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x = 1; 1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f17() { 1203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch const x = 1; 1213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f18(x) { 1253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 1263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f19() { 1303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x; 1313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 1323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f20() { 1363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function x() { 1373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 1393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f21(x) { 1433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x = 1; 1443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f22() { 1483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch let x; 1493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x = 1; 1503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f23() { 1543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function x() { } 1553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x = 1; 1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (function() { x; }); 1573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 159c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch 16069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch// Test that temporal dead zone semantics for function and block scoped 1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// let bindings are handled by the optimizing compiler. 1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestFunctionLocal(s) { 1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 'use strict'; 1653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var func = eval("(function baz(){" + s + "; })"); 1663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print("Testing:"); 1673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print(func); 1683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch for (var i = 0; i < 5; ++i) { 1693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch try { 1703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch func(); 1713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertUnreachable(); 1723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } catch (e) { 1733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertInstanceof(e, ReferenceError); 1743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %OptimizeFunctionOnNextCall(func); 1773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch try { 1783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch func(); 1793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertUnreachable(); 1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } catch (e) { 1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertInstanceof(e, ReferenceError); 1823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestFunctionContext(s) { 1863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 'use strict'; 1873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var func = eval("(function baz(){ " + s + "; (function() { x; }); })"); 1883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print("Testing:"); 1893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print(func); 1903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch for (var i = 0; i < 5; ++i) { 1913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print(i); 1923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch try { 1933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch func(); 1943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertUnreachable(); 1953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } catch (e) { 1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertInstanceof(e, ReferenceError); 1973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print("optimize"); 2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %OptimizeFunctionOnNextCall(func); 2013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch try { 2023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print("call"); 2033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch func(); 2043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertUnreachable(); 2053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } catch (e) { 2063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print("catch"); 2073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertInstanceof(e, ReferenceError); 2083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 2093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 2103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TestAll(s) { 2123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch TestFunctionLocal(s); 2133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch TestFunctionContext(s); 2143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 2153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Use before initialization in declaration statement. 2173ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('let x = x + 1'); 2183ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('let x = x += 1'); 2193ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('let x = x++'); 2203ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('let x = ++x'); 2213ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('const x = x + 1'); 2223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Use before initialization in prior statement. 2243ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('x + 1; let x;'); 2253ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('x = 1; let x;'); 2263ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('x += 1; let x;'); 2273ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('++x; let x;'); 2283ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('x++; let x;'); 2293ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochTestAll('let y = x; const x = 1;'); 2303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 23169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 23269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochfunction f(x, b) { 23369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch let y = (b ? y : x) + 42; 23469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return y; 23569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 23669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 23769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochfunction g(x, b) { 23869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch { 23969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch let y = (b ? y : x) + 42; 24069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch return y; 24169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 24269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 24369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 24469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochfor (var i=0; i<10; i++) { 24569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch f(i, false); 24669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch g(i, false); 24769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 24869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 24969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch%OptimizeFunctionOnNextCall(f); 25069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch%OptimizeFunctionOnNextCall(g); 25169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 25269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochtry { 25369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch f(42, true); 25469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} catch (e) { 25569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch assertInstanceof(e, ReferenceError); 25669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 25769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 25869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochtry { 25969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch g(42, true); 26069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} catch (e) { 26169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch assertInstanceof(e, ReferenceError); 26269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 263