Index: src/parsing/preparser.cc |
diff --git a/src/parsing/preparser.cc b/src/parsing/preparser.cc |
index 0377a1b9d35e70ff9cb131ad061e01f7f257888f..43877b030c764c09332f6fad89e3f1b4d806c609 100644 |
--- a/src/parsing/preparser.cc |
+++ b/src/parsing/preparser.cc |
@@ -310,8 +310,14 @@ void PreParser::DeclareAndInitializeVariables( |
DCHECK(track_unresolved_variables_); |
for (auto variable : *(declaration->pattern.variables_)) { |
declaration_descriptor->scope->RemoveUnresolved(variable); |
- scope()->DeclareVariableName(variable->raw_name(), |
- declaration_descriptor->mode); |
+ Variable* var = scope()->DeclareVariableName( |
+ variable->raw_name(), declaration_descriptor->mode); |
+ if (FLAG_preparser_scope_analysis) { |
+ MarkLoopVariableAsAssigned(declaration_descriptor->scope, var); |
+ // This is only necessary if there is an initializer, but we don't have |
+ // that information here. Consequently, the preparser sometimes says |
+ // maybe-assigned where the parser (correctly) says never-assigned. |
+ } |
if (names) { |
names->Add(variable->raw_name(), zone()); |
} |