Index: src/ast/scopes.h |
diff --git a/src/ast/scopes.h b/src/ast/scopes.h |
index 6f3702132a222cfea136786891272c2cd5c10c26..d686e7d4b69d93d159b851cdc1dc4da5acecc92d 100644 |
--- a/src/ast/scopes.h |
+++ b/src/ast/scopes.h |
@@ -21,6 +21,7 @@ class AstRawString; |
class Declaration; |
class ParseInfo; |
class SloppyBlockFunctionStatement; |
+class Statement; |
class StringSet; |
class VariableProxy; |
@@ -37,7 +38,7 @@ class VariableMap: public ZoneHashMap { |
// Records that "name" exists (if not recorded yet) but doesn't create a |
// Variable. Useful for preparsing. |
- void DeclareName(Zone* zone, const AstRawString* name); |
+ void DeclareName(Zone* zone, const AstRawString* name, VariableMode mode); |
Variable* Lookup(const AstRawString* name); |
void Remove(Variable* var); |
@@ -48,9 +49,24 @@ class VariableMap: public ZoneHashMap { |
// Sloppy block-scoped function declarations to var-bind |
class SloppyBlockFunctionMap : public ZoneHashMap { |
public: |
+ class Delegate : public ZoneObject { |
+ public: |
+ explicit Delegate(Scope* scope, |
+ SloppyBlockFunctionStatement* statement = nullptr) |
+ : scope_(scope), statement_(statement), next_(nullptr) {} |
+ void set_statement(Statement* statement); |
+ void set_next(Delegate* next) { next_ = next; } |
+ Delegate* next() const { return next_; } |
+ Scope* scope() const { return scope_; } |
+ |
+ private: |
+ Scope* scope_; |
+ SloppyBlockFunctionStatement* statement_; |
+ Delegate* next_; |
+ }; |
+ |
explicit SloppyBlockFunctionMap(Zone* zone); |
- void Declare(Zone* zone, const AstRawString* name, |
- SloppyBlockFunctionStatement* statement); |
+ void Declare(Zone* zone, const AstRawString* name, Delegate* delegate); |
}; |
enum class AnalyzeMode { kRegular, kDebugger }; |
@@ -747,10 +763,9 @@ class DeclarationScope : public Scope { |
// initializers. |
void AddLocal(Variable* var); |
- void DeclareSloppyBlockFunction(const AstRawString* name, |
- SloppyBlockFunctionStatement* statement) { |
- sloppy_block_function_map_.Declare(zone(), name, statement); |
- } |
+ void DeclareSloppyBlockFunction( |
+ const AstRawString* name, Scope* scope, |
+ SloppyBlockFunctionStatement* statement = nullptr); |
// Go through sloppy_block_function_map_ and hoist those (into this scope) |
// which should be hoisted. |