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() { | |
800 // Initialize meta data for VM internal classes. | |
801 Class& cls = Class::Handle(); | |
802 Array& fields = Array::Handle(); | |
803 Field& fld = Field::Handle(); | |
804 String& name = String::Handle(); | |
805 | |
806 // TODO(iposva): Add more of the VM classes here. | |
807 cls = context_class_; | |
808 fields = Array::New(1, Heap::kOld); | |
809 name = Symbols::New("@parent_"); | |
810 fld = Field::New(name, false, false, false, cls, 0); | |
811 fields.SetAt(0, fld); | |
812 cls.SetFields(fields); | |
813 } | |
814 | |
815 | |
816 // Make unused space in an object whose type has been transformed safe | 799 // Make unused space in an object whose type has been transformed safe |
817 // for traversing during GC. | 800 // for traversing during GC. |
818 // The unused part of the transformed object is marked as an TypedDataInt8Array | 801 // The unused part of the transformed object is marked as an TypedDataInt8Array |
819 // object. | 802 // object. |
820 void Object::MakeUnusedSpaceTraversable(const Object& obj, | 803 void Object::MakeUnusedSpaceTraversable(const Object& obj, |
821 intptr_t original_size, | 804 intptr_t original_size, |
822 intptr_t used_size) { | 805 intptr_t used_size) { |
823 ASSERT(Isolate::Current()->no_gc_scope_depth() > 0); | 806 ASSERT(Isolate::Current()->no_gc_scope_depth() > 0); |
824 ASSERT(!obj.IsNull()); | 807 ASSERT(!obj.IsNull()); |
825 ASSERT(original_size >= used_size); | 808 ASSERT(original_size >= used_size); |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1381 Field& field = Field::Handle(isolate); | 1364 Field& field = Field::Handle(isolate); |
1382 Smi& value = Smi::Handle(isolate); | 1365 Smi& value = Smi::Handle(isolate); |
1383 String& field_name = String::Handle(isolate); | 1366 String& field_name = String::Handle(isolate); |
1384 | 1367 |
1385 #define CLASS_LIST_WITH_NULL(V) \ | 1368 #define CLASS_LIST_WITH_NULL(V) \ |
1386 V(Null) \ | 1369 V(Null) \ |
1387 CLASS_LIST_NO_OBJECT(V) | 1370 CLASS_LIST_NO_OBJECT(V) |
1388 | 1371 |
1389 #define ADD_SET_FIELD(clazz) \ | 1372 #define ADD_SET_FIELD(clazz) \ |
1390 field_name = Symbols::New("cid"#clazz); \ | 1373 field_name = Symbols::New("cid"#clazz); \ |
1391 field = Field::New(field_name, true, false, true, cls, 0); \ | 1374 field = Field::New(field_name, true, false, true, false, cls, 0); \ |
1392 value = Smi::New(k##clazz##Cid); \ | 1375 value = Smi::New(k##clazz##Cid); \ |
1393 field.set_value(value); \ | 1376 field.set_value(value); \ |
1394 field.set_type(Type::Handle(Type::IntType())); \ | 1377 field.set_type(Type::Handle(Type::IntType())); \ |
1395 cls.AddField(field); \ | 1378 cls.AddField(field); \ |
1396 | 1379 |
1397 CLASS_LIST_WITH_NULL(ADD_SET_FIELD) | 1380 CLASS_LIST_WITH_NULL(ADD_SET_FIELD) |
1398 #undef ADD_SET_FIELD | 1381 #undef ADD_SET_FIELD |
1399 | 1382 |
1400 return Error::null(); | 1383 return Error::null(); |
1401 } | 1384 } |
(...skipping 5454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6856 Field::InstanceSize(), | 6839 Field::InstanceSize(), |
6857 Heap::kOld); | 6840 Heap::kOld); |
6858 return reinterpret_cast<RawField*>(raw); | 6841 return reinterpret_cast<RawField*>(raw); |
6859 } | 6842 } |
6860 | 6843 |
6861 | 6844 |
6862 RawField* Field::New(const String& name, | 6845 RawField* Field::New(const String& name, |
6863 bool is_static, | 6846 bool is_static, |
6864 bool is_final, | 6847 bool is_final, |
6865 bool is_const, | 6848 bool is_const, |
| 6849 bool is_synthetic, |
6866 const Class& owner, | 6850 const Class& owner, |
6867 intptr_t token_pos) { | 6851 intptr_t token_pos) { |
6868 ASSERT(!owner.IsNull()); | 6852 ASSERT(!owner.IsNull()); |
6869 const Field& result = Field::Handle(Field::New()); | 6853 const Field& result = Field::Handle(Field::New()); |
6870 result.set_name(name); | 6854 result.set_name(name); |
6871 result.set_is_static(is_static); | 6855 result.set_is_static(is_static); |
6872 if (is_static) { | 6856 if (is_static) { |
6873 result.set_value(Object::null_instance()); | 6857 result.set_value(Object::null_instance()); |
6874 } else { | 6858 } else { |
6875 result.SetOffset(0); | 6859 result.SetOffset(0); |
6876 } | 6860 } |
6877 result.set_is_final(is_final); | 6861 result.set_is_final(is_final); |
6878 result.set_is_const(is_const); | 6862 result.set_is_const(is_const); |
| 6863 result.set_is_synthetic(is_synthetic); |
6879 result.set_owner(owner); | 6864 result.set_owner(owner); |
6880 result.set_token_pos(token_pos); | 6865 result.set_token_pos(token_pos); |
6881 result.set_has_initializer(false); | 6866 result.set_has_initializer(false); |
6882 result.set_is_unboxing_candidate(true); | 6867 result.set_is_unboxing_candidate(true); |
6883 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); | 6868 result.set_guarded_cid(FLAG_use_field_guards ? kIllegalCid : kDynamicCid); |
6884 result.set_is_nullable(FLAG_use_field_guards ? false : true); | 6869 result.set_is_nullable(FLAG_use_field_guards ? false : true); |
6885 result.set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset); | 6870 result.set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset); |
6886 // Presently, we only attempt to remember the list length for final fields. | 6871 // Presently, we only attempt to remember the list length for final fields. |
6887 if (is_final && FLAG_use_field_guards) { | 6872 if (is_final && FLAG_use_field_guards) { |
6888 result.set_guarded_list_length(Field::kUnknownFixedLength); | 6873 result.set_guarded_list_length(Field::kUnknownFixedLength); |
(...skipping 1579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8468 | 8453 |
8469 | 8454 |
8470 void Library::AddMetadata(const Class& cls, | 8455 void Library::AddMetadata(const Class& cls, |
8471 const String& name, | 8456 const String& name, |
8472 intptr_t token_pos) const { | 8457 intptr_t token_pos) const { |
8473 const String& metaname = String::Handle(Symbols::New(name)); | 8458 const String& metaname = String::Handle(Symbols::New(name)); |
8474 Field& field = Field::Handle(Field::New(metaname, | 8459 Field& field = Field::Handle(Field::New(metaname, |
8475 true, // is_static | 8460 true, // is_static |
8476 false, // is_final | 8461 false, // is_final |
8477 false, // is_const | 8462 false, // is_const |
| 8463 true, // is_synthetic |
8478 cls, | 8464 cls, |
8479 token_pos)); | 8465 token_pos)); |
8480 field.set_type(Type::Handle(Type::DynamicType())); | 8466 field.set_type(Type::Handle(Type::DynamicType())); |
8481 field.set_value(Array::empty_array()); | 8467 field.set_value(Array::empty_array()); |
8482 GrowableObjectArray& metadata = | 8468 GrowableObjectArray& metadata = |
8483 GrowableObjectArray::Handle(this->metadata()); | 8469 GrowableObjectArray::Handle(this->metadata()); |
8484 metadata.Add(field, Heap::kOld); | 8470 metadata.Add(field, Heap::kOld); |
8485 cls.AddField(field); | 8471 cls.AddField(field); |
8486 } | 8472 } |
8487 | 8473 |
(...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9831 StorePointer(&raw_ptr()->metadata_field_, value.raw()); | 9817 StorePointer(&raw_ptr()->metadata_field_, value.raw()); |
9832 } | 9818 } |
9833 | 9819 |
9834 | 9820 |
9835 void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) { | 9821 void Namespace::AddMetadata(intptr_t token_pos, const Class& owner_class) { |
9836 ASSERT(Field::Handle(metadata_field()).IsNull()); | 9822 ASSERT(Field::Handle(metadata_field()).IsNull()); |
9837 Field& field = Field::Handle(Field::New(Symbols::TopLevel(), | 9823 Field& field = Field::Handle(Field::New(Symbols::TopLevel(), |
9838 true, // is_static | 9824 true, // is_static |
9839 false, // is_final | 9825 false, // is_final |
9840 false, // is_const | 9826 false, // is_const |
| 9827 true, // is_synthetic |
9841 owner_class, | 9828 owner_class, |
9842 token_pos)); | 9829 token_pos)); |
9843 field.set_type(Type::Handle(Type::DynamicType())); | 9830 field.set_type(Type::Handle(Type::DynamicType())); |
9844 field.set_value(Array::empty_array()); | 9831 field.set_value(Array::empty_array()); |
9845 set_metadata_field(field); | 9832 set_metadata_field(field); |
9846 owner_class.AddField(field); | 9833 owner_class.AddField(field); |
9847 } | 9834 } |
9848 | 9835 |
9849 | 9836 |
9850 RawObject* Namespace::GetMetadata() const { | 9837 RawObject* Namespace::GetMetadata() const { |
(...skipping 9170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19021 return tag_label.ToCString(); | 19008 return tag_label.ToCString(); |
19022 } | 19009 } |
19023 | 19010 |
19024 | 19011 |
19025 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 19012 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
19026 Instance::PrintJSONImpl(stream, ref); | 19013 Instance::PrintJSONImpl(stream, ref); |
19027 } | 19014 } |
19028 | 19015 |
19029 | 19016 |
19030 } // namespace dart | 19017 } // namespace dart |
OLD | NEW |