13e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// Copyright 2010 the V8 project authors. All rights reserved.
23e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// Redistribution and use in source and binary forms, with or without
33e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// modification, are permitted provided that the following conditions are
43e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// met:
53e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//
63e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//     * Redistributions of source code must retain the above copyright
73e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//       notice, this list of conditions and the following disclaimer.
83e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//     * Redistributions in binary form must reproduce the above
93e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//       copyright notice, this list of conditions and the following
103e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//       disclaimer in the documentation and/or other materials provided
113e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//       with the distribution.
123e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//     * Neither the name of Google Inc. nor the names of its
133e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//       contributors may be used to endorse or promote products derived
143e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//       from this software without specific prior written permission.
153e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu//
163e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
173e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
183e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
193e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
203e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
213e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
223e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
263e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Flags: --allow-natives-syntax
29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
303e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// Check that constants and computed properties are overwriting each other
313e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// correctly, i.e., the last initializer for any name is stored in the object.
323e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
333e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
343e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// Tests for the full code generator (if active).
353e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
363e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo1 = {
373e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: 6,
383e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: 7
393e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu};
403e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
413e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo2 = {
423e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: function(a){},
433e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: 7
443e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu};
453e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
463e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo3 = {
473e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: function(a){},
483e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: function(b){},
493e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: 7
503e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu};
513e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
523e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo4 = {
533e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: function(b){},
54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  bar: 4,
553e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  bar: function(){return 7},
563e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu};
573e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
583e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo5 = {
593e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  13: function(a){},
603e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  13: 7
613e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu}
623e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
633e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo6 = {
643e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  14.31: function(a){},
653e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  14.31: 7
663e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu}
673e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
683e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar foo7 = {
693e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  15: 6,
703e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  15: 7
713e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu}
723e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction foo8(i) {
74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  var obj = {
75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    x: {a: i},
76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    x: 7
77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  };
78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  return obj.x;
79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch};
80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
813e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo1.bar);
823e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo2.bar);
833e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo3.bar);
843e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo4.bar());
853e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo5[13]);
863e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo6[14.31]);
873e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, foo7[15]);
883e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(7, foo8(1));
90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(7, foo8(1));
91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch%OptimizeFunctionOnNextCall(foo8);
92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(7, foo8(1));
93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
953e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// Test for the classic code generator.
963e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
973e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhufunction fun(x) {
98589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  var inner = { j: function(x) { return x; }, j: 7 };
993e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  return inner.j;
1003e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu}
1013e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1023e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, fun(7) );
1033e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1043e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// Check that the initializers of computed properties are executed, even if
1053e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu// no store instructions are generated for the literals.
1063e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1073e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar glob1 = 0;
1083e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1093e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar bar1 = { x: glob1++, x: glob1++, x: glob1++, x: 7};
1103e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1113e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(3, glob1);
1123e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1133e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1143e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar glob2 = 0;
1153e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1163e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhufunction fun2() {
1173e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  var r = { y: glob2++, y: glob2++, y: glob2++, y: 7};
1183e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  return r.y;
1193e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu}
1203e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1213e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar y = fun2();
1223e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, y);
1233e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(3, glob2);
1243e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1253e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar glob3 = 0;
1263e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1273e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhufunction fun3() {
1283e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  var r = { 113: glob3++, 113: glob3++, 113: glob3++, 113: 7};
1293e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu  return r[113];
1303e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu}
1313e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhu
1323e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui Zhuvar y = fun3();
1333e5fa29ddb82551500b118e9bf37af3966277b70Teng-Hui ZhuassertEquals(7, y);
134589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben MurdochassertEquals(3, glob3);
135