| 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/become.h" | 10 #include "vm/become.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "vm/debugger.h" | 22 #include "vm/debugger.h" |
| 23 #include "vm/deopt_instructions.h" | 23 #include "vm/deopt_instructions.h" |
| 24 #include "vm/disassembler.h" | 24 #include "vm/disassembler.h" |
| 25 #include "vm/double_conversion.h" | 25 #include "vm/double_conversion.h" |
| 26 #include "vm/exceptions.h" | 26 #include "vm/exceptions.h" |
| 27 #include "vm/growable_array.h" | 27 #include "vm/growable_array.h" |
| 28 #include "vm/hash_table.h" | 28 #include "vm/hash_table.h" |
| 29 #include "vm/heap.h" | 29 #include "vm/heap.h" |
| 30 #include "vm/intrinsifier.h" | 30 #include "vm/intrinsifier.h" |
| 31 #include "vm/isolate_reload.h" | 31 #include "vm/isolate_reload.h" |
| 32 #include "vm/kernel_to_il.h" |
| 32 #include "vm/object_store.h" | 33 #include "vm/object_store.h" |
| 33 #include "vm/parser.h" | 34 #include "vm/parser.h" |
| 34 #include "vm/precompiler.h" | 35 #include "vm/precompiler.h" |
| 35 #include "vm/profiler.h" | 36 #include "vm/profiler.h" |
| 36 #include "vm/resolver.h" | 37 #include "vm/resolver.h" |
| 37 #include "vm/reusable_handles.h" | 38 #include "vm/reusable_handles.h" |
| 38 #include "vm/runtime_entry.h" | 39 #include "vm/runtime_entry.h" |
| 39 #include "vm/scopes.h" | 40 #include "vm/scopes.h" |
| 40 #include "vm/stack_frame.h" | 41 #include "vm/stack_frame.h" |
| 41 #include "vm/symbols.h" | 42 #include "vm/symbols.h" |
| (...skipping 9616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9658 GrowableHandlePtrArray<const String> pieces(zone, 3); | 9659 GrowableHandlePtrArray<const String> pieces(zone, 3); |
| 9659 pieces.Add(cname); | 9660 pieces.Add(cname); |
| 9660 pieces.Add(Symbols::At()); | 9661 pieces.Add(Symbols::At()); |
| 9661 pieces.Add(String::Handle(param.name())); | 9662 pieces.Add(String::Handle(param.name())); |
| 9662 return Symbols::FromConcatAll(thread, pieces); | 9663 return Symbols::FromConcatAll(thread, pieces); |
| 9663 } | 9664 } |
| 9664 | 9665 |
| 9665 | 9666 |
| 9666 void Library::AddMetadata(const Object& owner, | 9667 void Library::AddMetadata(const Object& owner, |
| 9667 const String& name, | 9668 const String& name, |
| 9668 TokenPosition token_pos) const { | 9669 TokenPosition token_pos, |
| 9670 kernel::TreeNode* kernel_node) const { |
| 9669 Thread* thread = Thread::Current(); | 9671 Thread* thread = Thread::Current(); |
| 9670 ASSERT(thread->IsMutatorThread()); | 9672 ASSERT(thread->IsMutatorThread()); |
| 9671 Zone* zone = thread->zone(); | 9673 Zone* zone = thread->zone(); |
| 9672 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); | 9674 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); |
| 9673 const Field& field = | 9675 const Field& field = |
| 9674 Field::Handle(zone, Field::NewTopLevel(metaname, | 9676 Field::Handle(zone, Field::NewTopLevel(metaname, |
| 9675 false, // is_final | 9677 false, // is_final |
| 9676 false, // is_const | 9678 false, // is_const |
| 9677 owner, token_pos)); | 9679 owner, token_pos)); |
| 9678 field.SetFieldType(Object::dynamic_type()); | 9680 field.SetFieldType(Object::dynamic_type()); |
| 9679 field.set_is_reflectable(false); | 9681 field.set_is_reflectable(false); |
| 9680 field.SetStaticValue(Array::empty_array(), true); | 9682 field.SetStaticValue(Array::empty_array(), true); |
| 9683 field.set_kernel_field(kernel_node); |
| 9681 GrowableObjectArray& metadata = | 9684 GrowableObjectArray& metadata = |
| 9682 GrowableObjectArray::Handle(zone, this->metadata()); | 9685 GrowableObjectArray::Handle(zone, this->metadata()); |
| 9683 metadata.Add(field, Heap::kOld); | 9686 metadata.Add(field, Heap::kOld); |
| 9684 } | 9687 } |
| 9685 | 9688 |
| 9686 | 9689 |
| 9687 void Library::AddClassMetadata(const Class& cls, | 9690 void Library::AddClassMetadata(const Class& cls, |
| 9688 const Object& tl_owner, | 9691 const Object& tl_owner, |
| 9689 TokenPosition token_pos) const { | 9692 TokenPosition token_pos, |
| 9693 kernel::TreeNode* kernel_node) const { |
| 9690 Thread* thread = Thread::Current(); | 9694 Thread* thread = Thread::Current(); |
| 9691 Zone* zone = thread->zone(); | 9695 Zone* zone = thread->zone(); |
| 9692 // We use the toplevel class as the owner of a class's metadata field because | 9696 // We use the toplevel class as the owner of a class's metadata field because |
| 9693 // a class's metadata is in scope of the library, not the class. | 9697 // a class's metadata is in scope of the library, not the class. |
| 9694 AddMetadata(tl_owner, | 9698 AddMetadata(tl_owner, |
| 9695 String::Handle(zone, MakeClassMetaName(thread, zone, cls)), | 9699 String::Handle(zone, MakeClassMetaName(thread, zone, cls)), |
| 9696 token_pos); | 9700 token_pos, kernel_node); |
| 9697 } | 9701 } |
| 9698 | 9702 |
| 9699 | 9703 |
| 9700 void Library::AddFieldMetadata(const Field& field, | 9704 void Library::AddFieldMetadata(const Field& field, |
| 9701 TokenPosition token_pos) const { | 9705 TokenPosition token_pos, |
| 9706 kernel::TreeNode* kernel_node) const { |
| 9702 Thread* thread = Thread::Current(); | 9707 Thread* thread = Thread::Current(); |
| 9703 Zone* zone = thread->zone(); | 9708 Zone* zone = thread->zone(); |
| 9704 AddMetadata(Object::Handle(zone, field.RawOwner()), | 9709 AddMetadata(Object::Handle(zone, field.RawOwner()), |
| 9705 String::Handle(zone, MakeFieldMetaName(thread, zone, field)), | 9710 String::Handle(zone, MakeFieldMetaName(thread, zone, field)), |
| 9706 token_pos); | 9711 token_pos, kernel_node); |
| 9707 } | 9712 } |
| 9708 | 9713 |
| 9709 | 9714 |
| 9710 void Library::AddFunctionMetadata(const Function& func, | 9715 void Library::AddFunctionMetadata(const Function& func, |
| 9711 TokenPosition token_pos) const { | 9716 TokenPosition token_pos, |
| 9717 kernel::TreeNode* kernel_node) const { |
| 9712 Thread* thread = Thread::Current(); | 9718 Thread* thread = Thread::Current(); |
| 9713 Zone* zone = thread->zone(); | 9719 Zone* zone = thread->zone(); |
| 9714 AddMetadata(Object::Handle(zone, func.RawOwner()), | 9720 AddMetadata(Object::Handle(zone, func.RawOwner()), |
| 9715 String::Handle(zone, MakeFunctionMetaName(thread, zone, func)), | 9721 String::Handle(zone, MakeFunctionMetaName(thread, zone, func)), |
| 9716 token_pos); | 9722 token_pos, kernel_node); |
| 9717 } | 9723 } |
| 9718 | 9724 |
| 9719 | 9725 |
| 9720 void Library::AddTypeParameterMetadata(const TypeParameter& param, | 9726 void Library::AddTypeParameterMetadata(const TypeParameter& param, |
| 9721 TokenPosition token_pos) const { | 9727 TokenPosition token_pos) const { |
| 9722 Thread* thread = Thread::Current(); | 9728 Thread* thread = Thread::Current(); |
| 9723 Zone* zone = thread->zone(); | 9729 Zone* zone = thread->zone(); |
| 9724 AddMetadata( | 9730 AddMetadata( |
| 9725 Class::Handle(zone, param.parameterized_class()), | 9731 Class::Handle(zone, param.parameterized_class()), |
| 9726 String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param)), | 9732 String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param)), |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9778 } | 9784 } |
| 9779 const String& metaname = String::Handle(MakeMetadataName(obj)); | 9785 const String& metaname = String::Handle(MakeMetadataName(obj)); |
| 9780 Field& field = Field::Handle(GetMetadataField(metaname)); | 9786 Field& field = Field::Handle(GetMetadataField(metaname)); |
| 9781 if (field.IsNull()) { | 9787 if (field.IsNull()) { |
| 9782 // There is no metadata for this object. | 9788 // There is no metadata for this object. |
| 9783 return Object::empty_array().raw(); | 9789 return Object::empty_array().raw(); |
| 9784 } | 9790 } |
| 9785 Object& metadata = Object::Handle(); | 9791 Object& metadata = Object::Handle(); |
| 9786 metadata = field.StaticValue(); | 9792 metadata = field.StaticValue(); |
| 9787 if (field.StaticValue() == Object::empty_array().raw()) { | 9793 if (field.StaticValue() == Object::empty_array().raw()) { |
| 9788 metadata = Parser::ParseMetadata(field); | 9794 kernel::TreeNode* kernel_node = |
| 9795 reinterpret_cast<kernel::TreeNode*>(field.kernel_field()); |
| 9796 |
| 9797 if (kernel_node != NULL) { |
| 9798 metadata = kernel::EvaluateMetadata(kernel_node); |
| 9799 } else { |
| 9800 metadata = Parser::ParseMetadata(field); |
| 9801 } |
| 9789 if (metadata.IsArray()) { | 9802 if (metadata.IsArray()) { |
| 9790 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw()); | 9803 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw()); |
| 9791 field.SetStaticValue(Array::Cast(metadata), true); | 9804 field.SetStaticValue(Array::Cast(metadata), true); |
| 9792 } | 9805 } |
| 9793 } | 9806 } |
| 9794 return metadata.raw(); | 9807 return metadata.raw(); |
| 9795 } | 9808 } |
| 9796 | 9809 |
| 9797 | 9810 |
| 9798 static bool ShouldBePrivate(const String& name) { | 9811 static bool ShouldBePrivate(const String& name) { |
| (...skipping 13184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 22983 return UserTag::null(); | 22996 return UserTag::null(); |
| 22984 } | 22997 } |
| 22985 | 22998 |
| 22986 | 22999 |
| 22987 const char* UserTag::ToCString() const { | 23000 const char* UserTag::ToCString() const { |
| 22988 const String& tag_label = String::Handle(label()); | 23001 const String& tag_label = String::Handle(label()); |
| 22989 return tag_label.ToCString(); | 23002 return tag_label.ToCString(); |
| 22990 } | 23003 } |
| 22991 | 23004 |
| 22992 } // namespace dart | 23005 } // namespace dart |
| OLD | NEW |