Index: src/scopes.h |
diff --git a/src/scopes.h b/src/scopes.h |
index 26c092fe3e4d16f8dfbd86eaf172710c645e2123..16581d776f09355a099645170a69ce53bb0c18e1 100644 |
--- a/src/scopes.h |
+++ b/src/scopes.h |
@@ -341,7 +341,12 @@ class Scope: public ZoneObject { |
bool is_nonlinear() const { return scope_nonlinear_; } |
// Whether this needs to be represented by a runtime context. |
- bool NeedsContext() const { return num_heap_slots() > 0; } |
+ bool NeedsContext() const { |
+ // Catch and module scopes always have heap slots. |
+ DCHECK(!is_catch_scope() || num_heap_slots() > 0); |
+ DCHECK(!is_module_scope() || num_heap_slots() > 0); |
+ return is_with_scope() || num_heap_slots() > 0; |
+ } |
bool NeedsHomeObject() const { |
return scope_uses_super_property_ || |
@@ -519,6 +524,10 @@ class Scope: public ZoneObject { |
// The number of contexts between this and scope; zero if this == scope. |
int ContextChainLength(Scope* scope); |
+ // The maximum number of nested contexts required for this scope and any inner |
+ // scopes. |
+ int MaxNestedContextChainLength(); |
+ |
// Find the first function, script, eval or (declaration) block scope. This is |
// the scope where var declarations will be hoisted to in the implementation. |
Scope* DeclarationScope(); |