Index: src/ast/scopes.h |
diff --git a/src/ast/scopes.h b/src/ast/scopes.h |
index 4d73536ac7dbfe400a0e4aafcc9214b37a1a5790..8180f2d4a0831da6f5d56c620b90b30fe64c9902 100644 |
--- a/src/ast/scopes.h |
+++ b/src/ast/scopes.h |
@@ -34,6 +34,10 @@ class VariableMap: public ZoneHashMap { |
MaybeAssignedFlag maybe_assigned_flag = kNotAssigned, |
bool* added = nullptr); |
+ // Records that "name" exists but doesn't create a Variable. Useful for |
+ // preparsing. |
+ void DeclareName(Zone* zone, const AstRawString* name); |
+ |
Variable* Lookup(const AstRawString* name); |
void Remove(Variable* var); |
void Add(Zone* zone, Variable* var); |
@@ -157,6 +161,8 @@ class V8_EXPORT_PRIVATE Scope : public NON_EXPORTED_BASE(ZoneObject) { |
bool* sloppy_mode_block_scope_function_redefinition, |
bool* ok); |
+ void DeclareVariableName(const AstRawString* name, VariableMode mode); |
+ |
// Declarations list. |
ThreadedList<Declaration>* declarations() { return &decls_; } |
@@ -539,7 +545,6 @@ class V8_EXPORT_PRIVATE Scope : public NON_EXPORTED_BASE(ZoneObject) { |
// list along the way, so full resolution cannot be done afterwards. |
// If a ParseInfo* is passed, non-free variables will be resolved. |
VariableProxy* FetchFreeVariables(DeclarationScope* max_outer_scope, |
- bool try_to_resolve = true, |
ParseInfo* info = nullptr, |
VariableProxy* stack = nullptr); |
@@ -576,6 +581,7 @@ class V8_EXPORT_PRIVATE Scope : public NON_EXPORTED_BASE(ZoneObject) { |
void SetDefaults(); |
friend class DeclarationScope; |
+ friend class ScopeTestHelper; |
}; |
class DeclarationScope : public Scope { |
@@ -612,7 +618,15 @@ class DeclarationScope : public Scope { |
IsClassConstructor(function_kind()))); |
} |
- bool is_lazily_parsed() const { return is_lazily_parsed_; } |
+ bool was_lazily_parsed() const { return was_lazily_parsed_; } |
+ |
+#ifdef DEBUG |
+ void set_is_being_lazily_parsed(bool is_being_lazily_parsed) { |
+ is_being_lazily_parsed_ = is_being_lazily_parsed; |
+ } |
+ bool is_being_lazily_parsed() const { return is_being_lazily_parsed_; } |
+#endif |
+ |
bool ShouldEagerCompile() const; |
void set_should_eager_compile(); |
@@ -815,7 +829,11 @@ class DeclarationScope : public Scope { |
// This scope uses "super" property ('super.foo'). |
bool scope_uses_super_property_ : 1; |
bool should_eager_compile_ : 1; |
- bool is_lazily_parsed_ : 1; |
+ // Set to true after we have finished lazy parsing the scope. |
+ bool was_lazily_parsed_ : 1; |
+#if DEBUG |
+ bool is_being_lazily_parsed_ : 1; |
+#endif |
// Parameter list in source order. |
ZoneList<Variable*> params_; |