blob: f2f0013ce248507b5cbd32623b63473d6db4f606 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
// Test that objects in different compartments can have the same shape.
var g1 = newGlobal();
var g2 = newGlobal({sameZoneAs: g1});
g1.eval("x1 = {foo: 1}");
g2.eval("x2 = {foo: 2}");
assertEq(unwrappedObjectsHaveSameShape(g1.x1, g2.x2), true);
g1.eval("x1 = [1]");
g2.eval("x2 = [2]");
assertEq(unwrappedObjectsHaveSameShape(g1.x1, g2.x2), true);
g1.eval("x1 = function f(){}");
g2.eval("x2 = function f(){}");
assertEq(unwrappedObjectsHaveSameShape(g1.x1, g2.x2), true);
g1.eval("x1 = /abc/;");
g2.eval("x2 = /def/");
assertEq(unwrappedObjectsHaveSameShape(g1.x1, g2.x2), true);
// Now the same, but we change Array.prototype.__proto__.
// The arrays should no longer get the same Shape, as their
// proto chain is different.
g1 = newGlobal();
g2 = newGlobal({sameZoneAs: g1});
g1.eval("x1 = [1];");
g2.eval("Array.prototype.__proto__ = Math;");
g2.eval("x2 = [2];");
assertEq(unwrappedObjectsHaveSameShape(g1.x1, g2.x2), false);
|