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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
103 | 103 |
104 | 104 |
105 JSReceiver* Context::extension_receiver() { | 105 JSReceiver* Context::extension_receiver() { |
106 DCHECK(IsNativeContext() || IsWithContext() || | 106 DCHECK(IsNativeContext() || IsWithContext() || |
107 IsFunctionContext() || IsBlockContext()); | 107 IsFunctionContext() || IsBlockContext()); |
108 return IsWithContext() ? JSReceiver::cast(extension()) : extension_object(); | 108 return IsWithContext() ? JSReceiver::cast(extension()) : extension_object(); |
109 } | 109 } |
110 | 110 |
111 | 111 |
112 ScopeInfo* Context::scope_info() { | 112 ScopeInfo* Context::scope_info() { |
113 DCHECK(IsModuleContext() || IsScriptContext() || IsBlockContext()); | 113 DCHECK(IsScriptContext() || IsBlockContext()); |
114 HeapObject* object = extension(); | 114 HeapObject* object = extension(); |
115 if (object->IsSloppyBlockWithEvalContextExtension()) { | 115 if (object->IsSloppyBlockWithEvalContextExtension()) { |
116 DCHECK(IsBlockContext()); | 116 DCHECK(IsBlockContext()); |
117 object = SloppyBlockWithEvalContextExtension::cast(object)->scope_info(); | 117 object = SloppyBlockWithEvalContextExtension::cast(object)->scope_info(); |
118 } | 118 } |
119 return ScopeInfo::cast(object); | 119 return ScopeInfo::cast(object); |
120 } | 120 } |
121 | 121 |
122 | 122 |
123 JSModule* Context::module() { | |
124 Context* current = this; | |
125 while (!current->IsModuleContext()) { | |
126 current = current->previous(); | |
127 DCHECK_NOT_NULL(current); // XXX | |
adamk
2016/09/01 23:13:34
In our offline discussion I said this was a bit bo
neis
2016/09/02 11:32:58
Done.
| |
128 } | |
129 return JSModule::cast(current->extension()); | |
130 } | |
131 | |
132 | |
123 String* Context::catch_name() { | 133 String* Context::catch_name() { |
124 DCHECK(IsCatchContext()); | 134 DCHECK(IsCatchContext()); |
125 return String::cast(extension()); | 135 return String::cast(extension()); |
126 } | 136 } |
127 | 137 |
128 | 138 |
129 JSGlobalObject* Context::global_object() { | 139 JSGlobalObject* Context::global_object() { |
130 return JSGlobalObject::cast(native_context()->extension()); | 140 return JSGlobalObject::cast(native_context()->extension()); |
131 } | 141 } |
132 | 142 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
178 | 188 |
179 static PropertyAttributes GetAttributesForMode(VariableMode mode) { | 189 static PropertyAttributes GetAttributesForMode(VariableMode mode) { |
180 DCHECK(IsDeclaredVariableMode(mode)); | 190 DCHECK(IsDeclaredVariableMode(mode)); |
181 return mode == CONST ? READ_ONLY : NONE; | 191 return mode == CONST ? READ_ONLY : NONE; |
182 } | 192 } |
183 | 193 |
184 Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags, | 194 Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags, |
185 int* index, PropertyAttributes* attributes, | 195 int* index, PropertyAttributes* attributes, |
186 InitializationFlag* init_flag, | 196 InitializationFlag* init_flag, |
187 VariableMode* variable_mode) { | 197 VariableMode* variable_mode) { |
198 DCHECK(!IsModuleContext()); | |
188 Isolate* isolate = GetIsolate(); | 199 Isolate* isolate = GetIsolate(); |
189 Handle<Context> context(this, isolate); | 200 Handle<Context> context(this, isolate); |
190 | 201 |
191 bool follow_context_chain = (flags & FOLLOW_CONTEXT_CHAIN) != 0; | 202 bool follow_context_chain = (flags & FOLLOW_CONTEXT_CHAIN) != 0; |
192 bool failed_whitelist = false; | 203 bool failed_whitelist = false; |
193 *index = kNotFound; | 204 *index = kNotFound; |
194 *attributes = ABSENT; | 205 *attributes = ABSENT; |
195 *init_flag = kCreatedInitialized; | 206 *init_flag = kCreatedInitialized; |
196 *variable_mode = VAR; | 207 *variable_mode = VAR; |
197 | 208 |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
555 | 566 |
556 int previous_value = errors_thrown()->value(); | 567 int previous_value = errors_thrown()->value(); |
557 set_errors_thrown(Smi::FromInt(previous_value + 1)); | 568 set_errors_thrown(Smi::FromInt(previous_value + 1)); |
558 } | 569 } |
559 | 570 |
560 | 571 |
561 int Context::GetErrorsThrown() { return errors_thrown()->value(); } | 572 int Context::GetErrorsThrown() { return errors_thrown()->value(); } |
562 | 573 |
563 } // namespace internal | 574 } // namespace internal |
564 } // namespace v8 | 575 } // namespace v8 |
OLD | NEW |