| Index: src/parser.cc
 | 
| diff --git a/src/parser.cc b/src/parser.cc
 | 
| index e3a62c1ab2b93a5679f5201191bfe9d82ee26f97..666b7043468d590852ea2b914d3fc175ba39718e 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_harmony_do_expressions(FLAG_harmony_do_expressions);
 | 
|    for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount;
 | 
|         ++feature) {
 | 
|      use_counts_[feature] = 0;
 | 
| @@ -4053,6 +4055,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,
 | 
| @@ -4792,6 +4812,7 @@ PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
 | 
|      SET_ALLOW(harmony_spread_arrays);
 | 
|      SET_ALLOW(harmony_new_target);
 | 
|      SET_ALLOW(strong_mode);
 | 
| +    SET_ALLOW(harmony_do_expressions);
 | 
|  #undef SET_ALLOW
 | 
|    }
 | 
|    PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction(
 | 
| 
 |