| Index: src/parsing/preparser.h | 
| diff --git a/src/parsing/preparser.h b/src/parsing/preparser.h | 
| index c803928fd8e30582acf74c3657e3f40f05660241..c61eb608293f4521ee82d411f5c7692ae804d50b 100644 | 
| --- a/src/parsing/preparser.h | 
| +++ b/src/parsing/preparser.h | 
| @@ -55,6 +55,12 @@ class PreParserIdentifier { | 
| static PreParserIdentifier Constructor() { | 
| return PreParserIdentifier(kConstructorIdentifier); | 
| } | 
| +  static PreParserIdentifier Async() { | 
| +    return PreParserIdentifier(kAsyncIdentifier); | 
| +  } | 
| +  static PreParserIdentifier Await() { | 
| +    return PreParserIdentifier(kAwaitIdentifier); | 
| +  } | 
| bool IsEval() const { return type_ == kEvalIdentifier; } | 
| bool IsArguments() const { return type_ == kArgumentsIdentifier; } | 
| bool IsEvalOrArguments() const { return IsEval() || IsArguments(); } | 
| @@ -64,7 +70,12 @@ class PreParserIdentifier { | 
| bool IsYield() const { return type_ == kYieldIdentifier; } | 
| bool IsPrototype() const { return type_ == kPrototypeIdentifier; } | 
| bool IsConstructor() const { return type_ == kConstructorIdentifier; } | 
| -  bool IsFutureReserved() const { return type_ == kFutureReservedIdentifier; } | 
| +  bool IsFutureReserved() const { | 
| +    // TODO(caitp): include `kAwaitIdentifier` when parsing a Module | 
| +    return type_ == kFutureReservedIdentifier; | 
| +  } | 
| +  bool IsAsync() const { return type_ == kAsyncIdentifier; } | 
| +  bool IsAwait() const { return type_ == kAwaitIdentifier; } | 
| bool IsFutureStrictReserved() const { | 
| return type_ == kFutureStrictReservedIdentifier || | 
| type_ == kLetIdentifier || type_ == kStaticIdentifier || | 
| @@ -91,7 +102,9 @@ class PreParserIdentifier { | 
| kArgumentsIdentifier, | 
| kUndefinedIdentifier, | 
| kPrototypeIdentifier, | 
| -    kConstructorIdentifier | 
| +    kConstructorIdentifier, | 
| +    kAsyncIdentifier, | 
| +    kAwaitIdentifier | 
| }; | 
|  | 
| explicit PreParserIdentifier(Type type) : type_(type) {} | 
| @@ -597,6 +610,14 @@ class PreParserTraits { | 
| return identifier.IsArguments(); | 
| } | 
|  | 
| +  static bool IsAsync(PreParserIdentifier identifier) { | 
| +    return identifier.IsAsync(); | 
| +  } | 
| + | 
| +  static bool IsAwait(PreParserIdentifier identifier) { | 
| +    return identifier.IsAwait(); | 
| +  } | 
| + | 
| static bool IsEvalOrArguments(PreParserIdentifier identifier) { | 
| return identifier.IsEvalOrArguments(); | 
| } | 
| @@ -832,6 +853,8 @@ class PreParserTraits { | 
| PreParserExpression expression, const Scanner::Location& params_loc, | 
| Scanner::Location* duplicate_loc, bool* ok); | 
|  | 
| +  V8_INLINE PreParserExpression ParseAsyncFunctionExpression(bool* ok); | 
| + | 
| void ReindexLiterals(const PreParserFormalParameters& paramaters) {} | 
|  | 
| struct TemplateLiteralState {}; | 
| @@ -900,6 +923,11 @@ class PreParserTraits { | 
| PreParserExpressionList args, | 
| int pos); | 
|  | 
| +  inline PreParserExpression ExpressionListToExpression( | 
| +      PreParserExpressionList args) { | 
| +    return PreParserExpression::Default(); | 
| +  } | 
| + | 
| inline void RewriteDestructuringAssignments() {} | 
|  | 
| inline PreParserExpression RewriteExponentiation(PreParserExpression left, | 
| @@ -923,6 +951,9 @@ class PreParserTraits { | 
| inline void RewriteNonPattern(Type::ExpressionClassifier* classifier, | 
| bool* ok); | 
|  | 
| +  inline PreParserExpression RewriteAwaitExpression(PreParserExpression value, | 
| +                                                    int pos); | 
| + | 
| V8_INLINE Zone* zone() const; | 
| V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const; | 
|  | 
| @@ -1025,6 +1056,8 @@ class PreParser : public ParserBase<PreParserTraits> { | 
| bool* ok); | 
| Statement ParseScopedStatement(bool legacy, bool* ok); | 
| Statement ParseFunctionDeclaration(bool* ok); | 
| +  Statement ParseAsyncFunctionDeclaration(bool* ok); | 
| +  Expression ParseAsyncFunctionExpression(bool* ok); | 
| Statement ParseClassDeclaration(bool* ok); | 
| Statement ParseBlock(bool* ok); | 
| Statement ParseVariableStatement(VariableDeclarationContext var_context, | 
| @@ -1110,6 +1143,9 @@ void PreParserTraits::ParseArrowFunctionFormalParameterList( | 
| // lists that are too long. | 
| } | 
|  | 
| +PreParserExpression PreParserTraits::ParseAsyncFunctionExpression(bool* ok) { | 
| +  return pre_parser_->ParseAsyncFunctionExpression(ok); | 
| +} | 
|  | 
| PreParserExpression PreParserTraits::ParseDoExpression(bool* ok) { | 
| return pre_parser_->ParseDoExpression(ok); | 
| @@ -1121,6 +1157,10 @@ void PreParserTraits::RewriteNonPattern(Type::ExpressionClassifier* classifier, | 
| pre_parser_->ValidateExpression(classifier, ok); | 
| } | 
|  | 
| +PreParserExpression PreParserTraits::RewriteAwaitExpression( | 
| +    PreParserExpression value, int pos) { | 
| +  return value; | 
| +} | 
|  | 
| Zone* PreParserTraits::zone() const { | 
| return pre_parser_->function_state_->scope()->zone(); | 
|  |