docs: function parseAssignmentExpression() {
          var token, expr, right, list, startToken;
  
          startToken = lookahead;
          token = lookahead;
  
          expr = parseConditionalExpression();
  
          if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {
              list = reinterpretAsCoverFormalsList(expr);
  
              if (list) {
                  return parseArrowFunctionExpression(list, new WrappingNode(startToken));
              }
          }
  
          if (matchAssign()) {
              // LeftHandSideExpression
              if (!isLeftHandSide(expr)) {
                  tolerateError(Messages.InvalidLHSInAssignment);
              }
  
              // 11.13.1
              if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
                  tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);
              }
  
              token = lex();
              right = parseAssignmentExpression();
              expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);
          }
  
          return expr;
      }