blob: 7c69e959187ec4faa2d9b1255b78c472ce6bb420 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
// Make sure that objtypespec add-property optimization
// is correct when different properties are added on different paths.
// Each test runs in two flavors:
// a) without field pre-initialization, such that fields added in test code may be marked as fixed and
// caches remain unpopulated until JIT time.
// a) with field pre-initialization, such that fields added in test code have populated caches.
function TestObjectForFoo1() {
}
function makeObjectForFoo1a() {
return new TestObjectForFoo1();
}
function foo1(o, JIT) {
o.x = 100; // t1->t2
if (!JIT) {
o.y = 200; // t2->t3
}
o.z = 300; // t3->t4
var sum = 0;
for (var s in o) {
WScript.Echo(s + ": " + o[s]);
sum += o[s];
}
return sum;
}
WScript.Echo(foo1(makeObjectForFoo1a(), false));
WScript.Echo(foo1(makeObjectForFoo1a(), true));
function makeObjectForFoo1b() {
var o = new TestObjectForFoo1();
o.x = 0;
o.y = 0;
o.z = 0;
return new TestObjectForFoo1();
}
function foo1(o, JIT) {
o.x = 100; // t1->t2
if (!JIT) {
o.y = 200; // t2->t3
}
o.z = 300; // t3->t4
var sum = 0;
for (var s in o) {
WScript.Echo(s + ": " + o[s]);
sum += o[s];
}
return sum;
}
WScript.Echo(foo1(makeObjectForFoo1b(), false));
WScript.Echo(foo1(makeObjectForFoo1b(), true));
function TestObjectForFoo2() {
}
function makeObjectForFoo2a() {
return new TestObjectForFoo2();
}
function foo2a(o, JIT) {
o.x = 100; // t1->t2
if (!JIT) {
o.y = 200; // t2->t3
}
o.z = 300; // t3->t4
o.y = 500;
var sum = 0;
for (var s in o) {
WScript.Echo(s + ": " + o[s]);
sum += o[s];
}
return sum;
}
WScript.Echo(foo2a(makeObjectForFoo2a(), false));
WScript.Echo(foo2a(makeObjectForFoo2a(), true));
function makeObjectForFoo2b() {
var o = new TestObjectForFoo2();
o.x = 0;
o.y = 0;
o.z = 0;
return new TestObjectForFoo2();
}
function foo2b(o, JIT) {
o.x = 100; // t1->t2
if (!JIT) {
o.y = 200; // t2->t3
}
o.z = 300; // t3->t4
o.y = 500;
var sum = 0;
for (var s in o) {
WScript.Echo(s + ": " + o[s]);
sum += o[s];
}
return sum;
}
WScript.Echo(foo2b(makeObjectForFoo2b(), false));
WScript.Echo(foo2b(makeObjectForFoo2b(), true));
function TestObjectForFoo3() {
}
function makeObjectForFoo3a() {
return new TestObjectForFoo3();
}
function foo3(o, Int)
{
o.p1 = 1;
o.p2 = (!Int ? (o.p5 = 100):100);
if (Int)
{
o.p3 = 2;
}
o.p4 = 3;
for (var i in o)
{
WScript.Echo(i + ":" + o[i]);
}
WScript.Echo("END");
WScript.Echo("");
}
foo3(makeObjectForFoo3a(), true);
foo3(makeObjectForFoo3a(), false)
function makeObjectForFoo3b() {
var o = new TestObjectForFoo3();
o.p1 = 0;
o.p2 = 0;
o.p3 = 0;
o.p4 = 0;
return new TestObjectForFoo3();
}
function foo3(o, Int)
{
o.p1 = 1;
o.p2 = (!Int ? (o.p5 = 100):100);
if (Int)
{
o.p3 = 2;
}
o.p4 = 3;
for (var i in o)
{
WScript.Echo(i + ":" + o[i]);
}
WScript.Echo("END");
WScript.Echo("");
}
foo3(makeObjectForFoo3a(), true);
foo3(makeObjectForFoo3a(), false)
function test5() {
var window = function () {
};
z = {
z: Math.pow(),
set b(u3056) {
},
b: 4277,
z: window
};
}
test5();
test5();
test5();
test5();
test5();
function printAll(n, v) {
for (var c in v)
printAll(n, v[c]);
}
printAll('this', this);