| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| // Test the happy path of the new object optimization involving script constructors. |
| WScript.Echo("Test 1:"); |
| function SimpleObject1() { |
| this.a = 1; |
| this.b = 2; |
| this.c = 3; |
| } |
| |
| SimpleObject1.prototype = { p: 0 }; |
| |
| function test1() { |
| var o = new SimpleObject1(); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test1(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test1(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test1(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 2:"); |
| function SimpleObject2(a, b, c) { |
| this.a = a; |
| this.b = b; |
| this.c = c; |
| } |
| |
| SimpleObject2.prototype = { p: 0 }; |
| |
| function test2() { |
| var o = new SimpleObject2(1, 2, 3); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test2(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test2(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test2(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 3:"); |
| function SimpleObject3(a, b, c) { |
| this.a = a; |
| this.b = b; |
| this.c = c; |
| } |
| |
| SimpleObject3.prototype = { p: 0 }; |
| |
| function test3(a, b, c) { |
| var o = new SimpleObject3(); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test3(1, 2, 3); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test3(1, 2, 3); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test3(1, 2, 3); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 4:"); |
| function SimpleObject4(a, b, c) { |
| this.a = a; |
| this.b = b; |
| this.c = c; |
| } |
| |
| SimpleObject4.prototype = { p: 0 }; |
| |
| function test4() { |
| var o = new SimpleObject4(); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test4(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| var o = test4(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test4(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 5:"); |
| function SimpleObject5(a, b, c) { |
| var o = {}; |
| o.a = a; |
| o.b = b; |
| o.c = c; |
| return o; |
| } |
| |
| SimpleObject5.prototype = { p: 0 }; |
| |
| function test5() { |
| var o = new SimpleObject5(); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test5(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| var o = test5(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test5(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 6:"); |
| function SimpleObject6(a, b, c) { |
| return a + b + c; |
| } |
| |
| SimpleObject6.prototype = { p: 0 }; |
| |
| function test6() { |
| var o = new SimpleObject6(); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test6(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| var o = test6(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test6(); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 7:"); |
| function SimpleObject7(a, b, c, condition) { |
| this.a = condition ? a : -a; |
| this.b = condition ? b : -b; |
| this.c = condition ? c : -c; |
| } |
| |
| SimpleObject7.prototype = { p: 0 }; |
| |
| function test7(a, b, c, condition) { |
| var o = new SimpleObject7(a, b, c); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = test7(1, 2, 3, false); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test7(1, 2, 3, false); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| o = test7(1, 2, 3, true); |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |
| |
| WScript.Echo("Test 8:"); |
| function SimpleObject8(a, b, c) { |
| this.a = a; |
| this.b = b; |
| this.c = c; |
| throw this; |
| } |
| |
| SimpleObject8.prototype = { p: 0 }; |
| |
| function test8(a, b, c) { |
| var o = new SimpleObject8(); |
| o.x = 4; |
| o.y = 5; |
| o.z = 6; |
| return o; |
| } |
| |
| var o = {}; |
| |
| try { |
| var o = test8(1, 2, 3); |
| } catch (ex) { |
| WScript.Echo("Exception: " + ex); |
| } |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| try { |
| o = test8(1, 2, 3); |
| } catch (ex) { |
| WScript.Echo("Exception: " + ex); |
| } |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| |
| try { |
| o = test8(1, 2, 3); |
| } catch (ex) { |
| WScript.Echo("Exception: " + ex); |
| } |
| WScript.Echo("o = { a: " + o.a + ", b: " + o.b + ", c: " + o.c + ", p: " + o.p + ", q: " + o.q + ", x: " + o.x + ", y: " + o.y + " }"); |
| WScript.Echo(""); |