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
|
// Copyright 2020 Toru Nagashima. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-optional-chaining-chain-evaluation
description: optional call invoked on eval function should be indirect eval.
info: |
Runtime Semantics: ChainEvaluation
OptionalChain: ?. Arguments
1. Let thisChain be this OptionalChain.
2. Let tailCall be IsInTailPosition(thisChain).
3. Return ? EvaluateCall(baseValue, baseReference, Arguments, tailCall).
Runtime Semantics: EvaluateCall ( func, ref, arguments, tailPosition )
...
7. Let result be Call(func, thisValue, argList).
...
eval ( x )
...
4. Return ? PerformEval(x, callerRealm, false, false).
Runtime Semantics: PerformEval ( x, callerRealm, strictCaller, direct )
features: [optional-chaining]
---*/
const a = 'global';
function fn() {
const a = 'local';
return eval?.('a');
}
assert.sameValue(fn(), 'global', 'fn() returns "global" value from indirect eval');
const b = (a => eval?.('a'))('local');
assert.sameValue(b, 'global', 'b is "global", from indirect eval not observing parameter');
reportCompare(0, 0);
|