tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);