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