| Index: src/scopes.cc
|
| diff --git a/src/scopes.cc b/src/scopes.cc
|
| index 70e11ed4399138d418f1f00c50772481ce7a3bca..7d9bce5c40da0d442d5084ebe4ee7a0b6dfa5e27 100644
|
| --- a/src/scopes.cc
|
| +++ b/src/scopes.cc
|
| @@ -120,7 +120,7 @@ Scope::Scope(Type type)
|
| params_(0),
|
| unresolved_(0),
|
| decls_(0) {
|
| - SetDefaults(type, NULL, NULL);
|
| + SetDefaults(type, NULL, Handle<SerializedScopeInfo>::null());
|
| ASSERT(!resolved());
|
| }
|
|
|
| @@ -132,7 +132,7 @@ Scope::Scope(Scope* outer_scope, Type type)
|
| params_(4),
|
| unresolved_(16),
|
| decls_(4) {
|
| - SetDefaults(type, outer_scope, NULL);
|
| + SetDefaults(type, outer_scope, Handle<SerializedScopeInfo>::null());
|
| // At some point we might want to provide outer scopes to
|
| // eval scopes (by walking the stack and reading the scope info).
|
| // In that case, the ASSERT below needs to be adjusted.
|
| @@ -142,14 +142,14 @@ Scope::Scope(Scope* outer_scope, Type type)
|
| }
|
|
|
|
|
| -Scope::Scope(Scope* inner_scope, SerializedScopeInfo* scope_info)
|
| +Scope::Scope(Scope* inner_scope, Handle<SerializedScopeInfo> scope_info)
|
| : inner_scopes_(4),
|
| variables_(),
|
| temps_(4),
|
| params_(4),
|
| unresolved_(16),
|
| decls_(4) {
|
| - ASSERT(scope_info != NULL);
|
| + ASSERT(!scope_info.is_null());
|
| SetDefaults(FUNCTION_SCOPE, NULL, scope_info);
|
| ASSERT(resolved());
|
| if (scope_info->HasHeapAllocatedLocals()) {
|
| @@ -181,6 +181,33 @@ Scope::Scope(Scope* inner_scope, SerializedScopeInfo* scope_info)
|
| }
|
|
|
|
|
| +void Scope::SetDefaults(Type type,
|
| + Scope* outer_scope,
|
| + Handle<SerializedScopeInfo> scope_info) {
|
| + outer_scope_ = outer_scope;
|
| + type_ = type;
|
| + scope_name_ = FACTORY->empty_symbol();
|
| + dynamics_ = NULL;
|
| + receiver_ = NULL;
|
| + function_ = NULL;
|
| + arguments_ = NULL;
|
| + arguments_shadow_ = NULL;
|
| + illegal_redecl_ = NULL;
|
| + scope_inside_with_ = false;
|
| + scope_contains_with_ = false;
|
| + scope_calls_eval_ = false;
|
| + // Inherit the strict mode from the parent scope.
|
| + strict_mode_ = (outer_scope != NULL) && outer_scope->strict_mode_;
|
| + outer_scope_calls_eval_ = false;
|
| + inner_scope_calls_eval_ = false;
|
| + outer_scope_is_eval_scope_ = false;
|
| + force_eager_compilation_ = false;
|
| + num_stack_slots_ = 0;
|
| + num_heap_slots_ = 0;
|
| + scope_info_ = scope_info;
|
| +}
|
| +
|
| +
|
| Scope* Scope::DeserializeScopeChain(CompilationInfo* info,
|
| Scope* global_scope) {
|
| ASSERT(!info->closure().is_null());
|
| @@ -193,8 +220,8 @@ Scope* Scope::DeserializeScopeChain(CompilationInfo* info,
|
| JSFunction* current = *info->closure();
|
| do {
|
| current = current->context()->closure();
|
| - SerializedScopeInfo* scope_info = current->shared()->scope_info();
|
| - if (scope_info != SerializedScopeInfo::Empty()) {
|
| + Handle<SerializedScopeInfo> scope_info(current->shared()->scope_info());
|
| + if (*scope_info != SerializedScopeInfo::Empty()) {
|
| scope = new Scope(scope, scope_info);
|
| if (innermost_scope == NULL) innermost_scope = scope;
|
| } else {
|
|
|