Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 130 // At some point we might want to provide outer scopes to | 130 // At some point we might want to provide outer scopes to |
| 131 // eval scopes (by walking the stack and reading the scope info). | 131 // eval scopes (by walking the stack and reading the scope info). |
| 132 // In that case, the ASSERT below needs to be adjusted. | 132 // In that case, the ASSERT below needs to be adjusted. |
| 133 ASSERT_EQ(type == GLOBAL_SCOPE, outer_scope == NULL); | 133 ASSERT_EQ(type == GLOBAL_SCOPE, outer_scope == NULL); |
| 134 ASSERT(!HasIllegalRedeclaration()); | 134 ASSERT(!HasIllegalRedeclaration()); |
| 135 } | 135 } |
| 136 | 136 |
| 137 | 137 |
| 138 Scope::Scope(Scope* inner_scope, | 138 Scope::Scope(Scope* inner_scope, |
| 139 ScopeType type, | 139 ScopeType type, |
| 140 Handle<ScopeInfo> scope_info) | 140 Handle<ScopeInfo> scope_info, |
| 141 bool has_context_with_extension) | |
| 141 : isolate_(Isolate::Current()), | 142 : isolate_(Isolate::Current()), |
| 142 inner_scopes_(4), | 143 inner_scopes_(4), |
| 143 variables_(), | 144 variables_(), |
| 144 temps_(4), | 145 temps_(4), |
| 145 params_(4), | 146 params_(4), |
| 146 unresolved_(16), | 147 unresolved_(16), |
| 147 decls_(4), | 148 decls_(4), |
| 148 already_resolved_(true) { | 149 already_resolved_(true) { |
| 149 SetDefaults(type, NULL, scope_info); | 150 SetDefaults(type, NULL, scope_info); |
| 150 if (!scope_info.is_null()) { | 151 if (!scope_info.is_null() && *scope_info != ScopeInfo::Empty()) { |
|
Kevin Millikin (Chromium)
2012/02/02 08:36:13
As far as I can tell, there is no reason *at all*
ulan
2012/02/02 09:16:19
Indeed, this constructor is called only from Deser
| |
| 151 num_heap_slots_ = scope_info_->ContextLength(); | 152 num_heap_slots_ = scope_info_->ContextLength(); |
| 152 if (*scope_info != ScopeInfo::Empty()) { | 153 language_mode_ = scope_info->language_mode(); |
|
Kevin Millikin (Chromium)
2012/02/02 08:36:13
As a simple cleanup, you can get rid of this compl
| |
| 153 language_mode_ = scope_info->language_mode(); | 154 } else if (is_with_scope() || has_context_with_extension) { |
| 154 } | |
| 155 } else if (is_with_scope()) { | |
| 156 num_heap_slots_ = Context::MIN_CONTEXT_SLOTS; | 155 num_heap_slots_ = Context::MIN_CONTEXT_SLOTS; |
| 157 } | 156 } |
| 158 AddInnerScope(inner_scope); | 157 AddInnerScope(inner_scope); |
| 159 } | 158 } |
| 160 | 159 |
| 161 | 160 |
| 162 Scope::Scope(Scope* inner_scope, Handle<String> catch_variable_name) | 161 Scope::Scope(Scope* inner_scope, Handle<String> catch_variable_name) |
| 163 : isolate_(Isolate::Current()), | 162 : isolate_(Isolate::Current()), |
| 164 inner_scopes_(1), | 163 inner_scopes_(1), |
| 165 variables_(), | 164 variables_(), |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 228 current_scope = with_scope; | 227 current_scope = with_scope; |
| 229 // All the inner scopes are inside a with. | 228 // All the inner scopes are inside a with. |
| 230 contains_with = true; | 229 contains_with = true; |
| 231 for (Scope* s = innermost_scope; s != NULL; s = s->outer_scope()) { | 230 for (Scope* s = innermost_scope; s != NULL; s = s->outer_scope()) { |
| 232 s->scope_inside_with_ = true; | 231 s->scope_inside_with_ = true; |
| 233 } | 232 } |
| 234 } else if (context->IsFunctionContext()) { | 233 } else if (context->IsFunctionContext()) { |
| 235 ScopeInfo* scope_info = context->closure()->shared()->scope_info(); | 234 ScopeInfo* scope_info = context->closure()->shared()->scope_info(); |
| 236 current_scope = new Scope(current_scope, | 235 current_scope = new Scope(current_scope, |
| 237 FUNCTION_SCOPE, | 236 FUNCTION_SCOPE, |
| 238 Handle<ScopeInfo>(scope_info)); | 237 Handle<ScopeInfo>(scope_info), |
| 238 context->extension() != NULL); | |
| 239 } else if (context->IsBlockContext()) { | 239 } else if (context->IsBlockContext()) { |
| 240 ScopeInfo* scope_info = ScopeInfo::cast(context->extension()); | 240 ScopeInfo* scope_info = ScopeInfo::cast(context->extension()); |
| 241 current_scope = new Scope(current_scope, | 241 current_scope = new Scope(current_scope, |
| 242 BLOCK_SCOPE, | 242 BLOCK_SCOPE, |
| 243 Handle<ScopeInfo>(scope_info)); | 243 Handle<ScopeInfo>(scope_info)); |
| 244 } else { | 244 } else { |
| 245 ASSERT(context->IsCatchContext()); | 245 ASSERT(context->IsCatchContext()); |
| 246 String* name = String::cast(context->extension()); | 246 String* name = String::cast(context->extension()); |
| 247 current_scope = new Scope(current_scope, Handle<String>(name)); | 247 current_scope = new Scope(current_scope, Handle<String>(name)); |
| 248 } | 248 } |
| (...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1230 } | 1230 } |
| 1231 | 1231 |
| 1232 | 1232 |
| 1233 int Scope::ContextLocalCount() const { | 1233 int Scope::ContextLocalCount() const { |
| 1234 if (num_heap_slots() == 0) return 0; | 1234 if (num_heap_slots() == 0) return 0; |
| 1235 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - | 1235 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - |
| 1236 (function_ != NULL && function_->var()->IsContextSlot() ? 1 : 0); | 1236 (function_ != NULL && function_->var()->IsContextSlot() ? 1 : 0); |
| 1237 } | 1237 } |
| 1238 | 1238 |
| 1239 } } // namespace v8::internal | 1239 } } // namespace v8::internal |
| OLD | NEW |