// Copyright (C) 2019 Sony Interactive Entertainment Inc. 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 must preserve this context, as with a non-optional call info: | OptionalChain : ?. Arguments 1. Let thisChain be this OptionalChain. 2. Let tailCall be IsInTailPosition(thisChain). 3. Return ? EvaluateCall(baseValue, baseReference, Arguments, tailCall). features: [optional-chaining] ---*/ const a = { b() { return this._b; }, _b: { c: 42 } }; assert.sameValue(a?.b().c, 42); assert.sameValue((a?.b)().c, 42); assert.sameValue(a.b?.().c, 42); assert.sameValue((a.b)?.().c, 42); assert.sameValue(a?.b?.().c, 42); assert.sameValue((a?.b)?.().c, 42);