Index: src/parsing/preparser.cc |
diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc |
index 88470f7fa91b66374738d402ff557cb7028eae12..f7d69cf7444f585cfc14840596e145902926e32c 100644 |
--- a/src/parsing/preparser.cc |
+++ b/src/parsing/preparser.cc |
@@ -228,7 +228,7 @@ PreParserExpression PreParser::ExpressionFromIdentifier( |
scope()->NewUnresolved(&factory, name.string_, start_position, end_position, |
NORMAL_VARIABLE); |
} |
- return PreParserExpression::FromIdentifier(name); |
+ return PreParserExpression::FromIdentifier(name, zone()); |
} |
void PreParser::DeclareAndInitializeVariables( |
@@ -236,20 +236,23 @@ void PreParser::DeclareAndInitializeVariables( |
const DeclarationDescriptor* declaration_descriptor, |
const DeclarationParsingResult::Declaration* declaration, |
ZoneList<const AstRawString*>* names, bool* ok) { |
- if (declaration->pattern.string_) { |
+ if (declaration->pattern.identifiers_ != nullptr) { |
+ DCHECK(FLAG_lazy_inner_functions); |
/* Mimic what Parser does when declaring variables (see |
Parser::PatternRewriter::VisitVariableProxy). |
var + no initializer -> RemoveUnresolved |
- let + no initializer -> RemoveUnresolved |
+ let / const + no initializer -> RemoveUnresolved |
var + initializer -> RemoveUnresolved followed by NewUnresolved |
- let + initializer -> RemoveUnresolved |
+ let / const + initializer -> RemoveUnresolved |
*/ |
if (declaration->initializer.IsEmpty() || |
- declaration_descriptor->mode == VariableMode::LET) { |
- declaration_descriptor->scope->RemoveUnresolved( |
- declaration->pattern.string_); |
+ (declaration_descriptor->mode == VariableMode::LET || |
+ declaration_descriptor->mode == VariableMode::CONST)) { |
+ for (auto identifier : *(declaration->pattern.identifiers_)) { |
+ declaration_descriptor->scope->RemoveUnresolved(identifier); |
+ } |
} |
} |
} |