// Copyright 2019 Google, Inc. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: prod-OptionalExpression description: > optional chain on call expression info: | Left-Hand-Side Expressions OptionalExpression: CallExpression OptionalChain features: [optional-chaining] ---*/ // CallExpression CoverCallExpressionAndAsyncArrowHead function fn () { return {a: 33}; }; const obj = { fn () { return 44; } } assert.sameValue(33, fn()?.a); assert.sameValue(undefined, fn()?.b); assert.sameValue(44, obj?.fn()); // CallExpression SuperCall class A {} class B extends A { constructor () { assert.sameValue(undefined, super()?.a); } } new B(); // CallExpression Arguments function fn2 () { return () => { return {a: 66}; }; } function fn3 () { return () => { return null; }; } assert.sameValue(66, fn2()()?.a); assert.sameValue(undefined, fn3()()?.a); // CallExpression [Expression] function fn4 () { return [{a: 77}]; } function fn5 () { return []; } assert.sameValue(77, fn4()[0]?.a); assert.sameValue(undefined, fn5()[0]?.a); // CallExpression .IdentifierName function fn6 () { return { a: { b: 88 } }; } assert.sameValue(88, fn6().a?.b); assert.sameValue(undefined, fn6().b?.c); // CallExpression TemplateLiteral function fn7 () { return () => {}; } assert.sameValue(undefined, fn7()`hello`?.a); reportCompare(0, 0);