Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: runtime/vm/object.cc

Issue 2632253002: VM: [Kernel] Partial support for metadata annotations (Closed)
Patch Set: Address comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | tests/co19/co19-kernel.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | tests/co19/co19-kernel.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698