13c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 23c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org// Use of this source code is governed by a BSD-style license that can be 33c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org// found in the LICENSE file. 43c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org 53c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org// Flags: --allow-natives-syntax 63c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org 73c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfunction assertSame(expected, found) { 83c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org if (found === expected) { 93c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org if (expected !== 0 || (1 / expected) == (1 / found)) return; 103c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org } 113c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org return; 123c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org}; 133c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org 143c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfunction foo(x) { 153c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org return x.bar; 163c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org} 173c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org 183c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfunction getter1() { 193c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org assertSame(this, this); 203c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org} 213c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgvar o1 = Object.defineProperty({}, "bar", { get: getter1 }); 223c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfoo(o1); 233c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfoo(o1); 243c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org 253c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfunction getter2() { 263c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org assertSame(this, this); 273c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org} 283c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgvar o2 = Object.defineProperty({}, "bar", { get: getter2 }); 293c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfoo(o2); 303c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.org%OptimizeFunctionOnNextCall(foo); 313c660e485ea372d1076aecdcece69842563d6adfjkummerow@chromium.orgfoo(o2); 32