| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 4ddb6c18fc46e28c706c0b229255a2e81fa2a32a..2f2a04980fcfe7f7c1e67f6ba0eee8b9584c3e54 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -15,6 +15,7 @@
|
| #include "src/compiler.h"
|
| #include "src/messages.h"
|
| #include "src/preparser.h"
|
| +#include "src/rewriter.h"
|
| #include "src/runtime/runtime.h"
|
| #include "src/scanner-character-streams.h"
|
| #include "src/scopeinfo.h"
|
| @@ -924,6 +925,7 @@ Parser::Parser(ParseInfo* info)
|
| set_allow_harmony_new_target(FLAG_harmony_new_target);
|
| set_allow_strong_mode(FLAG_strong_mode);
|
| set_allow_legacy_const(FLAG_legacy_const);
|
| + set_allow_do_expression_parsing(FLAG_do_expression_parsing);
|
| for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount;
|
| ++feature) {
|
| use_counts_[feature] = 0;
|
| @@ -4026,6 +4028,24 @@ void ParserTraits::ParseArrowFunctionFormalParameters(
|
| }
|
|
|
|
|
| +DoExpression* Parser::ParseDoExpression(bool* ok) {
|
| + // AssignmentExpression ::
|
| + // do '{' StatementList '}'
|
| + int pos = peek_position();
|
| +
|
| + Expect(Token::DO, CHECK_OK);
|
| + Variable* result =
|
| + scope_->NewTemporary(ast_value_factory()->dot_result_string());
|
| + Block* block = ParseScopedBlock(nullptr, CHECK_OK);
|
| + DoExpression* expr = factory()->NewDoExpression(block, result, pos);
|
| + if (!Rewriter::Rewrite(this, expr, ast_value_factory())) {
|
| + *ok = false;
|
| + return nullptr;
|
| + }
|
| + return expr;
|
| +}
|
| +
|
| +
|
| void ParserTraits::ParseArrowFunctionFormalParameterList(
|
| ParserFormalParameters* parameters, Expression* expr,
|
| const Scanner::Location& params_loc,
|
| @@ -4768,6 +4788,7 @@ PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
|
| SET_ALLOW(harmony_spread_arrays);
|
| SET_ALLOW(harmony_new_target);
|
| SET_ALLOW(strong_mode);
|
| + SET_ALLOW(do_expression_parsing);
|
| #undef SET_ALLOW
|
| }
|
| PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction(
|
|
|