15c838251403b0be9a882540f1922577abba4c872ager@chromium.org// Copyright 2008 the V8 project authors. All rights reserved.
25c838251403b0be9a882540f1922577abba4c872ager@chromium.org// Redistribution and use in source and binary forms, with or without
35c838251403b0be9a882540f1922577abba4c872ager@chromium.org// modification, are permitted provided that the following conditions are
45c838251403b0be9a882540f1922577abba4c872ager@chromium.org// met:
55c838251403b0be9a882540f1922577abba4c872ager@chromium.org//
65c838251403b0be9a882540f1922577abba4c872ager@chromium.org//     * Redistributions of source code must retain the above copyright
75c838251403b0be9a882540f1922577abba4c872ager@chromium.org//       notice, this list of conditions and the following disclaimer.
85c838251403b0be9a882540f1922577abba4c872ager@chromium.org//     * Redistributions in binary form must reproduce the above
95c838251403b0be9a882540f1922577abba4c872ager@chromium.org//       copyright notice, this list of conditions and the following
105c838251403b0be9a882540f1922577abba4c872ager@chromium.org//       disclaimer in the documentation and/or other materials provided
115c838251403b0be9a882540f1922577abba4c872ager@chromium.org//       with the distribution.
125c838251403b0be9a882540f1922577abba4c872ager@chromium.org//     * Neither the name of Google Inc. nor the names of its
135c838251403b0be9a882540f1922577abba4c872ager@chromium.org//       contributors may be used to endorse or promote products derived
145c838251403b0be9a882540f1922577abba4c872ager@chromium.org//       from this software without specific prior written permission.
155c838251403b0be9a882540f1922577abba4c872ager@chromium.org//
165c838251403b0be9a882540f1922577abba4c872ager@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175c838251403b0be9a882540f1922577abba4c872ager@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185c838251403b0be9a882540f1922577abba4c872ager@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195c838251403b0be9a882540f1922577abba4c872ager@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205c838251403b0be9a882540f1922577abba4c872ager@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215c838251403b0be9a882540f1922577abba4c872ager@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225c838251403b0be9a882540f1922577abba4c872ager@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235c838251403b0be9a882540f1922577abba4c872ager@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245c838251403b0be9a882540f1922577abba4c872ager@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255c838251403b0be9a882540f1922577abba4c872ager@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265c838251403b0be9a882540f1922577abba4c872ager@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275c838251403b0be9a882540f1922577abba4c872ager@chromium.org
285c838251403b0be9a882540f1922577abba4c872ager@chromium.org// Flags: --allow-natives-syntax
295c838251403b0be9a882540f1922577abba4c872ager@chromium.org
305c838251403b0be9a882540f1922577abba4c872ager@chromium.orgfunction RunTest(ensure_fast_case) {
315c838251403b0be9a882540f1922577abba4c872ager@chromium.org  function C1() {
325c838251403b0be9a882540f1922577abba4c872ager@chromium.org    this.x = 23;
335c838251403b0be9a882540f1922577abba4c872ager@chromium.org  };
345c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C1.prototype = { set x(value) { this.y = 23; } };
355c838251403b0be9a882540f1922577abba4c872ager@chromium.org  if (ensure_fast_case) {
365c838251403b0be9a882540f1922577abba4c872ager@chromium.org    %ToFastProperties(C1.prototype);
375c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
381805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
395c838251403b0be9a882540f1922577abba4c872ager@chromium.org  for (var i = 0; i < 10; i++) {
405c838251403b0be9a882540f1922577abba4c872ager@chromium.org    var c1 = new C1();
415c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals("undefined", typeof c1.x);
425c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals(23, c1.y);
435c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
441805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
451805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
465c838251403b0be9a882540f1922577abba4c872ager@chromium.org  function C2() {
475c838251403b0be9a882540f1922577abba4c872ager@chromium.org    this.x = 23;
485c838251403b0be9a882540f1922577abba4c872ager@chromium.org  };
495c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C2.prototype = { };
505c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C2.prototype.__proto__ = { set x(value) { this.y = 23; } };
515c838251403b0be9a882540f1922577abba4c872ager@chromium.org  if (ensure_fast_case) {
525c838251403b0be9a882540f1922577abba4c872ager@chromium.org    %ToFastProperties(C2.prototype.__proto__)
535c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
541805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
555c838251403b0be9a882540f1922577abba4c872ager@chromium.org  for (var i = 0; i < 10; i++) {
565c838251403b0be9a882540f1922577abba4c872ager@chromium.org    var c2 = new C2();
575c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals("undefined", typeof c2.x);
585c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals(23, c2.y);
595c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
601805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
611805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
625c838251403b0be9a882540f1922577abba4c872ager@chromium.org  function C3() {
635c838251403b0be9a882540f1922577abba4c872ager@chromium.org    this.x = 23;
645c838251403b0be9a882540f1922577abba4c872ager@chromium.org  };
655c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C3.prototype = { };
665c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C3.prototype.__defineSetter__('x', function(value) { this.y = 23; });
675c838251403b0be9a882540f1922577abba4c872ager@chromium.org  if (ensure_fast_case) {
685c838251403b0be9a882540f1922577abba4c872ager@chromium.org    %ToFastProperties(C3.prototype);
695c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
701805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
715c838251403b0be9a882540f1922577abba4c872ager@chromium.org  for (var i = 0; i < 10; i++) {
725c838251403b0be9a882540f1922577abba4c872ager@chromium.org    var c3 = new C3();
735c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals("undefined", typeof c3.x);
745c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals(23, c3.y);
755c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
761805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
771805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
785c838251403b0be9a882540f1922577abba4c872ager@chromium.org  function C4() {
795c838251403b0be9a882540f1922577abba4c872ager@chromium.org    this.x = 23;
805c838251403b0be9a882540f1922577abba4c872ager@chromium.org  };
815c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C4.prototype = { };
825c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C4.prototype.__proto__ = {  };
835c838251403b0be9a882540f1922577abba4c872ager@chromium.org  C4.prototype.__proto__.__defineSetter__('x', function(value) { this.y = 23; });
845c838251403b0be9a882540f1922577abba4c872ager@chromium.org  if (ensure_fast_case) {
855c838251403b0be9a882540f1922577abba4c872ager@chromium.org    %ToFastProperties(C4.prototype.__proto__);
865c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
871805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
885c838251403b0be9a882540f1922577abba4c872ager@chromium.org  for (var i = 0; i < 10; i++) {
895c838251403b0be9a882540f1922577abba4c872ager@chromium.org    var c4 = new C4();
905c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals("undefined", typeof c4.x);
915c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals(23, c4.y);
925c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
931805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
941805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
955c838251403b0be9a882540f1922577abba4c872ager@chromium.org  function D() {
965c838251403b0be9a882540f1922577abba4c872ager@chromium.org    this.x = 23;
975c838251403b0be9a882540f1922577abba4c872ager@chromium.org  };
985c838251403b0be9a882540f1922577abba4c872ager@chromium.org  D.prototype = 1;
995c838251403b0be9a882540f1922577abba4c872ager@chromium.org  if (ensure_fast_case) {
1005c838251403b0be9a882540f1922577abba4c872ager@chromium.org    %ToFastProperties(D.prototype);
1015c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
1021805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org
1035c838251403b0be9a882540f1922577abba4c872ager@chromium.org  for (var i = 0; i < 10; i++) {
1045c838251403b0be9a882540f1922577abba4c872ager@chromium.org    var d = new D();
1055c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals(23, d.x);
1065c838251403b0be9a882540f1922577abba4c872ager@chromium.org    assertEquals("undefined", typeof d.y);
1075c838251403b0be9a882540f1922577abba4c872ager@chromium.org  }
1085c838251403b0be9a882540f1922577abba4c872ager@chromium.org}
1095c838251403b0be9a882540f1922577abba4c872ager@chromium.org
1105c838251403b0be9a882540f1922577abba4c872ager@chromium.orgRunTest(false);
1115c838251403b0be9a882540f1922577abba4c872ager@chromium.orgRunTest(true);
112