1a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// Redistribution and use in source and binary forms, with or without
3a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// modification, are permitted provided that the following conditions are
4a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// met:
5a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//
6a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//     * Redistributions of source code must retain the above copyright
7a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//       notice, this list of conditions and the following disclaimer.
8a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//     * Redistributions in binary form must reproduce the above
9a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//       copyright notice, this list of conditions and the following
10a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//       disclaimer in the documentation and/or other materials provided
11a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//       with the distribution.
12a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//     * Neither the name of Google Inc. nor the names of its
13a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//       contributors may be used to endorse or promote products derived
14a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//       from this software without specific prior written permission.
15a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org//
16a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
28a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// Flags: --allow-natives-syntax
29a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
30a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// Generate closures in that live in new-space.
31a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgfunction mk() {
32a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  return function() {};
33a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org}
34a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgassertInstanceof(mk(), Function);
35a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgassertInstanceof(mk(), Function);
36a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
37a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// Setup constant function using above closures.
38a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgvar o = {};
39a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgo.func = mk();
40a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org
41a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org// Optimize object comparison with new-space RHS.
42a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgfunction cmp(o, f) {
43a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org  return f === o.func;
44a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org}
45a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgassertTrue(cmp(o, o.func));
46a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgassertTrue(cmp(o, o.func));
47a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org%OptimizeFunctionOnNextCall(cmp);
48a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgassertTrue(cmp(o, o.func));
49