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