| 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 9632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9674 GrowableHandlePtrArray<const String> pieces(zone, 3); | 9675 GrowableHandlePtrArray<const String> pieces(zone, 3); |
| 9675 pieces.Add(cname); | 9676 pieces.Add(cname); |
| 9676 pieces.Add(Symbols::At()); | 9677 pieces.Add(Symbols::At()); |
| 9677 pieces.Add(String::Handle(param.name())); | 9678 pieces.Add(String::Handle(param.name())); |
| 9678 return Symbols::FromConcatAll(thread, pieces); | 9679 return Symbols::FromConcatAll(thread, pieces); |
| 9679 } | 9680 } |
| 9680 | 9681 |
| 9681 | 9682 |
| 9682 void Library::AddMetadata(const Object& owner, | 9683 void Library::AddMetadata(const Object& owner, |
| 9683 const String& name, | 9684 const String& name, |
| 9684 TokenPosition token_pos) const { | 9685 TokenPosition token_pos, |
| 9686 kernel::TreeNode* kernel_node) const { |
| 9685 Thread* thread = Thread::Current(); | 9687 Thread* thread = Thread::Current(); |
| 9686 ASSERT(thread->IsMutatorThread()); | 9688 ASSERT(thread->IsMutatorThread()); |
| 9687 Zone* zone = thread->zone(); | 9689 Zone* zone = thread->zone(); |
| 9688 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); | 9690 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); |
| 9689 const Field& field = | 9691 const Field& field = |
| 9690 Field::Handle(zone, Field::NewTopLevel(metaname, | 9692 Field::Handle(zone, Field::NewTopLevel(metaname, |
| 9691 false, // is_final | 9693 false, // is_final |
| 9692 false, // is_const | 9694 false, // is_const |
| 9693 owner, token_pos)); | 9695 owner, token_pos)); |
| 9694 field.SetFieldType(Object::dynamic_type()); | 9696 field.SetFieldType(Object::dynamic_type()); |
| 9695 field.set_is_reflectable(false); | 9697 field.set_is_reflectable(false); |
| 9696 field.SetStaticValue(Array::empty_array(), true); | 9698 field.SetStaticValue(Array::empty_array(), true); |
| 9699 field.set_kernel_field(kernel_node); |
| 9697 GrowableObjectArray& metadata = | 9700 GrowableObjectArray& metadata = |
| 9698 GrowableObjectArray::Handle(zone, this->metadata()); | 9701 GrowableObjectArray::Handle(zone, this->metadata()); |
| 9699 metadata.Add(field, Heap::kOld); | 9702 metadata.Add(field, Heap::kOld); |
| 9700 } | 9703 } |
| 9701 | 9704 |
| 9702 | 9705 |
| 9703 void Library::AddClassMetadata(const Class& cls, | 9706 void Library::AddClassMetadata(const Class& cls, |
| 9704 const Object& tl_owner, | 9707 const Object& tl_owner, |
| 9705 TokenPosition token_pos) const { | 9708 TokenPosition token_pos, |
| 9709 kernel::TreeNode* kernel_node) const { |
| 9706 Thread* thread = Thread::Current(); | 9710 Thread* thread = Thread::Current(); |
| 9707 Zone* zone = thread->zone(); | 9711 Zone* zone = thread->zone(); |
| 9708 // We use the toplevel class as the owner of a class's metadata field because | 9712 // We use the toplevel class as the owner of a class's metadata field because |
| 9709 // a class's metadata is in scope of the library, not the class. | 9713 // a class's metadata is in scope of the library, not the class. |
| 9710 AddMetadata(tl_owner, | 9714 AddMetadata(tl_owner, |
| 9711 String::Handle(zone, MakeClassMetaName(thread, zone, cls)), | 9715 String::Handle(zone, MakeClassMetaName(thread, zone, cls)), |
| 9712 token_pos); | 9716 token_pos, kernel_node); |
| 9713 } | 9717 } |
| 9714 | 9718 |
| 9715 | 9719 |
| 9716 void Library::AddFieldMetadata(const Field& field, | 9720 void Library::AddFieldMetadata(const Field& field, |
| 9717 TokenPosition token_pos) const { | 9721 TokenPosition token_pos, |
| 9722 kernel::TreeNode* kernel_node) const { |
| 9718 Thread* thread = Thread::Current(); | 9723 Thread* thread = Thread::Current(); |
| 9719 Zone* zone = thread->zone(); | 9724 Zone* zone = thread->zone(); |
| 9720 AddMetadata(Object::Handle(zone, field.RawOwner()), | 9725 AddMetadata(Object::Handle(zone, field.RawOwner()), |
| 9721 String::Handle(zone, MakeFieldMetaName(thread, zone, field)), | 9726 String::Handle(zone, MakeFieldMetaName(thread, zone, field)), |
| 9722 token_pos); | 9727 token_pos, kernel_node); |
| 9723 } | 9728 } |
| 9724 | 9729 |
| 9725 | 9730 |
| 9726 void Library::AddFunctionMetadata(const Function& func, | 9731 void Library::AddFunctionMetadata(const Function& func, |
| 9727 TokenPosition token_pos) const { | 9732 TokenPosition token_pos, |
| 9733 kernel::TreeNode* kernel_node) const { |
| 9728 Thread* thread = Thread::Current(); | 9734 Thread* thread = Thread::Current(); |
| 9729 Zone* zone = thread->zone(); | 9735 Zone* zone = thread->zone(); |
| 9730 AddMetadata(Object::Handle(zone, func.RawOwner()), | 9736 AddMetadata(Object::Handle(zone, func.RawOwner()), |
| 9731 String::Handle(zone, MakeFunctionMetaName(thread, zone, func)), | 9737 String::Handle(zone, MakeFunctionMetaName(thread, zone, func)), |
| 9732 token_pos); | 9738 token_pos, kernel_node); |
| 9733 } | 9739 } |
| 9734 | 9740 |
| 9735 | 9741 |
| 9736 void Library::AddTypeParameterMetadata(const TypeParameter& param, | 9742 void Library::AddTypeParameterMetadata(const TypeParameter& param, |
| 9737 TokenPosition token_pos) const { | 9743 TokenPosition token_pos) const { |
| 9738 Thread* thread = Thread::Current(); | 9744 Thread* thread = Thread::Current(); |
| 9739 Zone* zone = thread->zone(); | 9745 Zone* zone = thread->zone(); |
| 9740 AddMetadata( | 9746 AddMetadata( |
| 9741 Class::Handle(zone, param.parameterized_class()), | 9747 Class::Handle(zone, param.parameterized_class()), |
| 9742 String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param)), | 9748 String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param)), |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9794 } | 9800 } |
| 9795 const String& metaname = String::Handle(MakeMetadataName(obj)); | 9801 const String& metaname = String::Handle(MakeMetadataName(obj)); |
| 9796 Field& field = Field::Handle(GetMetadataField(metaname)); | 9802 Field& field = Field::Handle(GetMetadataField(metaname)); |
| 9797 if (field.IsNull()) { | 9803 if (field.IsNull()) { |
| 9798 // There is no metadata for this object. | 9804 // There is no metadata for this object. |
| 9799 return Object::empty_array().raw(); | 9805 return Object::empty_array().raw(); |
| 9800 } | 9806 } |
| 9801 Object& metadata = Object::Handle(); | 9807 Object& metadata = Object::Handle(); |
| 9802 metadata = field.StaticValue(); | 9808 metadata = field.StaticValue(); |
| 9803 if (field.StaticValue() == Object::empty_array().raw()) { | 9809 if (field.StaticValue() == Object::empty_array().raw()) { |
| 9804 metadata = Parser::ParseMetadata(field); | 9810 kernel::TreeNode* kernel_node = |
| 9811 reinterpret_cast<kernel::TreeNode*>(field.kernel_field()); |
| 9812 |
| 9813 if (kernel_node != NULL) { |
| 9814 metadata = kernel::EvaluateMetadata(kernel_node); |
| 9815 } else { |
| 9816 metadata = Parser::ParseMetadata(field); |
| 9817 } |
| 9805 if (metadata.IsArray()) { | 9818 if (metadata.IsArray()) { |
| 9806 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw()); | 9819 ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw()); |
| 9807 field.SetStaticValue(Array::Cast(metadata), true); | 9820 field.SetStaticValue(Array::Cast(metadata), true); |
| 9808 } | 9821 } |
| 9809 } | 9822 } |
| 9810 return metadata.raw(); | 9823 return metadata.raw(); |
| 9811 } | 9824 } |
| 9812 | 9825 |
| 9813 | 9826 |
| 9814 static bool ShouldBePrivate(const String& name) { | 9827 static bool ShouldBePrivate(const String& name) { |
| (...skipping 13184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 22999 return UserTag::null(); | 23012 return UserTag::null(); |
| 23000 } | 23013 } |
| 23001 | 23014 |
| 23002 | 23015 |
| 23003 const char* UserTag::ToCString() const { | 23016 const char* UserTag::ToCString() const { |
| 23004 const String& tag_label = String::Handle(label()); | 23017 const String& tag_label = String::Handle(label()); |
| 23005 return tag_label.ToCString(); | 23018 return tag_label.ToCString(); |
| 23006 } | 23019 } |
| 23007 | 23020 |
| 23008 } // namespace dart | 23021 } // namespace dart |
| OLD | NEW |