| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 const Class& cls = Class::Handle( | 437 const Class& cls = Class::Handle( |
| 438 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); | 438 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); |
| 439 lib.AddClass(cls); | 439 lib.AddClass(cls); |
| 440 return cls.raw(); | 440 return cls.raw(); |
| 441 } | 441 } |
| 442 | 442 |
| 443 | 443 |
| 444 void Object::RegisterClass(const Class& cls, | 444 void Object::RegisterClass(const Class& cls, |
| 445 const String& name, | 445 const String& name, |
| 446 const Library& lib) { | 446 const Library& lib) { |
| 447 ASSERT(name.Length() > 0); |
| 448 ASSERT(name.CharAt(0) != '_'); |
| 447 cls.set_name(name); | 449 cls.set_name(name); |
| 448 lib.AddClass(cls); | 450 lib.AddClass(cls); |
| 449 } | 451 } |
| 450 | 452 |
| 451 | 453 |
| 452 void Object::RegisterPrivateClass(const Class& cls, | 454 void Object::RegisterPrivateClass(const Class& cls, |
| 453 const String& public_class_name, | 455 const String& public_class_name, |
| 454 const Library& lib) { | 456 const Library& lib) { |
| 457 ASSERT(public_class_name.Length() > 0); |
| 458 ASSERT(public_class_name.CharAt(0) == '_'); |
| 455 String& str = String::Handle(); | 459 String& str = String::Handle(); |
| 456 str = lib.PrivateName(public_class_name); | 460 str = lib.PrivateName(public_class_name); |
| 457 cls.set_name(str); | 461 cls.set_name(str); |
| 458 lib.AddClass(cls); | 462 lib.AddClass(cls); |
| 459 } | 463 } |
| 460 | 464 |
| 461 | 465 |
| 462 RawError* Object::Init(Isolate* isolate) { | 466 RawError* Object::Init(Isolate* isolate) { |
| 463 TIMERSCOPE(time_bootstrap); | 467 TIMERSCOPE(time_bootstrap); |
| 464 ObjectStore* object_store = isolate->object_store(); | 468 ObjectStore* object_store = isolate->object_store(); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 RegisterClass(cls, name, core_impl_lib); | 621 RegisterClass(cls, name, core_impl_lib); |
| 618 pending_classes.Add(cls, Heap::kOld); | 622 pending_classes.Add(cls, Heap::kOld); |
| 619 // Super type set below, after Object is allocated. | 623 // Super type set below, after Object is allocated. |
| 620 | 624 |
| 621 cls = Class::New<JSRegExp>(); | 625 cls = Class::New<JSRegExp>(); |
| 622 object_store->set_jsregexp_class(cls); | 626 object_store->set_jsregexp_class(cls); |
| 623 name = Symbols::JSSyntaxRegExp(); | 627 name = Symbols::JSSyntaxRegExp(); |
| 624 RegisterClass(cls, name, core_impl_lib); | 628 RegisterClass(cls, name, core_impl_lib); |
| 625 pending_classes.Add(cls, Heap::kOld); | 629 pending_classes.Add(cls, Heap::kOld); |
| 626 | 630 |
| 627 cls = Class::New<WeakProperty>(); | |
| 628 object_store->set_weak_property_class(cls); | |
| 629 name = Symbols::WeakProperty(); | |
| 630 RegisterClass(cls, name, core_impl_lib); | |
| 631 pending_classes.Add(cls, Heap::kOld); | |
| 632 | |
| 633 // Initialize the base interfaces used by the core VM classes. | 631 // Initialize the base interfaces used by the core VM classes. |
| 634 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false)); | 632 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false)); |
| 635 | 633 |
| 636 // Allocate and initialize the Object class and type. The Object | 634 // Allocate and initialize the Object class and type. The Object |
| 637 // class and ByteArray subclasses are the only pre-allocated, | 635 // class and ByteArray subclasses are the only pre-allocated, |
| 638 // non-interface classes in the core library. | 636 // non-interface classes in the core library. |
| 639 cls = Class::New<Instance>(); | 637 cls = Class::New<Instance>(); |
| 640 object_store->set_object_class(cls); | 638 object_store->set_object_class(cls); |
| 641 name = Symbols::Object(); | 639 name = Symbols::Object(); |
| 642 cls.set_name(name); | 640 cls.set_name(name); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 cls = Class::New<ExternalFloat32Array>(); | 738 cls = Class::New<ExternalFloat32Array>(); |
| 741 object_store->set_external_float32_array_class(cls); | 739 object_store->set_external_float32_array_class(cls); |
| 742 name = Symbols::_ExternalFloat32Array(); | 740 name = Symbols::_ExternalFloat32Array(); |
| 743 RegisterPrivateClass(cls, name, core_lib); | 741 RegisterPrivateClass(cls, name, core_lib); |
| 744 | 742 |
| 745 cls = Class::New<ExternalFloat64Array>(); | 743 cls = Class::New<ExternalFloat64Array>(); |
| 746 object_store->set_external_float64_array_class(cls); | 744 object_store->set_external_float64_array_class(cls); |
| 747 name = Symbols::_ExternalFloat64Array(); | 745 name = Symbols::_ExternalFloat64Array(); |
| 748 RegisterPrivateClass(cls, name, core_lib); | 746 RegisterPrivateClass(cls, name, core_lib); |
| 749 | 747 |
| 748 cls = Class::New<WeakProperty>(); |
| 749 object_store->set_weak_property_class(cls); |
| 750 name = Symbols::_WeakProperty(); |
| 751 RegisterPrivateClass(cls, name, core_lib); |
| 752 |
| 750 // Set the super type of class Stacktrace to Object type so that the | 753 // Set the super type of class Stacktrace to Object type so that the |
| 751 // 'toString' method is implemented. | 754 // 'toString' method is implemented. |
| 752 cls = object_store->stacktrace_class(); | 755 cls = object_store->stacktrace_class(); |
| 753 cls.set_super_type(type); | 756 cls.set_super_type(type); |
| 754 | 757 |
| 755 cls = CreateAndRegisterInterface("Function", script, core_lib); | 758 cls = CreateAndRegisterInterface("Function", script, core_lib); |
| 756 pending_classes.Add(cls, Heap::kOld); | 759 pending_classes.Add(cls, Heap::kOld); |
| 757 type = Type::NewNonParameterizedType(cls); | 760 type = Type::NewNonParameterizedType(cls); |
| 758 object_store->set_function_interface(type); | 761 object_store->set_function_interface(type); |
| 759 | 762 |
| (...skipping 10377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11137 WeakProperty::InstanceSize(), | 11140 WeakProperty::InstanceSize(), |
| 11138 space); | 11141 space); |
| 11139 NoGCScope no_gc; | 11142 NoGCScope no_gc; |
| 11140 result ^= raw; | 11143 result ^= raw; |
| 11141 } | 11144 } |
| 11142 return result.raw(); | 11145 return result.raw(); |
| 11143 } | 11146 } |
| 11144 | 11147 |
| 11145 | 11148 |
| 11146 const char* WeakProperty::ToCString() const { | 11149 const char* WeakProperty::ToCString() const { |
| 11147 return "WeakProperty"; | 11150 return "_WeakProperty"; |
| 11148 } | 11151 } |
| 11149 | 11152 |
| 11150 } // namespace dart | 11153 } // namespace dart |
| OLD | NEW |