Chromium Code Reviews| Index: runtime/vm/object.cc |
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
| index aebbc47d1bf9c7652db59a4dd1f2bcdecf509b1f..33ba457388e7b247742c6255f892740ba0eaab5b 100644 |
| --- a/runtime/vm/object.cc |
| +++ b/runtime/vm/object.cc |
| @@ -554,6 +554,8 @@ RawError* Object::Init(Isolate* isolate) { |
| ASSERT(!core_lib.IsNull()); |
| Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
| ASSERT(!core_impl_lib.IsNull()); |
| + Library::InitScalarlistLibrary(isolate); |
|
Ivan Posva
2012/09/20 06:42:26
Can you explain why this has to be done so early?
Mads Ager (google)
2012/09/20 06:49:43
The code below adds the classes to the library, so
|
| + Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary()); |
| const GrowableObjectArray& pending_classes = |
| GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); |
| @@ -686,110 +688,110 @@ RawError* Object::Init(Isolate* isolate) { |
| RegisterPrivateClass(cls, name, core_lib); |
| pending_classes.Add(cls, Heap::kOld); |
| + cls = Class::New<WeakProperty>(); |
| + object_store->set_weak_property_class(cls); |
| + name = Symbols::_WeakProperty(); |
| + RegisterPrivateClass(cls, name, core_lib); |
| + |
| cls = Class::New<Int8Array>(); |
| object_store->set_int8_array_class(cls); |
| name = Symbols::_Int8Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Uint8Array>(); |
| object_store->set_uint8_array_class(cls); |
| name = Symbols::_Uint8Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Int16Array>(); |
| object_store->set_int16_array_class(cls); |
| name = Symbols::_Int16Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Uint16Array>(); |
| object_store->set_uint16_array_class(cls); |
| name = Symbols::_Uint16Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Int32Array>(); |
| object_store->set_int32_array_class(cls); |
| name = Symbols::_Int32Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Uint32Array>(); |
| object_store->set_uint32_array_class(cls); |
| name = Symbols::_Uint32Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Int64Array>(); |
| object_store->set_int64_array_class(cls); |
| name = Symbols::_Int64Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Uint64Array>(); |
| object_store->set_uint64_array_class(cls); |
| name = Symbols::_Uint64Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Float32Array>(); |
| object_store->set_float32_array_class(cls); |
| name = Symbols::_Float32Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<Float64Array>(); |
| object_store->set_float64_array_class(cls); |
| name = Symbols::_Float64Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalInt8Array>(); |
| object_store->set_external_int8_array_class(cls); |
| name = Symbols::_ExternalInt8Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalUint8Array>(); |
| object_store->set_external_uint8_array_class(cls); |
| name = Symbols::_ExternalUint8Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalInt16Array>(); |
| object_store->set_external_int16_array_class(cls); |
| name = Symbols::_ExternalInt16Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalUint16Array>(); |
| object_store->set_external_uint16_array_class(cls); |
| name = Symbols::_ExternalUint16Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalInt32Array>(); |
| object_store->set_external_int32_array_class(cls); |
| name = Symbols::_ExternalInt32Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalUint32Array>(); |
| object_store->set_external_uint32_array_class(cls); |
| name = Symbols::_ExternalUint32Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalInt64Array>(); |
| object_store->set_external_int64_array_class(cls); |
| name = Symbols::_ExternalInt64Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalUint64Array>(); |
| object_store->set_external_uint64_array_class(cls); |
| name = Symbols::_ExternalUint64Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalFloat32Array>(); |
| object_store->set_external_float32_array_class(cls); |
| name = Symbols::_ExternalFloat32Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| cls = Class::New<ExternalFloat64Array>(); |
| object_store->set_external_float64_array_class(cls); |
| name = Symbols::_ExternalFloat64Array(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| - |
| - cls = Class::New<WeakProperty>(); |
| - object_store->set_weak_property_class(cls); |
| - name = Symbols::_WeakProperty(); |
| - RegisterPrivateClass(cls, name, core_lib); |
| + RegisterPrivateClass(cls, name, scalarlist_lib); |
| // Set the super type of class Stacktrace to Object type so that the |
| // 'toString' method is implemented. |
| @@ -946,6 +948,18 @@ RawError* Object::Init(Isolate* isolate) { |
| if (!error.IsNull()) { |
| return error.raw(); |
| } |
| + const Script& scalarlist_script = Script::Handle( |
| + Bootstrap::LoadScalarlistScript(false)); |
| + ASSERT(!scalarlist_lib.IsNull()); |
| + error = Bootstrap::Compile(scalarlist_lib, scalarlist_script); |
| + if (!error.IsNull()) { |
| + return error.raw(); |
| + } |
| + patch_script = Bootstrap::LoadScalarlistScript(true); |
| + error = scalarlist_lib.Patch(patch_script); |
| + if (!error.IsNull()) { |
| + return error.raw(); |
| + } |
| Bootstrap::SetupNativeResolver(); |
| // Remove the Object superclass cycle by setting the super type to null (not |
| @@ -6629,6 +6643,16 @@ void Library::InitMirrorsLibrary(Isolate* isolate) { |
| } |
| +void Library::InitScalarlistLibrary(Isolate* isolate) { |
| + const String& url = String::Handle(Symbols::New("dart:scalarlist")); |
| + const Library& lib = Library::Handle(Library::New(url)); |
| + lib.Register(); |
| + const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
| + lib.AddImport(core_impl_lib); |
| + isolate->object_store()->set_scalarlist_library(lib); |
| +} |
| + |
| + |
| void Library::InitNativeWrappersLibrary(Isolate* isolate) { |
| static const int kNumNativeWrappersClasses = 4; |
| ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); |
| @@ -6757,6 +6781,11 @@ RawLibrary* Library::MirrorsLibrary() { |
| } |
| +RawLibrary* Library::ScalarlistLibrary() { |
| + return Isolate::Current()->object_store()->scalarlist_library(); |
| +} |
| + |
| + |
| RawLibrary* Library::NativeWrappersLibrary() { |
| return Isolate::Current()->object_store()->native_wrappers_library(); |
| } |