OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/object_store.h" | 5 #include "vm/object_store.h" |
6 | 6 |
7 #include "vm/exceptions.h" | 7 #include "vm/exceptions.h" |
8 #include "vm/dart_entry.h" | 8 #include "vm/dart_entry.h" |
9 #include "vm/isolate.h" | 9 #include "vm/isolate.h" |
10 #include "vm/object.h" | 10 #include "vm/object.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 exit_listeners_(GrowableObjectArray::null()), | 82 exit_listeners_(GrowableObjectArray::null()), |
83 error_listeners_(GrowableObjectArray::null()), | 83 error_listeners_(GrowableObjectArray::null()), |
84 empty_context_(Context::null()), | 84 empty_context_(Context::null()), |
85 stack_overflow_(Instance::null()), | 85 stack_overflow_(Instance::null()), |
86 out_of_memory_(Instance::null()), | 86 out_of_memory_(Instance::null()), |
87 preallocated_unhandled_exception_(UnhandledException::null()), | 87 preallocated_unhandled_exception_(UnhandledException::null()), |
88 preallocated_stack_trace_(Stacktrace::null()), | 88 preallocated_stack_trace_(Stacktrace::null()), |
89 lookup_port_handler_(Function::null()), | 89 lookup_port_handler_(Function::null()), |
90 empty_uint32_array_(TypedData::null()), | 90 empty_uint32_array_(TypedData::null()), |
91 handle_message_function_(Function::null()), | 91 handle_message_function_(Function::null()), |
| 92 simple_instance_of_function_(Function::null()), |
| 93 simple_instance_of_true_function_(Function::null()), |
| 94 simple_instance_of_false_function_(Function::null()), |
92 library_load_error_table_(Array::null()), | 95 library_load_error_table_(Array::null()), |
93 unique_dynamic_targets_(Array::null()), | 96 unique_dynamic_targets_(Array::null()), |
94 token_objects_(GrowableObjectArray::null()), | 97 token_objects_(GrowableObjectArray::null()), |
95 token_objects_map_(Array::null()), | 98 token_objects_map_(Array::null()), |
96 megamorphic_cache_table_(GrowableObjectArray::null()), | 99 megamorphic_cache_table_(GrowableObjectArray::null()), |
97 megamorphic_miss_code_(Code::null()), | 100 megamorphic_miss_code_(Code::null()), |
98 megamorphic_miss_function_(Function::null()) { | 101 megamorphic_miss_function_(Function::null()) { |
99 for (RawObject** current = from(); current <= to(); current++) { | 102 for (RawObject** current = from(); current <= to(); current++) { |
100 ASSERT(*current == Object::null()); | 103 ASSERT(*current == Object::null()); |
101 } | 104 } |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 Stacktrace::New(code_array, pc_offset_array)); | 197 Stacktrace::New(code_array, pc_offset_array)); |
195 // Expansion of inlined functions requires additional memory at run time, | 198 // Expansion of inlined functions requires additional memory at run time, |
196 // avoid it. | 199 // avoid it. |
197 stack_trace.set_expand_inlined(false); | 200 stack_trace.set_expand_inlined(false); |
198 set_preallocated_stack_trace(stack_trace); | 201 set_preallocated_stack_trace(stack_trace); |
199 | 202 |
200 return Error::null(); | 203 return Error::null(); |
201 } | 204 } |
202 | 205 |
203 | 206 |
| 207 RawFunction* ObjectStore::PrivateObjectLookup(const String& name) { |
| 208 const Library& core_lib = Library::Handle(core_library()); |
| 209 const String& mangled = String::ZoneHandle(core_lib.PrivateName(name)); |
| 210 const Class& cls = Class::Handle(object_class()); |
| 211 const Function& result = Function::Handle(cls.LookupDynamicFunction(mangled)); |
| 212 ASSERT(!result.IsNull()); |
| 213 return result.raw(); |
| 214 } |
| 215 |
| 216 |
204 void ObjectStore::InitKnownObjects() { | 217 void ObjectStore::InitKnownObjects() { |
205 #ifdef DART_PRECOMPILED_RUNTIME | 218 #ifdef DART_PRECOMPILED_RUNTIME |
206 // These objects are only needed for code generation. | 219 // These objects are only needed for code generation. |
207 return; | 220 return; |
208 #else | 221 #else |
209 Thread* thread = Thread::Current(); | 222 Thread* thread = Thread::Current(); |
210 Zone* zone = thread->zone(); | 223 Zone* zone = thread->zone(); |
211 Isolate* isolate = thread->isolate(); | 224 Isolate* isolate = thread->isolate(); |
212 ASSERT(isolate != NULL && isolate->object_store() == this); | 225 ASSERT(isolate != NULL && isolate->object_store() == this); |
213 | 226 |
214 const Library& async_lib = Library::Handle(async_library()); | 227 const Library& async_lib = Library::Handle(async_library()); |
215 ASSERT(!async_lib.IsNull()); | 228 ASSERT(!async_lib.IsNull()); |
216 Class& cls = Class::Handle(zone); | 229 Class& cls = Class::Handle(zone); |
217 cls = async_lib.LookupClass(Symbols::Future()); | 230 cls = async_lib.LookupClass(Symbols::Future()); |
218 ASSERT(!cls.IsNull()); | 231 ASSERT(!cls.IsNull()); |
219 set_future_class(cls); | 232 set_future_class(cls); |
220 cls = async_lib.LookupClass(Symbols::Completer()); | 233 cls = async_lib.LookupClass(Symbols::Completer()); |
221 ASSERT(!cls.IsNull()); | 234 ASSERT(!cls.IsNull()); |
222 set_completer_class(cls); | 235 set_completer_class(cls); |
223 cls = async_lib.LookupClass(Symbols::StreamIterator()); | 236 cls = async_lib.LookupClass(Symbols::StreamIterator()); |
224 ASSERT(!cls.IsNull()); | 237 ASSERT(!cls.IsNull()); |
225 set_stream_iterator_class(cls); | 238 set_stream_iterator_class(cls); |
226 | 239 |
227 const Library& internal_lib = Library::Handle(internal_library()); | 240 const Library& internal_lib = Library::Handle(internal_library()); |
228 cls = internal_lib.LookupClass(Symbols::Symbol()); | 241 cls = internal_lib.LookupClass(Symbols::Symbol()); |
229 set_symbol_class(cls); | 242 set_symbol_class(cls); |
| 243 |
| 244 // Cache the core private functions used for fast instance of checks. |
| 245 simple_instance_of_function_ = |
| 246 PrivateObjectLookup(Symbols::_simpleInstanceOf()); |
| 247 simple_instance_of_true_function_ = |
| 248 PrivateObjectLookup(Symbols::_simpleInstanceOfTrue()); |
| 249 simple_instance_of_false_function_ = |
| 250 PrivateObjectLookup(Symbols::_simpleInstanceOfFalse()); |
230 #endif | 251 #endif |
231 } | 252 } |
232 | 253 |
233 } // namespace dart | 254 } // namespace dart |
OLD | NEW |