| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/contexts.h" | 5 #include "src/contexts.h" |
| 6 | 6 |
| 7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
| 8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
| 9 #include "src/isolate-inl.h" | 9 #include "src/isolate-inl.h" |
| 10 | 10 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 result->context_index = i; | 50 result->context_index = i; |
| 51 result->slot_index = slot_index; | 51 result->slot_index = slot_index; |
| 52 return true; | 52 return true; |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 return false; | 55 return false; |
| 56 } | 56 } |
| 57 | 57 |
| 58 | 58 |
| 59 bool Context::is_declaration_context() { | 59 bool Context::is_declaration_context() { |
| 60 if (IsFunctionContext() || IsNativeContext() || IsScriptContext() || | 60 if (IsFunctionContext() || IsNativeContext() || IsScriptContext()) { |
| 61 IsModuleContext()) { | |
| 62 return true; | 61 return true; |
| 63 } | 62 } |
| 64 if (!IsBlockContext()) return false; | 63 if (!IsBlockContext()) return false; |
| 65 Object* ext = extension(); | 64 Object* ext = extension(); |
| 66 // If we have the special extension, we immediately know it must be a | 65 // If we have the special extension, we immediately know it must be a |
| 67 // declaration scope. That's just a small performance shortcut. | 66 // declaration scope. That's just a small performance shortcut. |
| 68 return ext->IsContextExtension() || | 67 return ext->IsContextExtension() || |
| 69 ScopeInfo::cast(ext)->is_declaration_scope(); | 68 ScopeInfo::cast(ext)->is_declaration_scope(); |
| 70 } | 69 } |
| 71 | 70 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 } | 116 } |
| 118 HeapObject* object = extension(); | 117 HeapObject* object = extension(); |
| 119 if (object->IsContextExtension()) { | 118 if (object->IsContextExtension()) { |
| 120 DCHECK(IsBlockContext() || IsCatchContext() || IsWithContext() || | 119 DCHECK(IsBlockContext() || IsCatchContext() || IsWithContext() || |
| 121 IsDebugEvaluateContext()); | 120 IsDebugEvaluateContext()); |
| 122 object = ContextExtension::cast(object)->scope_info(); | 121 object = ContextExtension::cast(object)->scope_info(); |
| 123 } | 122 } |
| 124 return ScopeInfo::cast(object); | 123 return ScopeInfo::cast(object); |
| 125 } | 124 } |
| 126 | 125 |
| 127 JSModule* Context::module() { | |
| 128 Context* current = this; | |
| 129 while (!current->IsModuleContext()) { | |
| 130 current = current->previous(); | |
| 131 } | |
| 132 return JSModule::cast(current->extension()); | |
| 133 } | |
| 134 | 126 |
| 135 String* Context::catch_name() { | 127 String* Context::catch_name() { |
| 136 DCHECK(IsCatchContext()); | 128 DCHECK(IsCatchContext()); |
| 137 return String::cast(ContextExtension::cast(extension())->extension()); | 129 return String::cast(ContextExtension::cast(extension())->extension()); |
| 138 } | 130 } |
| 139 | 131 |
| 140 | 132 |
| 141 JSGlobalObject* Context::global_object() { | 133 JSGlobalObject* Context::global_object() { |
| 142 return JSGlobalObject::cast(native_context()->extension()); | 134 return JSGlobalObject::cast(native_context()->extension()); |
| 143 } | 135 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 | 182 |
| 191 static PropertyAttributes GetAttributesForMode(VariableMode mode) { | 183 static PropertyAttributes GetAttributesForMode(VariableMode mode) { |
| 192 DCHECK(IsDeclaredVariableMode(mode)); | 184 DCHECK(IsDeclaredVariableMode(mode)); |
| 193 return mode == CONST ? READ_ONLY : NONE; | 185 return mode == CONST ? READ_ONLY : NONE; |
| 194 } | 186 } |
| 195 | 187 |
| 196 Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags, | 188 Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags, |
| 197 int* index, PropertyAttributes* attributes, | 189 int* index, PropertyAttributes* attributes, |
| 198 InitializationFlag* init_flag, | 190 InitializationFlag* init_flag, |
| 199 VariableMode* variable_mode) { | 191 VariableMode* variable_mode) { |
| 200 DCHECK(!IsModuleContext()); | |
| 201 Isolate* isolate = GetIsolate(); | 192 Isolate* isolate = GetIsolate(); |
| 202 Handle<Context> context(this, isolate); | 193 Handle<Context> context(this, isolate); |
| 203 | 194 |
| 204 bool follow_context_chain = (flags & FOLLOW_CONTEXT_CHAIN) != 0; | 195 bool follow_context_chain = (flags & FOLLOW_CONTEXT_CHAIN) != 0; |
| 205 bool failed_whitelist = false; | 196 bool failed_whitelist = false; |
| 206 *index = kNotFound; | 197 *index = kNotFound; |
| 207 *attributes = ABSENT; | 198 *attributes = ABSENT; |
| 208 *init_flag = kCreatedInitialized; | 199 *init_flag = kCreatedInitialized; |
| 209 *variable_mode = VAR; | 200 *variable_mode = VAR; |
| 210 | 201 |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 | 562 |
| 572 int previous_value = errors_thrown()->value(); | 563 int previous_value = errors_thrown()->value(); |
| 573 set_errors_thrown(Smi::FromInt(previous_value + 1)); | 564 set_errors_thrown(Smi::FromInt(previous_value + 1)); |
| 574 } | 565 } |
| 575 | 566 |
| 576 | 567 |
| 577 int Context::GetErrorsThrown() { return errors_thrown()->value(); } | 568 int Context::GetErrorsThrown() { return errors_thrown()->value(); } |
| 578 | 569 |
| 579 } // namespace internal | 570 } // namespace internal |
| 580 } // namespace v8 | 571 } // namespace v8 |
| OLD | NEW |