1c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
2c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
3c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org// found in the LICENSE file.
4c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org// Flags: --allow-natives-syntax
5c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org
6c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgfunction genM() {
7c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  "use strict";
8c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  return function () {
9c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org    return this.field;
10c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  };
11c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org}
12c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org
13c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgfunction genR() {
14c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  var x = {
15c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org    field: 10
16c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  }
17c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  return x;
18c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org}
19c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org
20c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgmethod = {};
21c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgreceiver = {};
22c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org
23c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgmethod = genM("A");
24c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgreceiver = genR("A");
25c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org
26c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgvar foo = (function () {
27c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  return function suspect (name) {
28c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org    "use strict";
29c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org    return method.apply(receiver, arguments);
30c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org  }
31c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org})();
32c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org
33c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgfoo("a", "b", "c");
34c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgfoo("a", "b", "c");
35c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgfoo("a", "b", "c");
36c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org%OptimizeFunctionOnNextCall(foo);
37c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgfoo("a", "b", "c");
38