| Index: src/parsing/preparser.cc
 | 
| diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc
 | 
| index 8eb11366653576f3e68dbec44ec5813d4e59db0d..f0fee8f3e9ba892f9966b12f15243dd9d9d910e0 100644
 | 
| --- a/src/parsing/preparser.cc
 | 
| +++ b/src/parsing/preparser.cc
 | 
| @@ -854,11 +854,13 @@ PreParserExpression PreParser::ParseClassLiteral(
 | 
|    Expect(Token::LBRACE, CHECK_OK);
 | 
|    while (peek() != Token::RBRACE) {
 | 
|      if (Check(Token::SEMICOLON)) continue;
 | 
| +    IdentifierT private_name;
 | 
|      bool is_computed_name = false;  // Classes do not care about computed
 | 
|                                      // property names here.
 | 
|      ExpressionClassifier property_classifier(this);
 | 
| -    ParseClassPropertyDefinition(&checker, has_extends, &is_computed_name,
 | 
| -                                 &has_seen_constructor, CHECK_OK);
 | 
| +    ParseClassPropertyDefinition(&checker, has_extends, &private_name,
 | 
| +                                 &is_computed_name, &has_seen_constructor,
 | 
| +                                 CHECK_OK);
 | 
|      ValidateExpression(CHECK_OK);
 | 
|      impl()->AccumulateFormalParameterContainmentErrors();
 | 
|    }
 | 
| @@ -902,6 +904,15 @@ PreParserExpression PreParser::ParseDoExpression(bool* ok) {
 | 
|    return PreParserExpression::Default();
 | 
|  }
 | 
|  
 | 
| +PreParserExpression PreParser::ParsePrivateFieldReference(
 | 
| +    PreParserExpression base, bool* ok) {
 | 
| +  // PrimaryExpression ::
 | 
| +  //     PrivateName
 | 
| +  Expect(Token::HASH, CHECK_OK);
 | 
| +  ParseIdentifierName(CHECK_OK);
 | 
| +  return PreParserExpression::Property();
 | 
| +}
 | 
| +
 | 
|  void PreParser::ParseAsyncArrowSingleExpressionBody(PreParserStatementList body,
 | 
|                                                      bool accept_IN, int pos,
 | 
|                                                      bool* ok) {
 | 
| 
 |