call-expression.js (1445B)
1 // Copyright 2019 Google, Inc. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 esid: prod-OptionalExpression 5 description: > 6 optional chain on call expression 7 info: | 8 Left-Hand-Side Expressions 9 OptionalExpression: 10 CallExpression OptionalChain 11 features: [optional-chaining] 12 ---*/ 13 14 // CallExpression CoverCallExpressionAndAsyncArrowHead 15 function fn () { 16 return {a: 33}; 17 }; 18 const obj = { 19 fn () { 20 return 44; 21 } 22 } 23 assert.sameValue(33, fn()?.a); 24 assert.sameValue(undefined, fn()?.b); 25 assert.sameValue(44, obj?.fn()); 26 27 // CallExpression SuperCall 28 class A {} 29 class B extends A { 30 constructor () { 31 assert.sameValue(undefined, super()?.a); 32 } 33 } 34 new B(); 35 36 // CallExpression Arguments 37 function fn2 () { 38 return () => { 39 return {a: 66}; 40 }; 41 } 42 function fn3 () { 43 return () => { 44 return null; 45 }; 46 } 47 assert.sameValue(66, fn2()()?.a); 48 assert.sameValue(undefined, fn3()()?.a); 49 50 // CallExpression [Expression] 51 function fn4 () { 52 return [{a: 77}]; 53 } 54 function fn5 () { 55 return []; 56 } 57 assert.sameValue(77, fn4()[0]?.a); 58 assert.sameValue(undefined, fn5()[0]?.a); 59 60 // CallExpression .IdentifierName 61 function fn6 () { 62 return { 63 a: { 64 b: 88 65 } 66 }; 67 } 68 assert.sameValue(88, fn6().a?.b); 69 assert.sameValue(undefined, fn6().b?.c); 70 71 // CallExpression TemplateLiteral 72 function fn7 () { 73 return () => {}; 74 } 75 assert.sameValue(undefined, fn7()`hello`?.a); 76 77 reportCompare(0, 0);