Index: src/parsing/parser.h |
diff --git a/src/parsing/parser.h b/src/parsing/parser.h |
index af4aa1013ac7c5dc165a5417a41907bd96621b45..f2fb7d3cae50806d0a1d55f5435cff87a151f446 100644 |
--- a/src/parsing/parser.h |
+++ b/src/parsing/parser.h |
@@ -824,6 +824,20 @@ class V8_EXPORT_PRIVATE Parser : public NON_EXPORTED_BASE(ParserBase<Parser>) { |
} |
} |
+ // Pessimistically assume that top-level variables will be assigned. |
+ // |
+ // Top-level variables in a script can be accessed by other scripts or even |
+ // become global properties. While this does not apply to top-level variables |
+ // in a module (assuming they are not exported), we must still mark these as |
+ // assigned because they might be accessed by a lazily parsed top-level |
+ // function, which, for efficiency, we preparse without variable tracking. |
+ V8_INLINE static void MarkTopLevelVariableAsAssigned(Scope* scope, |
+ VariableProxy* proxy) { |
+ if (scope->is_script_scope() || scope->is_module_scope()) { |
+ proxy->set_is_assigned(); |
+ } |
+ } |
+ |
// Returns true if we have a binary expression between two numeric |
// literals. In that case, *x will be changed to an expression which is the |
// computed value. |