1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Flags: --allow-natives-syntax 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction assertSame(expected, found) { 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (found === expected) { 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (expected !== 0 || (1 / expected) == (1 / found)) return; 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return; 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction foo(x) { 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return x.bar; 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction getter1() { 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame(this, this); 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar o1 = Object.defineProperty({}, "bar", { get: getter1 }); 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfoo(o1); 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfoo(o1); 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction getter2() { 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame(this, this); 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar o2 = Object.defineProperty({}, "bar", { get: getter2 }); 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfoo(o2); 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch%OptimizeFunctionOnNextCall(foo); 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfoo(o2); 32