Index: src/parsing/parser.h |
diff --git a/src/parsing/parser.h b/src/parsing/parser.h |
index 6ab00c654ab6d63674d51e3c756d44842c5ed6c4..3f4092939d0ad95bdfee02ba9b47c80a2d6fdcee 100644 |
--- a/src/parsing/parser.h |
+++ b/src/parsing/parser.h |
@@ -529,7 +529,11 @@ class ParserTraits { |
V8_INLINE void AddParameterInitializationBlock( |
const ParserFormalParameters& parameters, |
- ZoneList<v8::internal::Statement*>* body, bool* ok); |
+ ZoneList<v8::internal::Statement*>* body, bool is_async, bool* ok); |
+ |
+ void ParseAsyncArrowSingleExpressionBody( |
+ ZoneList<Statement*>* body, bool accept_IN, |
+ Type::ExpressionClassifier* classifier, int pos, bool* ok); |
V8_INLINE Scope* NewScope(Scope* parent_scope, ScopeType scope_type, |
FunctionKind kind = kNormalFunction); |
@@ -965,6 +969,12 @@ class Parser : public ParserBase<ParserTraits> { |
ZoneList<const AstRawString*>* names, ForStatement* loop, Statement* init, |
Expression* cond, Statement* next, Statement* body, bool* ok); |
+ void DesugarAsyncFunctionBody(const AstRawString* function_name, Scope* scope, |
+ ZoneList<Statement*>* body, |
+ Type::ExpressionClassifier* classifier, |
+ FunctionKind kind, FunctionBody type, |
+ bool accept_IN, int pos, bool* ok); |
+ |
void RewriteDoExpression(Expression* expr, bool* ok); |
FunctionLiteral* ParseFunctionLiteral( |
@@ -1035,6 +1045,7 @@ class Parser : public ParserBase<ParserTraits> { |
Block* BuildParameterInitializationBlock( |
const ParserFormalParameters& parameters, bool* ok); |
+ Block* BuildRejectPromiseOnException(Block* block); |
// Consumes the ending }. |
ZoneList<Statement*>* ParseEagerFunctionBody( |
@@ -1079,6 +1090,10 @@ class Parser : public ParserBase<ParserTraits> { |
friend class InitializerRewriter; |
void RewriteParameterInitializer(Expression* expr, Scope* scope); |
+ Expression* EmitCreateJSGeneratorObject(int pos); |
+ Expression* EmitPromiseResolve(Expression* value, int pos); |
+ Expression* EmitPromiseReject(Expression* value, int pos); |
+ |
Scanner scanner_; |
PreParser* reusable_preparser_; |
Scope* original_scope_; // for ES5 function declarations in sloppy eval |
@@ -1248,14 +1263,18 @@ void ParserTraits::DeclareFormalParameter( |
} |
} |
- |
void ParserTraits::AddParameterInitializationBlock( |
const ParserFormalParameters& parameters, |
- ZoneList<v8::internal::Statement*>* body, bool* ok) { |
+ ZoneList<v8::internal::Statement*>* body, bool is_async, bool* ok) { |
if (!parameters.is_simple) { |
auto* init_block = |
parser_->BuildParameterInitializationBlock(parameters, ok); |
if (!*ok) return; |
+ |
+ if (is_async) { |
+ init_block = parser_->BuildRejectPromiseOnException(init_block); |
+ } |
+ |
if (init_block != nullptr) { |
body->Add(init_block, parser_->zone()); |
} |