| Index: src/scopes.cc
|
| diff --git a/src/scopes.cc b/src/scopes.cc
|
| index 6f6032a320d30bbd2d9b7a572c77671f2eb61967..2c61a7523a6dc33402a346681dc5775eb86c2a41 100644
|
| --- a/src/scopes.cc
|
| +++ b/src/scopes.cc
|
| @@ -658,6 +658,26 @@ bool Scope::HasTrivialOuterContext() const {
|
| }
|
|
|
|
|
| +bool Scope::AllowsLazyRecompilation() const {
|
| + return !force_eager_compilation_ &&
|
| + !TrivialDeclarationScopesBeforeWithScope();
|
| +}
|
| +
|
| +
|
| +bool Scope::TrivialDeclarationScopesBeforeWithScope() const {
|
| + Scope* outer = outer_scope_;
|
| + if (outer == NULL) return false;
|
| + outer = outer->DeclarationScope();
|
| + while (outer != NULL) {
|
| + if (outer->is_with_scope()) return true;
|
| + if (outer->is_declaration_scope() && outer->num_heap_slots() > 0)
|
| + return false;
|
| + outer = outer->outer_scope_;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +
|
| int Scope::ContextChainLength(Scope* scope) {
|
| int n = 0;
|
| for (Scope* s = this; s != scope; s = s->outer_scope_) {
|
|
|