180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// Redistribution and use in source and binary forms, with or without 380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// modification, are permitted provided that the following conditions are 480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// met: 580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// 680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// * Redistributions of source code must retain the above copyright 780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// notice, this list of conditions and the following disclaimer. 880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// * Redistributions in binary form must reproduce the above 980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// copyright notice, this list of conditions and the following 1080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// disclaimer in the documentation and/or other materials provided 1180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// with the distribution. 1280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// * Neither the name of Google Inc. nor the names of its 1380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// contributors may be used to endorse or promote products derived 1480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// from this software without specific prior written permission. 1580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// 1680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 28ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org// Flags: --harmony-scoping --allow-natives-syntax 2980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 301b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org// TODO(ES6): properly activate extended mode 311b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org"use strict"; 321b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org 3364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org// Check that the following functions are optimizable. 3464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgvar functions = [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 3564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org f15, f16, f17, f18, f19, f20, f21, f22, f23 ]; 3664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 3764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfor (var i = 0; i < functions.length; ++i) { 3864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org var func = functions[i]; 3964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print("Testing:"); 4064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print(func); 4164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org for (var j = 0; j < 10; ++j) { 4264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org func(12); 4364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 4464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org %OptimizeFunctionOnNextCall(func); 4564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org func(12); 46ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org assertOptimized(func); 4764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 4864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 4964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f1() { } 5064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 5164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f2(x) { } 5264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 5364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f3() { 5464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x; 5564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 5664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 5764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f4() { 5864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org function foo() { 5964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 6064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 6164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 6264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f5() { 6364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x = 1; 6464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 6564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 6664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f6() { 6764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org const x = 1; 6864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 6964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 7064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f7(x) { 7164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return x; 7264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 7364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 7464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f8() { 7564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x; 7664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return x; 7764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 7864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 7964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f9() { 8064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org function x() { 8164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 8264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return x; 8364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 8464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 8564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f10(x) { 8664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org x = 1; 8764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 8864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 8964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f11() { 9064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x; 9164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org x = 1; 9264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 9364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 9464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f12() { 9564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org function x() {}; 9664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org x = 1; 9764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 9864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 9964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f13(x) { 10064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 10164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 10264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 10364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f14() { 10464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x; 10564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 10664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 10764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 10864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f15() { 10964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org function x() { 11064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 11164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 11264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 11364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 11464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f16() { 11564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x = 1; 11664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 11764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 11864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 11964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f17() { 12064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org const x = 1; 12164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 12264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 12364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 12464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f18(x) { 12564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return x; 12664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 12764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 12864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 12964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f19() { 13064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x; 13164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return x; 13264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 13364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 13464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 13564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f20() { 13664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org function x() { 13764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 13864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return x; 13964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 14064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 14164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 14264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f21(x) { 14364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org x = 1; 14464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 14564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 14664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 14764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f22() { 14864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org let x; 14964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org x = 1; 15064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 15164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 15264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 15364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction f23() { 15464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org function x() { } 15564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org x = 1; 15664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (function() { x; }); 15764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 15864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 15964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 16080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org// Test that temporal dead zone semantics for function and block scoped 16164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org// let bindings are handled by the optimizing compiler. 16264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 16364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction TestFunctionLocal(s) { 16464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 'use strict'; 16564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org var func = eval("(function baz(){" + s + "; })"); 16664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print("Testing:"); 16764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print(func); 16864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org for (var i = 0; i < 5; ++i) { 16964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org try { 17064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org func(); 17164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertUnreachable(); 17264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } catch (e) { 17364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertInstanceof(e, ReferenceError); 17464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 17564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 17664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org %OptimizeFunctionOnNextCall(func); 17764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org try { 17864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org func(); 17964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertUnreachable(); 18064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } catch (e) { 18164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertInstanceof(e, ReferenceError); 18264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 18364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 18464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 18564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction TestFunctionContext(s) { 18664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 'use strict'; 18764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org var func = eval("(function baz(){ " + s + "; (function() { x; }); })"); 18864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print("Testing:"); 18964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print(func); 19064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org for (var i = 0; i < 5; ++i) { 19164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print(i); 19264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org try { 19364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org func(); 19464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertUnreachable(); 19564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } catch (e) { 19664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertInstanceof(e, ReferenceError); 19764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 19864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 19964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print("optimize"); 20064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org %OptimizeFunctionOnNextCall(func); 20164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org try { 20264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print("call"); 20364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org func(); 20464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertUnreachable(); 20564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } catch (e) { 20664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org print("catch"); 20764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org assertInstanceof(e, ReferenceError); 20864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 20964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 21064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 21164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgfunction TestAll(s) { 21264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org TestFunctionLocal(s); 21364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org TestFunctionContext(s); 21464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 21564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 21664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org// Use before initialization in declaration statement. 21764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('let x = x + 1'); 21864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('let x = x += 1'); 21964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('let x = x++'); 22064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('let x = ++x'); 22164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('const x = x + 1'); 22264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 22364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org// Use before initialization in prior statement. 22464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('x + 1; let x;'); 22564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('x = 1; let x;'); 22664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('x += 1; let x;'); 22764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('++x; let x;'); 22864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('x++; let x;'); 22964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgTestAll('let y = x; const x = 1;'); 23064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 23180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 23280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.orgfunction f(x, b) { 23380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org let y = (b ? y : x) + 42; 23480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org return y; 23580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} 23680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 23780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.orgfunction g(x, b) { 23880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org { 23980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org let y = (b ? y : x) + 42; 24080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org return y; 24180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org } 24280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} 24380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 24480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.orgfor (var i=0; i<10; i++) { 24580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org f(i, false); 24680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org g(i, false); 24780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} 24880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 24980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org%OptimizeFunctionOnNextCall(f); 25080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org%OptimizeFunctionOnNextCall(g); 25180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 25280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.orgtry { 25380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org f(42, true); 25480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} catch (e) { 25580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org assertInstanceof(e, ReferenceError); 25680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} 25780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 25880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.orgtry { 25980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org g(42, true); 26080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} catch (e) { 26180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org assertInstanceof(e, ReferenceError); 26280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} 263