| Index: runtime/vm/object.cc
|
| ===================================================================
|
| --- runtime/vm/object.cc (revision 35287)
|
| +++ runtime/vm/object.cc (working copy)
|
| @@ -891,10 +891,10 @@
|
| TIMERSCOPE(isolate, time_bootstrap);
|
| ObjectStore* object_store = isolate->object_store();
|
|
|
| - Class& cls = Class::Handle();
|
| - Type& type = Type::Handle();
|
| - Array& array = Array::Handle();
|
| - Library& lib = Library::Handle();
|
| + Class& cls = Class::Handle(isolate);
|
| + Type& type = Type::Handle(isolate);
|
| + Array& array = Array::Handle(isolate);
|
| + Library& lib = Library::Handle(isolate);
|
|
|
| // All RawArray fields will be initialized to an empty array, therefore
|
| // initialize array class first.
|
| @@ -922,7 +922,8 @@
|
| // Last element contains the count of used slots.
|
| const intptr_t kInitialCanonicalTypeArgumentsSize = 4;
|
| array = Array::New(kInitialCanonicalTypeArgumentsSize + 1);
|
| - array.SetAt(kInitialCanonicalTypeArgumentsSize, Smi::Handle(Smi::New(0)));
|
| + array.SetAt(kInitialCanonicalTypeArgumentsSize,
|
| + Smi::Handle(isolate, Smi::New(0)));
|
| object_store->set_canonical_type_arguments(array);
|
|
|
| // Setup type class early in the process.
|
| @@ -956,34 +957,34 @@
|
| Symbols::SetupSymbolTable(isolate);
|
|
|
| // Set up the libraries array before initializing the core library.
|
| - const GrowableObjectArray& libraries =
|
| - GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld));
|
| + const GrowableObjectArray& libraries = GrowableObjectArray::Handle(
|
| + isolate, GrowableObjectArray::New(Heap::kOld));
|
| object_store->set_libraries(libraries);
|
|
|
| // Pre-register the core library.
|
| Library::InitCoreLibrary(isolate);
|
|
|
| // Basic infrastructure has been setup, initialize the class dictionary.
|
| - Library& core_lib = Library::Handle(Library::CoreLibrary());
|
| + const Library& core_lib = Library::Handle(isolate, Library::CoreLibrary());
|
| ASSERT(!core_lib.IsNull());
|
|
|
| const GrowableObjectArray& pending_classes =
|
| - GrowableObjectArray::Handle(GrowableObjectArray::New());
|
| + GrowableObjectArray::Handle(isolate, GrowableObjectArray::New());
|
| object_store->set_pending_classes(pending_classes);
|
|
|
| - Context& context = Context::Handle(Context::New(0, Heap::kOld));
|
| + Context& context = Context::Handle(isolate, Context::New(0, Heap::kOld));
|
| object_store->set_empty_context(context);
|
|
|
| // Now that the symbol table is initialized and that the core dictionary as
|
| // well as the core implementation dictionary have been setup, preallocate
|
| // remaining classes and register them by name in the dictionaries.
|
| - String& name = String::Handle();
|
| + String& name = String::Handle(isolate);
|
| cls = object_store->array_class(); // Was allocated above.
|
| RegisterPrivateClass(cls, Symbols::_List(), core_lib);
|
| pending_classes.Add(cls);
|
| // We cannot use NewNonParameterizedType(cls), because Array is parameterized.
|
| - type ^= Type::New(Object::Handle(cls.raw()),
|
| - TypeArguments::Handle(),
|
| + type ^= Type::New(Object::Handle(isolate, cls.raw()),
|
| + TypeArguments::Handle(isolate),
|
| Scanner::kNoSourcePos);
|
| type.SetIsFinalized();
|
| type ^= type.Canonicalize();
|
| @@ -1021,6 +1022,31 @@
|
| RegisterPrivateClass(cls, Symbols::ExternalTwoByteString(), core_lib);
|
| pending_classes.Add(cls);
|
|
|
| + // Pre-register the isolate library so the native class implementations
|
| + // can be hooked up before compiling it.
|
| + Library& isolate_lib =
|
| + Library::Handle(isolate, Library::LookupLibrary(Symbols::DartIsolate()));
|
| + if (isolate_lib.IsNull()) {
|
| + isolate_lib = Library::NewLibraryHelper(Symbols::DartIsolate(), true);
|
| + isolate_lib.Register();
|
| + isolate->object_store()->set_bootstrap_library(ObjectStore::kIsolate,
|
| + isolate_lib);
|
| + }
|
| + ASSERT(!isolate_lib.IsNull());
|
| + ASSERT(isolate_lib.raw() == Library::IsolateLibrary());
|
| +
|
| + cls = Class::New<Capability>();
|
| + RegisterPrivateClass(cls, Symbols::_CapabilityImpl(), isolate_lib);
|
| + pending_classes.Add(cls);
|
| +
|
| + cls = Class::New<ReceivePort>();
|
| + RegisterPrivateClass(cls, Symbols::_RawReceivePortImpl(), isolate_lib);
|
| + pending_classes.Add(cls);
|
| +
|
| + cls = Class::New<SendPort>();
|
| + RegisterPrivateClass(cls, Symbols::_SendPortImpl(), isolate_lib);
|
| + pending_classes.Add(cls);
|
| +
|
| cls = Class::New<Stacktrace>();
|
| object_store->set_stacktrace_class(cls);
|
| RegisterClass(cls, Symbols::StackTrace(), core_lib);
|
| @@ -1443,6 +1469,10 @@
|
| cls = Class::New<Instance>(kNullCid);
|
| object_store->set_null_class(cls);
|
|
|
| + cls = Class::New<Capability>();
|
| + cls = Class::New<ReceivePort>();
|
| + cls = Class::New<SendPort>();
|
| +
|
| cls = Class::New<Stacktrace>();
|
| object_store->set_stacktrace_class(cls);
|
|
|
| @@ -14701,7 +14731,7 @@
|
| if (!silent &&
|
| FLAG_throw_on_javascript_int_overflow &&
|
| !IsJavascriptInt(value)) {
|
| - const Integer &i = Integer::Handle(Mint::New(value));
|
| + const Integer& i = Integer::Handle(Mint::New(value));
|
| ThrowJavascriptIntegerOverflow(i);
|
| }
|
| return Mint::New(value, space);
|
| @@ -17864,7 +17894,82 @@
|
| }
|
|
|
|
|
| +RawCapability* Capability::New(uint64_t id, Heap::Space space) {
|
| + Capability& result = Capability::Handle();
|
| + {
|
| + RawObject* raw = Object::Allocate(Capability::kClassId,
|
| + Capability::InstanceSize(),
|
| + space);
|
| + NoGCScope no_gc;
|
| + result ^= raw;
|
| + }
|
| + result.raw_ptr()->id_ = id;
|
| + return result.raw();
|
| +}
|
|
|
| +
|
| +const char* Capability::ToCString() const {
|
| + return "Capability";
|
| +}
|
| +
|
| +
|
| +void Capability::PrintToJSONStream(JSONStream* stream, bool ref) const {
|
| + Instance::PrintToJSONStream(stream, ref);
|
| +}
|
| +
|
| +
|
| +RawReceivePort* ReceivePort::New(Dart_Port id, Heap::Space space) {
|
| + Isolate* isolate = Isolate::Current();
|
| + const SendPort& send_port = SendPort::Handle(isolate, SendPort::New(id));
|
| +
|
| + ReceivePort& result = ReceivePort::Handle(isolate);
|
| + {
|
| + RawObject* raw = Object::Allocate(ReceivePort::kClassId,
|
| + ReceivePort::InstanceSize(),
|
| + space);
|
| + NoGCScope no_gc;
|
| + result ^= raw;
|
| + }
|
| + result.raw_ptr()->send_port_ = send_port.raw();
|
| + PortMap::SetLive(id);
|
| + return result.raw();
|
| +}
|
| +
|
| +
|
| +const char* ReceivePort::ToCString() const {
|
| + return "ReceivePort";
|
| +}
|
| +
|
| +
|
| +void ReceivePort::PrintToJSONStream(JSONStream* stream, bool ref) const {
|
| + Instance::PrintToJSONStream(stream, ref);
|
| +}
|
| +
|
| +
|
| +RawSendPort* SendPort::New(Dart_Port id, Heap::Space space) {
|
| + SendPort& result = SendPort::Handle();
|
| + {
|
| + RawObject* raw = Object::Allocate(SendPort::kClassId,
|
| + SendPort::InstanceSize(),
|
| + space);
|
| + NoGCScope no_gc;
|
| + result ^= raw;
|
| + }
|
| + result.raw_ptr()->id_ = id;
|
| + return result.raw();
|
| +}
|
| +
|
| +
|
| +const char* SendPort::ToCString() const {
|
| + return "SendPort";
|
| +}
|
| +
|
| +
|
| +void SendPort::PrintToJSONStream(JSONStream* stream, bool ref) const {
|
| + Instance::PrintToJSONStream(stream, ref);
|
| +}
|
| +
|
| +
|
| const char* Closure::ToCString(const Instance& closure) {
|
| const Function& fun = Function::Handle(Closure::function(closure));
|
| const bool is_implicit_closure = fun.IsImplicitClosureFunction();
|
|
|