139110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
239110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// Redistribution and use in source and binary forms, with or without
339110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// modification, are permitted provided that the following conditions are
439110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// met:
539110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//
639110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//     * Redistributions of source code must retain the above copyright
739110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//       notice, this list of conditions and the following disclaimer.
839110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//     * Redistributions in binary form must reproduce the above
939110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//       copyright notice, this list of conditions and the following
1039110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//       disclaimer in the documentation and/or other materials provided
1139110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//       with the distribution.
1239110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//     * Neither the name of Google Inc. nor the names of its
1339110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//       contributors may be used to endorse or promote products derived
1439110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//       from this software without specific prior written permission.
1539110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org//
1639110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1739110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1839110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1939110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2039110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2139110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2239110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2339110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2439110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2539110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2639110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2739110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org
2839110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org// Flags: --allow-natives-syntax
2939110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org
3039110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org"use strict";
3139110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org
3239110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgfunction f(a, b) {
3339110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org  return g("c", "d");
3439110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org}
3539110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org
3639110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgfunction g(a, b) {
3739110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org  g.constructor.apply(this, arguments);
3839110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org}
3939110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org
4039110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgg.constructor = function(a, b) {
4139110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org  assertEquals("c", a);
4239110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org  assertEquals("d", b);
4339110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org}
4439110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org
4539110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgf("a", "b");
4639110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgf("a", "b");
4739110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.org%OptimizeFunctionOnNextCall(f);
4839110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgf("a", "b");
4939110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgg.x = "deopt";
5039110192b21bd92be3d617690fc33b4e9551b95dyangguo@chromium.orgf("a", "b");
51