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
|
var nonSyntacticEnvironment = { field: 10 };
var source = `
function f() {
function g() {
function h() {
// Load out of non syntactic environment.
return field;
}
return h();
}
return g();
}
f()`
function check(before, after) {
var code = cacheEntry(source);
var res = evaluate(code, before);
assertEq(res, 10);
res = evaluate(code, after);
assertEq(res, 10);
}
check({ envChainObject: nonSyntacticEnvironment, saveIncrementalBytecode: true, },
{ envChainObject: nonSyntacticEnvironment, loadBytecode: true })
try {
var global = newGlobal();
global.field = 10;
check({ envChainObject: nonSyntacticEnvironment, saveIncrementalBytecode: true, },
{ global: global, loadBytecode: true })
// Should have thrown
assertEq(false, true)
} catch (e) {
assertEq(/Incompatible cache contents/.test(e.message), true);
}
try {
check({ global: global, saveIncrementalBytecode: true },
{ envChainObject: nonSyntacticEnvironment, loadBytecode: true })
// Should have thrown
assertEq(false, true)
} catch (e) {
assertEq(/Incompatible cache contents/.test(e.message), true);
}
var nonSyntacticEnvironmentTwo = { field: 10 };
check({ envChainObject: nonSyntacticEnvironment, saveIncrementalBytecode: true, },
{ envChainObject: nonSyntacticEnvironmentTwo, loadBytecode: true })
|