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