blob: 99956ce8eceb374c07a3092e70256e0fcb83cfdd [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.
//-------------------------------------------------------------------------------------------------------
//Switches: -bgJit- -maxInterpretCount:2
// This test verifies that we mark all types (not just the type of the object being modified) as potentially having been
// updated whenever we a) store a property using a live cache or b) add a property via an object type spec'd instruction.
function test0(condition) {
var obj0 = {};
obj0.prop0 = 1;
var obj1 = {};
obj1.prop0 = 1;
if (condition) {
obj1 = obj0;
}
(function (o, p) {
var v = o.prop0;
p.a = 11;
p.b = 12;
o.x = 21;
o.y = 22;
})(obj0, obj1);
WScript.Echo("obj0 === obj1: " + (obj0 === obj1));
WScript.Echo("obj0: { prop0: " + obj0.prop0 + ", a: " + obj0.a + ", b: " + obj0.b + ", x: " + obj0.x + ", y: " + obj0.y + " }");
WScript.Echo("obj1: { prop0: " + obj1.prop0 + ", a: " + obj1.a + ", b: " + obj1.b + ", x: " + obj1.x + ", y: " + obj1.y + " }");
};
WScript.Echo("Test0:");
test0(false);
test0(false);
test0(true);
// This test is a slight variation of the same theme. In this case we get one of the object to modify not from an input argument,
// but from a closure slot. As a result we may not optimize its property add sequence, because the object syms are different in
// the backward pass (before copy prop changes them in the forward pass), and thus appear dead in the forward pass.
function test1(condition) {
var obj0 = {};
obj0.prop0 = 1;
var obj1 = {};
obj1.prop0 = 1;
if (condition) {
obj1 = obj0;
}
(function (o) {
var v = o.prop0;
obj1.a = 11;
obj1.b = 12;
o.x = 21;
o.y = 22;
})(obj0);
WScript.Echo("obj0 === obj1: " + (obj0 === obj1));
WScript.Echo("obj0: { prop0: " + obj0.prop0 + ", a: " + obj0.a + ", b: " + obj0.b + ", x: " + obj0.x + ", y: " + obj0.y + " }");
WScript.Echo("obj1: { prop0: " + obj1.prop0 + ", a: " + obj1.a + ", b: " + obj1.b + ", x: " + obj1.x + ", y: " + obj1.y + " }");
};
WScript.Echo("Test1:");
test1(false);
test1(false);
test1(true);