docs: function parseLeftHandSideExpressionAllowCall() {
          var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn;
  
          startToken = lookahead;
          state.allowIn = true;
  
          if (matchKeyword('super') && state.inFunctionBody) {
              expr = new Node();
              lex();
              expr = expr.finishSuper();
              if (!match('(') && !match('.') && !match('[')) {
                  throwUnexpectedToken(lookahead);
              }
          } else {
              expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);
          }
  
          for (;;) {
              if (match('.')) {
                  isBindingElement = false;
                  isAssignmentTarget = true;
                  property = parseNonComputedMember();
                  expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);
              } else if (match('(')) {
                  isBindingElement = false;
                  isAssignmentTarget = false;
                  args = parseArguments();
                  expr = new WrappingNode(startToken).finishCallExpression(expr, args);
              } else if (match('[')) {
                  isBindingElement = false;
                  isAssignmentTarget = true;
                  property = parseComputedMember();
                  expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);
              } else if (lookahead.type === Token.Template && lookahead.head) {
                  quasi = parseTemplateLiteral();
                  expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);
              } else {
                  break;
              }
          }
          state.allowIn = previousAllowIn;
  
          return expr;
      }