call-expression.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. // CallExpression CoverCallExpressionAndAsyncArrowHead
  14. function fn () {
  15. return {a: 33};
  16. };
  17. const obj = {
  18. fn () {
  19. return 44;
  20. }
  21. }
  22. assert.sameValue(33, fn()?.a);
  23. assert.sameValue(undefined, fn()?.b);
  24. assert.sameValue(44, obj?.fn());
  25. // CallExpression SuperCall
  26. class A {}
  27. class B extends A {
  28. constructor () {
  29. assert.sameValue(undefined, super()?.a);
  30. }
  31. }
  32. new B();
  33. // CallExpression Arguments
  34. function fn2 () {
  35. return () => {
  36. return {a: 66};
  37. };
  38. }
  39. function fn3 () {
  40. return () => {
  41. return null;
  42. };
  43. }
  44. assert.sameValue(66, fn2()()?.a);
  45. assert.sameValue(undefined, fn3()()?.a);
  46. // CallExpression [Expression]
  47. function fn4 () {
  48. return [{a: 77}];
  49. }
  50. function fn5 () {
  51. return [];
  52. }
  53. assert.sameValue(77, fn4()[0]?.a);
  54. assert.sameValue(undefined, fn5()[0]?.a);
  55. // CallExpression .IdentifierName
  56. function fn6 () {
  57. return {
  58. a: {
  59. b: 88
  60. }
  61. };
  62. }
  63. assert.sameValue(88, fn6().a?.b);
  64. assert.sameValue(undefined, fn6().b?.c);
  65. // CallExpression TemplateLiteral
  66. function fn7 () {
  67. return () => {};
  68. }
  69. assert.sameValue(undefined, fn7()`hello`?.a);