13f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 23f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// Redistribution and use in source and binary forms, with or without 33f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// modification, are permitted provided that the following conditions are 43f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// met: 53f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// 63f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// * Redistributions of source code must retain the above copyright 73f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// notice, this list of conditions and the following disclaimer. 83f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// * Redistributions in binary form must reproduce the above 93f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// copyright notice, this list of conditions and the following 103f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// disclaimer in the documentation and/or other materials provided 113f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// with the distribution. 123f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// * Neither the name of Google Inc. nor the names of its 133f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// contributors may be used to endorse or promote products derived 143f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// from this software without specific prior written permission. 153f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// 163f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 283f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// Flags: --allow-natives-syntax 293f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 303f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgvar soft = false; 313f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 323f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org// disable optimization of this global 333f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgsoft = true; 343f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgsoft = false; 353f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgsoft = true; 363f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgsoft = false; 373f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 383f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgfunction test() { 393f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org var f4 = makeF(4); 403f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org var f5 = makeF(5); 413f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 423f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org function makeF(i) { 433f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org return function f(x) { 443f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org if (x == 0) return i; 453f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org if (i == 4) if (soft) print("wahoo" + i); 463f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org return f4(x - 1); 473f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org } 483f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org } 493f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 503f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f4(9); 513f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f4(11); 523f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org %OptimizeFunctionOnNextCall(f4); 533f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f4(12); 543f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 553f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f5(9); 563f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f5(11); 573f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org %OptimizeFunctionOnNextCall(f5); 583f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f5(12); 593f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 603f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org soft = true; 613f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f4(1); 623f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org f5(9); 633f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org} 643f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.org 653f7dfd6b89fc3921382fbdc1212fabab54a19757titzer@chromium.orgtest(); 66