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/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
789 | 789 |
790 // Set up names for object array and one byte string class which are | 790 // Set up names for object array and one byte string class which are |
791 // pre-allocated in the vm isolate also. | 791 // pre-allocated in the vm isolate also. |
792 cls = Dart::vm_isolate()->object_store()->array_class(); | 792 cls = Dart::vm_isolate()->object_store()->array_class(); |
793 cls.set_name(Symbols::_List()); | 793 cls.set_name(Symbols::_List()); |
794 cls = Dart::vm_isolate()->object_store()->one_byte_string_class(); | 794 cls = Dart::vm_isolate()->object_store()->one_byte_string_class(); |
795 cls.set_name(Symbols::OneByteString()); | 795 cls.set_name(Symbols::OneByteString()); |
796 } | 796 } |
797 | 797 |
798 | 798 |
799 void Object::CreateInternalMetaData() { | 799 void Object::CreateInternalMetaData() { |
Ivan Posva
2014/07/01 14:27:48
Please evaluate whether this is function is still
rmacnak
2014/07/01 20:08:20
I don't see any other references to @parent. Remov
| |
800 // Initialize meta data for VM internal classes. | 800 // Initialize meta data for VM internal classes. |
801 Class& cls = Class::Handle(); | 801 Class& cls = Class::Handle(); |
802 Array& fields = Array::Handle(); | 802 Array& fields = Array::Handle(); |
803 Field& fld = Field::Handle(); | 803 Field& fld = Field::Handle(); |
804 String& name = String::Handle(); | 804 String& name = String::Handle(); |
805 | 805 |
806 // TODO(iposva): Add more of the VM classes here. | 806 // TODO(iposva): Add more of the VM classes here. |
807 cls = context_class_; | 807 cls = context_class_; |
808 fields = Array::New(1, Heap::kOld); | 808 fields = Array::New(1, Heap::kOld); |
809 name = Symbols::New("@parent_"); | 809 name = Symbols::New("@parent_"); |
810 fld = Field::New(name, false, false, false, cls, 0); | 810 fld = Field::New(name, false, false, false, true, cls, 0); |
811 fields.SetAt(0, fld); | 811 fields.SetAt(0, fld); |
812 cls.SetFields(fields); | 812 cls.SetFields(fields); |
813 } | 813 } |
814 | 814 |
815 | 815 |
816 // Make unused space in an object whose type has been transformed safe | 816 // Make unused space in an object whose type has been transformed safe |
817 // for traversing during GC. | 817 // for traversing during GC. |
818 // The unused part of the transformed object is marked as an TypedDataInt8Array | 818 // The unused part of the transformed object is marked as an TypedDataInt8Array |
819 // object. | 819 // object. |
820 void Object::MakeUnusedSpaceTraversable(const Object& obj, | 820 void Object::MakeUnusedSpaceTraversable(const Object& obj, |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1381 Field& field = Field::Handle(isolate); | 1381 Field& field = Field::Handle(isolate); |
1382 Smi& value = Smi::Handle(isolate); | 1382 Smi& value = Smi::Handle(isolate); |
1383 String& field_name = String::Handle(isolate); | 1383 String& field_name = String::Handle(isolate); |
1384 | 1384 |
1385 #define CLASS_LIST_WITH_NULL(V) \ | 1385 #define CLASS_LIST_WITH_NULL(V) \ |
1386 V(Null) \ | 1386 V(Null) \ |
1387 CLASS_LIST_NO_OBJECT(V) | 1387 CLASS_LIST_NO_OBJECT(V) |
1388 | 1388 |
1389 #define ADD_SET_FIELD(clazz) \ | 1389 #define ADD_SET_FIELD(clazz) \ |
1390 field_name = Symbols::New("cid"#clazz); \ | 1390 field_name = Symbols::New("cid"#clazz); \ |
1391 field = Field::New(field_name, true, false, true, cls, 0); \ | 1391 field = Field::New(field_name, true, false, true, false, cls, 0); \ |
Ivan Posva
2014/07/01 14:27:49
These fields are synthetic, no?
rmacnak
2014/07/01 20:08:20
They are accessed from Dart code, so no.
| |
1392 value = Smi::New(k##clazz##Cid); \ | 1392 value = Smi::New(k##clazz##Cid); \ |
1393 field.set_value(value); \ | 1393 field.set_value(value); \ |
1394 field.set_type(Type::Handle(Type::IntType())); \ | 1394 field.set_type(Type::Handle(Type::IntType())); \ |
1395 cls.AddField(field); \ | 1395 cls.AddField(field); \ |
1396 | 1396 |
1397 CLASS_LIST_WITH_NULL(ADD_SET_FIELD) | 1397 CLASS_LIST_WITH_NULL(ADD_SET_FIELD) |
1398 #undef ADD_SET_FIELD | 1398 #undef ADD_SET_FIELD |
1399 | 1399 |
1400 return Error::null(); | 1400 return Error::null(); |
1401 } | 1401 } |
(...skipping 5454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6856 Field::InstanceSize(), | 6856 Field::InstanceSize(), |
6857 Heap::kOld); | 6857 Heap::kOld); |
6858 return reinterpret_cast<RawField*>(raw); | 6858 return reinterpret_cast<RawField*>(raw); |
6859 } | 6859 } |
6860 | 6860 |
6861 | 6861 |
6862 RawField* Field::New(const String& name, | 6862 RawField* Field::New(const String& name, |
6863 bool is_static, | 6863 bool is_static, |
6864 bool is_final, | 6864 bool is_final, |
6865 bool is_const, | 6865 bool is_const, |
6866 bool is_synthetic, | |
6866 const Class& owner, | 6867 const Class& owner, |
6867 intptr_t token_pos) { | 6868 intptr_t token_pos) { |
6868 ASSERT(!owner.IsNull()); | 6869 ASSERT(!owner.IsNull()); |
6869 const Field& result = Field::Handle(Field::New()); | 6870 const Field& result = Field::Handle(Field::New()); |
6870 result.set_name(name); | 6871 result.set_name(name); |
6871 result.set_is_static(is_static); | 6872 result.set_is_static(is_static); |
6872 if (is_static) { | 6873 if (is_static) { |
6873 result.set_value(Object::null_instance()); | 6874 result.set_value(Object::null_instance()); |
6874 } else { | 6875 } else { |
6875 result.SetOffset(0); | 6876 result.SetOffset(0); |
6876 } | 6877 } |
6877 result.set_is_final(is_final); | 6878 result.set_is_final(is_final); |
6878 result.set_is_const(is_const); | 6879 result.set_is_const(is_const); |
6880 result.set_is_synthetic(is_synthetic); | |
6879 result.set_owner(owner); | 6881 result.set_owner(owner); |
6880 result.set_token_pos(token_pos); | 6882 result.set_token_pos(token_pos); |
6881 result.set_has_initializer(false); | 6883 result.set_has_initializer(false); |
6882 result.set_is_unboxing_candidate(true); | 6884 result.set_is_unboxing_candidate(true); |
6883 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); | 6885 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); |
6884 result.set_is_nullable(FLAG_use_field_guards ? false : true); | 6886 result.set_is_nullable(FLAG_use_field_guards ? false : true); |
6885 result.set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset); | 6887 result.set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset); |
6886 // Presently, we only attempt to remember the list length for final fields. | 6888 // Presently, we only attempt to remember the list length for final fields. |
6887 if (is_final && FLAG_use_field_guards) { | 6889 if (is_final && FLAG_use_field_guards) { |
6888 result.set_guarded_list_length(Field::kUnknownFixedLength); | 6890 result.set_guarded_list_length(Field::kUnknownFixedLength); |
(...skipping 1579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8468 | 8470 |
8469 | 8471 |
8470 void Library::AddMetadata(const Class& cls, | 8472 void Library::AddMetadata(const Class& cls, |
8471 const String& name, | 8473 const String& name, |
8472 intptr_t token_pos) const { | 8474 intptr_t token_pos) const { |
8473 const String& metaname = String::Handle(Symbols::New(name)); | 8475 const String& metaname = String::Handle(Symbols::New(name)); |
8474 Field& field = Field::Handle(Field::New(metaname, | 8476 Field& field = Field::Handle(Field::New(metaname, |
8475 true, // is_static | 8477 true, // is_static |
8476 false, // is_final | 8478 false, // is_final |
8477 false, // is_const | 8479 false, // is_const |
8480 true, // is_synthetic | |
8478 cls, | 8481 cls, |
8479 token_pos)); | 8482 token_pos)); |
8480 field.set_type(Type::Handle(Type::DynamicType())); | 8483 field.set_type(Type::Handle(Type::DynamicType())); |
8481 field.set_value(Array::empty_array()); | 8484 field.set_value(Array::empty_array()); |
8482 GrowableObjectArray& metadata = | 8485 GrowableObjectArray& metadata = |
8483 GrowableObjectArray::Handle(this->metadata()); | 8486 GrowableObjectArray::Handle(this->metadata()); |
8484 metadata.Add(field, Heap::kOld); | 8487 metadata.Add(field, Heap::kOld); |
8485 cls.AddField(field); | 8488 cls.AddField(field); |
8486 } | 8489 } |
8487 | 8490 |
(...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9831 StorePointer(&raw_ptr()->metadata_field_, value.raw()); | 9834 StorePointer(&raw_ptr()->metadata_field_, value.raw()); |
9832 } | 9835 } |
9833 | 9836 |
9834 | 9837 |
9835 void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) { | 9838 void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) { |
9836 ASSERT(Field::Handle(metadata_field()).IsNull()); | 9839 ASSERT(Field::Handle(metadata_field()).IsNull()); |
9837 Field& field = Field::Handle(Field::New(Symbols::TopLevel(), | 9840 Field& field = Field::Handle(Field::New(Symbols::TopLevel(), |
9838 true, // is_static | 9841 true, // is_static |
9839 false, // is_final | 9842 false, // is_final |
9840 false, // is_const | 9843 false, // is_const |
9844 true, // is_synthetic | |
9841 owner_class, | 9845 owner_class, |
9842 token_pos)); | 9846 token_pos)); |
9843 field.set_type(Type::Handle(Type::DynamicType())); | 9847 field.set_type(Type::Handle(Type::DynamicType())); |
9844 field.set_value(Array::empty_array()); | 9848 field.set_value(Array::empty_array()); |
9845 set_metadata_field(field); | 9849 set_metadata_field(field); |
9846 owner_class.AddField(field); | 9850 owner_class.AddField(field); |
9847 } | 9851 } |
9848 | 9852 |
9849 | 9853 |
9850 RawObject* Namespace::GetMetadata() const { | 9854 RawObject* Namespace::GetMetadata() const { |
(...skipping 9141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
18992 return tag_label.ToCString(); | 18996 return tag_label.ToCString(); |
18993 } | 18997 } |
18994 | 18998 |
18995 | 18999 |
18996 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 19000 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
18997 Instance::PrintJSONImpl(stream, ref); | 19001 Instance::PrintJSONImpl(stream, ref); |
18998 } | 19002 } |
18999 | 19003 |
19000 | 19004 |
19001 } // namespace dart | 19005 } // namespace dart |
OLD | NEW |