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 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 RegisterClass(cls, name, core_impl_lib); | 617 RegisterClass(cls, name, core_impl_lib); |
618 pending_classes.Add(cls, Heap::kOld); | 618 pending_classes.Add(cls, Heap::kOld); |
619 // Super type set below, after Object is allocated. | 619 // Super type set below, after Object is allocated. |
620 | 620 |
621 cls = Class::New<JSRegExp>(); | 621 cls = Class::New<JSRegExp>(); |
622 object_store->set_jsregexp_class(cls); | 622 object_store->set_jsregexp_class(cls); |
623 name = Symbols::JSSyntaxRegExp(); | 623 name = Symbols::JSSyntaxRegExp(); |
624 RegisterClass(cls, name, core_impl_lib); | 624 RegisterClass(cls, name, core_impl_lib); |
625 pending_classes.Add(cls, Heap::kOld); | 625 pending_classes.Add(cls, Heap::kOld); |
626 | 626 |
| 627 cls = Class::New<WeakProperty>(); |
| 628 object_store->set_weak_property_class(cls); |
| 629 RegisterClass(cls, "WeakProperty", impl_script, core_impl_lib); |
| 630 pending_classes.Add(cls, Heap::kOld); |
| 631 |
627 // Initialize the base interfaces used by the core VM classes. | 632 // Initialize the base interfaces used by the core VM classes. |
628 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false)); | 633 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false)); |
629 | 634 |
630 // Allocate and initialize the Object class and type. The Object | 635 // Allocate and initialize the Object class and type. The Object |
631 // class and ByteArray subclasses are the only pre-allocated, | 636 // class and ByteArray subclasses are the only pre-allocated, |
632 // non-interface classes in the core library. | 637 // non-interface classes in the core library. |
633 cls = Class::New<Instance>(); | 638 cls = Class::New<Instance>(); |
634 object_store->set_object_class(cls); | 639 object_store->set_object_class(cls); |
635 name = Symbols::Object(); | 640 name = Symbols::Object(); |
636 cls.set_name(name); | 641 cls.set_name(name); |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1017 | 1022 |
1018 cls = Class::New<Bool>(); | 1023 cls = Class::New<Bool>(); |
1019 object_store->set_bool_class(cls); | 1024 object_store->set_bool_class(cls); |
1020 | 1025 |
1021 cls = Class::New<Stacktrace>(); | 1026 cls = Class::New<Stacktrace>(); |
1022 object_store->set_stacktrace_class(cls); | 1027 object_store->set_stacktrace_class(cls); |
1023 | 1028 |
1024 cls = Class::New<JSRegExp>(); | 1029 cls = Class::New<JSRegExp>(); |
1025 object_store->set_jsregexp_class(cls); | 1030 object_store->set_jsregexp_class(cls); |
1026 | 1031 |
| 1032 cls = Class::New<WeakProperty>(); |
| 1033 object_store->set_weak_property_class(cls); |
| 1034 |
1027 // Allocate pre-initialized values. | 1035 // Allocate pre-initialized values. |
1028 Bool& bool_value = Bool::Handle(); | 1036 Bool& bool_value = Bool::Handle(); |
1029 bool_value = Bool::New(true); | 1037 bool_value = Bool::New(true); |
1030 object_store->set_true_value(bool_value); | 1038 object_store->set_true_value(bool_value); |
1031 bool_value = Bool::New(false); | 1039 bool_value = Bool::New(false); |
1032 object_store->set_false_value(bool_value); | 1040 object_store->set_false_value(bool_value); |
1033 } | 1041 } |
1034 | 1042 |
1035 | 1043 |
1036 void Object::Print() const { | 1044 void Object::Print() const { |
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1751 const Type& signature_type = Type::Handle(result.SignatureType()); | 1759 const Type& signature_type = Type::Handle(result.SignatureType()); |
1752 ASSERT(!signature_type.IsFinalized()); | 1760 ASSERT(!signature_type.IsFinalized()); |
1753 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); | 1761 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); |
1754 new_canonical_types.SetAt(0, signature_type); | 1762 new_canonical_types.SetAt(0, signature_type); |
1755 result.set_canonical_types(new_canonical_types); | 1763 result.set_canonical_types(new_canonical_types); |
1756 return result.raw(); | 1764 return result.raw(); |
1757 } | 1765 } |
1758 | 1766 |
1759 | 1767 |
1760 RawClass* Class::GetClass(intptr_t class_id, bool is_signature_class) { | 1768 RawClass* Class::GetClass(intptr_t class_id, bool is_signature_class) { |
1761 if (class_id >= kIntegerCid && class_id <= kJSRegExpCid) { | 1769 if (class_id >= kIntegerCid && class_id <= kWeakPropertyCid) { |
1762 return Isolate::Current()->class_table()->At(class_id); | 1770 return Isolate::Current()->class_table()->At(class_id); |
1763 } | 1771 } |
1764 if (class_id >= kNumPredefinedCids) { | 1772 if (class_id >= kNumPredefinedCids) { |
1765 if (is_signature_class) { | 1773 if (is_signature_class) { |
1766 return Class::New<Closure>(); | 1774 return Class::New<Closure>(); |
1767 } | 1775 } |
1768 return Class::New<Instance>(); | 1776 return Class::New<Instance>(); |
1769 } | 1777 } |
1770 OS::Print("Class::GetClass id unknown: %d\n", class_id); | 1778 OS::Print("Class::GetClass id unknown: %d\n", class_id); |
1771 UNREACHABLE(); | 1779 UNREACHABLE(); |
(...skipping 9532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11304 | 11312 |
11305 const char* JSRegExp::ToCString() const { | 11313 const char* JSRegExp::ToCString() const { |
11306 const String& str = String::Handle(pattern()); | 11314 const String& str = String::Handle(pattern()); |
11307 const char* format = "JSRegExp: pattern=%s flags=%s"; | 11315 const char* format = "JSRegExp: pattern=%s flags=%s"; |
11308 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 11316 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
11309 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); | 11317 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
11310 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 11318 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
11311 return chars; | 11319 return chars; |
11312 } | 11320 } |
11313 | 11321 |
| 11322 |
| 11323 RawWeakProperty* WeakProperty::New(Heap::Space space) { |
| 11324 ASSERT(Isolate::Current()->object_store()->weak_property_class() |
| 11325 != Class::null()); |
| 11326 WeakProperty& result = WeakProperty::Handle(); |
| 11327 { |
| 11328 RawObject* raw = Object::Allocate(WeakProperty::kClassId, |
| 11329 WeakProperty::InstanceSize(), |
| 11330 space); |
| 11331 NoGCScope no_gc; |
| 11332 result ^= raw; |
| 11333 } |
| 11334 return result.raw(); |
| 11335 } |
| 11336 |
| 11337 |
| 11338 const char* WeakProperty::ToCString() const { |
| 11339 return "WeakProperty"; |
| 11340 } |
| 11341 |
11314 } // namespace dart | 11342 } // namespace dart |
OLD | NEW |