blob: 0fce075c5ba8227c39e90809f08ca98b3acaa0f0 (
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
setJitCompilerOption("ion.warmup.trigger", 4);
var ObjectHasPrototype = getSelfHostedValue("ObjectHasPrototype");
var StringProto = String.prototype;
var ObjectProto = Object.prototype;
function testBasic() {
var f = function() {
assertEq(ObjectHasPrototype(StringProto, ObjectProto), true);
};
for (var i = 0; i < 40; i++) {
f();
}
}
testBasic();
function testProtoChange(proto) {
var f = function(expected) {
assertEq(ObjectHasPrototype(StringProto, ObjectProto), expected);
};
var expected = true;
for (var i = 0; i < 120; i++) {
f(expected);
if (i == 40) {
Object.setPrototypeOf(StringProto, proto);
expected = false;
}
if (i == 80) {
Object.setPrototypeOf(StringProto, ObjectProto);
expected = true;
}
}
}
testProtoChange(null);
// Different singleton
testProtoChange(Function.prototype);
// native non-singleton
testProtoChange(/a/);
// non-native non-singleton
testProtoChange({});
var Int32ArrayProto = Int32Array.prototype;
var TypedArrayProto = Object.getPrototypeOf(Int32ArrayProto);
function testProtoProtoChange(proto) {
var f = function() {
assertEq(ObjectHasPrototype(Int32ArrayProto, TypedArrayProto), true);
};
for (var i = 0; i < 120; i++) {
f();
if (i == 40)
Object.setPrototypeOf(TypedArrayProto, proto);
if (i == 80)
Object.setPrototypeOf(TypedArrayProto, Object);
}
}
testProtoProtoChange(null);
// Different singleton
testProtoProtoChange(Function.prototype);
// native non-singleton
testProtoProtoChange(/a/);
// non-native non-singleton
testProtoProtoChange({});
|