1a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Copyright 2009 the V8 project authors. All rights reserved. 2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without 3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met: 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions of source code must retain the above copyright 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// notice, this list of conditions and the following disclaimer. 8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions in binary form must reproduce the above 9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// copyright notice, this list of conditions and the following 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// disclaimer in the documentation and/or other materials provided 11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// with the distribution. 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Neither the name of Google Inc. nor the names of its 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// contributors may be used to endorse or promote products derived 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// from this software without specific prior written permission. 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Testing that optimization of top-level object initialization doesn't 29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// break V8. 30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar x = new Object(); 32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.a = 7; 33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.b = function() { return 42; }; 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.c = 88; 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.d = "A Man Called Horse"; 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(7, x.a); 38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(42, x.b()); 39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(88, x.c); 40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("A Man Called Horse", x.d); 41a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar y = new Object(); 43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocky.a = 7; 44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocky.b = function() { return 42; }; 45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocky.c = 12 * y.a; 46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocky.d = "A Man Called Horse"; 47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(84, y.c); 49a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 50a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar z = new Object(); 51a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockz.a = 3; 52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction forty_two() { return 42; }; 53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockz.a += 4; 54a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockz.b = forty_two; 55a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockz.c = 12; 56a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockz.c *= z.a; 57a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockz.d = "A Man Called Horse"; 58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(84, z.c); 60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar x1 = new Object(); 62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar x2 = new Object(); 63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx1.a = 7; 64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx1.b = function() { return 42; }; 65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx2.a = 7; 66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx2.b = function() { return 42; }; 67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx1.c = 88; 68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx1.d = "A Man Called Horse"; 69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx2.c = 88; 70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx2.d = "A Man Called Horse"; 71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(7, x1.a); 73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(42, x1.b()); 74a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(88, x1.c); 75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("A Man Called Horse", x1.d); 76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(7, x2.a); 78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(42, x2.b()); 79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(88, x2.c); 80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("A Man Called Horse", x2.d); 81a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 82a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction Calculator(x, y) { 83a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block this.x = x; 84a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block this.y = y; 85a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 87a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockCalculator.prototype.sum = function() { return this.x + this.y; }; 88a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockCalculator.prototype.difference = function() { return this.x - this.y; }; 89a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockCalculator.prototype.product = function() { return this.x * this.y; }; 90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockCalculator.prototype.quotient = function() { return this.x / this.y; }; 91a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 92a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar calc = new Calculator(20, 10); 93a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(30, calc.sum()); 94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(10, calc.difference()); 95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(200, calc.product()); 96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(2, calc.quotient()); 97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar x = new Object(); 99a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.__defineGetter__('a', function() { return 7 }); 100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.b = function() { return 42; }; 101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.c = 88; 102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockx.d = "A Man Called Horse"; 103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 104a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(7, x.a); 105a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(42, x.b()); 106a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(88, x.c); 107a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("A Man Called Horse", x.d); 108