1b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Copyright 2010 the V8 project authors. All rights reserved. 29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Redistribution and use in source and binary forms, with or without 39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// modification, are permitted provided that the following conditions are 49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// met: 59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions of source code must retain the above copyright 79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// notice, this list of conditions and the following disclaimer. 89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions in binary form must reproduce the above 99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// copyright notice, this list of conditions and the following 109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// disclaimer in the documentation and/or other materials provided 119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// with the distribution. 129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Neither the name of Google Inc. nor the names of its 139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// contributors may be used to endorse or promote products derived 149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// from this software without specific prior written permission. 159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 28b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgfunction props(x) { 29b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org var result = []; 30b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org for (var p in x) result.push(p); 31b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org return result; 32b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} 339a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 34b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgfunction A() { 35b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.a1 = 1234; 36b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.a2 = "D"; 37b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.a3 = false; 38b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} 399a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 40b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgfunction B() { 41b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.b3 = false; 42b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.b2 = "D"; 43b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.b1 = 1234; 44b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} 459a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 46b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgfunction C() { 47b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.c3 = false; 48b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.c1 = 1234; 49b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org this.c2 = "D"; 50b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} 51b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 52b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["a1", "a2", "a3"], props(new A())); 53b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["b3", "b2", "b1"], props(new B())); 54b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["c3", "c1", "c2"], props(new C())); 55b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["s1", "s2", "s3"], props({s1: 0, s2: 0, s3: 0})); 56b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["s3", "s2", "s1"], props({s3: 0, s2: 0, s1: 0})); 57b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["s3", "s1", "s2"], props({s3: 0, s1: 0, s2: 0})); 58b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 59b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgvar a = new A() 60b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orga.a0 = 0; 61b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orga.a4 = 0; 62b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["a1", "a2", "a3", "a0", "a4"], props(a)); 63b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 64b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgvar b = new B() 65b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgb.b4 = 0; 66b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgb.b0 = 0; 67b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["b3", "b2", "b1", "b4", "b0"], props(b)); 68b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 69b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgvar o1 = {s1: 0, s2: 0, s3: 0} 70b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgo1.s0 = 0; 71b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgo1.s4 = 0; 72b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["s1", "s2", "s3", "s0", "s4"], props(o1)); 73b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 74b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgvar o2 = {s3: 0, s2: 0, s1: 0} 75b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgo2.s4 = 0; 76b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgo2.s0 = 0; 77b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgassertArrayEquals(["s3", "s2", "s1", "s4", "s0"], props(o2)); 78