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 2715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2726 owner, TokenPosition::kMethodExtractor)); | 2726 owner, TokenPosition::kMethodExtractor)); |
2727 | 2727 |
2728 // Initialize signature: receiver is a single fixed parameter. | 2728 // Initialize signature: receiver is a single fixed parameter. |
2729 const intptr_t kNumParameters = 1; | 2729 const intptr_t kNumParameters = 1; |
2730 extractor.set_num_fixed_parameters(kNumParameters); | 2730 extractor.set_num_fixed_parameters(kNumParameters); |
2731 extractor.SetNumOptionalParameters(0, 0); | 2731 extractor.SetNumOptionalParameters(0, 0); |
2732 extractor.set_parameter_types(Object::extractor_parameter_types()); | 2732 extractor.set_parameter_types(Object::extractor_parameter_types()); |
2733 extractor.set_parameter_names(Object::extractor_parameter_names()); | 2733 extractor.set_parameter_names(Object::extractor_parameter_names()); |
2734 extractor.set_result_type(Object::dynamic_type()); | 2734 extractor.set_result_type(Object::dynamic_type()); |
2735 extractor.set_kernel_offset(kernel_offset()); | 2735 extractor.set_kernel_offset(kernel_offset()); |
| 2736 extractor.set_kernel_data(TypedData::Handle(zone, kernel_data())); |
2736 | 2737 |
2737 extractor.set_extracted_method_closure(closure_function); | 2738 extractor.set_extracted_method_closure(closure_function); |
2738 extractor.set_is_debuggable(false); | 2739 extractor.set_is_debuggable(false); |
2739 extractor.set_is_visible(false); | 2740 extractor.set_is_visible(false); |
2740 | 2741 |
2741 owner.AddFunction(extractor); | 2742 owner.AddFunction(extractor); |
2742 | 2743 |
2743 return extractor.raw(); | 2744 return extractor.raw(); |
2744 } | 2745 } |
2745 | 2746 |
(...skipping 3196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5942 } | 5943 } |
5943 | 5944 |
5944 void Function::SetNumOptionalParameters(intptr_t num_optional_parameters, | 5945 void Function::SetNumOptionalParameters(intptr_t num_optional_parameters, |
5945 bool are_optional_positional) const { | 5946 bool are_optional_positional) const { |
5946 ASSERT(num_optional_parameters >= 0); | 5947 ASSERT(num_optional_parameters >= 0); |
5947 set_num_optional_parameters(are_optional_positional | 5948 set_num_optional_parameters(are_optional_positional |
5948 ? num_optional_parameters | 5949 ? num_optional_parameters |
5949 : -num_optional_parameters); | 5950 : -num_optional_parameters); |
5950 } | 5951 } |
5951 | 5952 |
| 5953 void Function::set_kernel_data(const TypedData& data) const { |
| 5954 StorePointer(&raw_ptr()->kernel_data_, data.raw()); |
| 5955 } |
| 5956 |
5952 bool Function::IsOptimizable() const { | 5957 bool Function::IsOptimizable() const { |
5953 if (FLAG_precompiled_mode) { | 5958 if (FLAG_precompiled_mode) { |
5954 return true; | 5959 return true; |
5955 } | 5960 } |
5956 if (is_native()) { | 5961 if (is_native()) { |
5957 // Native methods don't need to be optimized. | 5962 // Native methods don't need to be optimized. |
5958 return false; | 5963 return false; |
5959 } | 5964 } |
5960 const intptr_t function_length = end_token_pos().Pos() - token_pos().Pos(); | 5965 const intptr_t function_length = end_token_pos().Pos() - token_pos().Pos(); |
5961 if (is_optimizable() && (script() != Script::null()) && | 5966 if (is_optimizable() && (script() != Script::null()) && |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6634 const PatchClass& clone_owner = | 6639 const PatchClass& clone_owner = |
6635 PatchClass::Handle(zone, PatchClass::New(new_owner, origin)); | 6640 PatchClass::Handle(zone, PatchClass::New(new_owner, origin)); |
6636 clone.set_owner(clone_owner); | 6641 clone.set_owner(clone_owner); |
6637 clone.ClearICDataArray(); | 6642 clone.ClearICDataArray(); |
6638 clone.ClearCode(); | 6643 clone.ClearCode(); |
6639 clone.set_usage_counter(0); | 6644 clone.set_usage_counter(0); |
6640 clone.set_deoptimization_counter(0); | 6645 clone.set_deoptimization_counter(0); |
6641 clone.set_optimized_instruction_count(0); | 6646 clone.set_optimized_instruction_count(0); |
6642 clone.set_optimized_call_site_count(0); | 6647 clone.set_optimized_call_site_count(0); |
6643 clone.set_kernel_offset(kernel_offset()); | 6648 clone.set_kernel_offset(kernel_offset()); |
| 6649 clone.set_kernel_data(TypedData::Handle(zone, kernel_data())); |
| 6650 |
6644 if (new_owner.NumTypeParameters() > 0) { | 6651 if (new_owner.NumTypeParameters() > 0) { |
6645 // Adjust uninstantiated types to refer to type parameters of the new owner. | 6652 // Adjust uninstantiated types to refer to type parameters of the new owner. |
6646 const TypeArguments& type_params = | 6653 const TypeArguments& type_params = |
6647 TypeArguments::Handle(zone, type_parameters()); | 6654 TypeArguments::Handle(zone, type_parameters()); |
6648 if (!type_params.IsNull()) { | 6655 if (!type_params.IsNull()) { |
6649 const intptr_t num_type_params = type_params.Length(); | 6656 const intptr_t num_type_params = type_params.Length(); |
6650 const TypeArguments& type_params_clone = | 6657 const TypeArguments& type_params_clone = |
6651 TypeArguments::Handle(zone, TypeArguments::New(num_type_params)); | 6658 TypeArguments::Handle(zone, TypeArguments::New(num_type_params)); |
6652 TypeParameter& type_param = TypeParameter::Handle(zone); | 6659 TypeParameter& type_param = TypeParameter::Handle(zone); |
6653 for (intptr_t i = 0; i < num_type_params; i++) { | 6660 for (intptr_t i = 0; i < num_type_params; i++) { |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6817 param_type = Type::DynamicType(); | 6824 param_type = Type::DynamicType(); |
6818 closure_function.SetParameterTypeAt(0, param_type); | 6825 closure_function.SetParameterTypeAt(0, param_type); |
6819 closure_function.SetParameterNameAt(0, Symbols::ClosureParameter()); | 6826 closure_function.SetParameterNameAt(0, Symbols::ClosureParameter()); |
6820 for (int i = kClosure; i < num_params; i++) { | 6827 for (int i = kClosure; i < num_params; i++) { |
6821 param_type = ParameterTypeAt(has_receiver - kClosure + i); | 6828 param_type = ParameterTypeAt(has_receiver - kClosure + i); |
6822 closure_function.SetParameterTypeAt(i, param_type); | 6829 closure_function.SetParameterTypeAt(i, param_type); |
6823 param_name = ParameterNameAt(has_receiver - kClosure + i); | 6830 param_name = ParameterNameAt(has_receiver - kClosure + i); |
6824 closure_function.SetParameterNameAt(i, param_name); | 6831 closure_function.SetParameterNameAt(i, param_name); |
6825 } | 6832 } |
6826 closure_function.set_kernel_offset(kernel_offset()); | 6833 closure_function.set_kernel_offset(kernel_offset()); |
| 6834 closure_function.set_kernel_data(TypedData::Handle(zone, kernel_data())); |
6827 | 6835 |
6828 const Type& signature_type = | 6836 const Type& signature_type = |
6829 Type::Handle(zone, closure_function.SignatureType()); | 6837 Type::Handle(zone, closure_function.SignatureType()); |
6830 if (!signature_type.IsFinalized()) { | 6838 if (!signature_type.IsFinalized()) { |
6831 ClassFinalizer::FinalizeType(Class::Handle(zone, Owner()), signature_type); | 6839 ClassFinalizer::FinalizeType(Class::Handle(zone, Owner()), signature_type); |
6832 } | 6840 } |
6833 set_implicit_closure_function(closure_function); | 6841 set_implicit_closure_function(closure_function); |
6834 ASSERT(closure_function.IsImplicitClosureFunction()); | 6842 ASSERT(closure_function.IsImplicitClosureFunction()); |
6835 return closure_function.raw(); | 6843 return closure_function.raw(); |
6836 } | 6844 } |
(...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7692 bool Field::IsSetterName(const String& function_name) { | 7700 bool Field::IsSetterName(const String& function_name) { |
7693 return function_name.StartsWith(Symbols::SetterPrefix()); | 7701 return function_name.StartsWith(Symbols::SetterPrefix()); |
7694 } | 7702 } |
7695 | 7703 |
7696 void Field::set_name(const String& value) const { | 7704 void Field::set_name(const String& value) const { |
7697 ASSERT(value.IsSymbol()); | 7705 ASSERT(value.IsSymbol()); |
7698 ASSERT(IsOriginal()); | 7706 ASSERT(IsOriginal()); |
7699 StorePointer(&raw_ptr()->name_, value.raw()); | 7707 StorePointer(&raw_ptr()->name_, value.raw()); |
7700 } | 7708 } |
7701 | 7709 |
| 7710 void Field::set_kernel_data(const TypedData& data) const { |
| 7711 StorePointer(&raw_ptr()->kernel_data_, data.raw()); |
| 7712 } |
| 7713 |
7702 RawObject* Field::RawOwner() const { | 7714 RawObject* Field::RawOwner() const { |
7703 if (IsOriginal()) { | 7715 if (IsOriginal()) { |
7704 return raw_ptr()->owner_; | 7716 return raw_ptr()->owner_; |
7705 } else { | 7717 } else { |
7706 const Field& field = Field::Handle(Original()); | 7718 const Field& field = Field::Handle(Original()); |
7707 ASSERT(field.IsOriginal()); | 7719 ASSERT(field.IsOriginal()); |
7708 ASSERT(!Object::Handle(field.raw_ptr()->owner_).IsField()); | 7720 ASSERT(!Object::Handle(field.raw_ptr()->owner_).IsField()); |
7709 return field.raw_ptr()->owner_; | 7721 return field.raw_ptr()->owner_; |
7710 } | 7722 } |
7711 } | 7723 } |
(...skipping 1244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8956 ASSERT(kind < Token::kNumTokens); | 8968 ASSERT(kind < Token::kNumTokens); |
8957 return Symbols::Token(kind).raw(); | 8969 return Symbols::Token(kind).raw(); |
8958 } else { | 8970 } else { |
8959 ASSERT(obj.IsLiteralToken()); // Must be a literal token. | 8971 ASSERT(obj.IsLiteralToken()); // Must be a literal token. |
8960 const LiteralToken& literal_token = LiteralToken::Cast(obj); | 8972 const LiteralToken& literal_token = LiteralToken::Cast(obj); |
8961 return literal_token.literal(); | 8973 return literal_token.literal(); |
8962 } | 8974 } |
8963 } | 8975 } |
8964 | 8976 |
8965 bool Script::HasSource() const { | 8977 bool Script::HasSource() const { |
8966 #if !defined(DART_PRECOMPILED_RUNTIME) | |
8967 return kind() == RawScript::kKernelTag || | |
8968 raw_ptr()->source_ != String::null(); | |
8969 #else // !defined(DART_PRECOMPILED_RUNTIME) | |
8970 return raw_ptr()->source_ != String::null(); | 8978 return raw_ptr()->source_ != String::null(); |
8971 #endif // !defined(DART_PRECOMPILED_RUNTIME) | |
8972 } | 8979 } |
8973 | 8980 |
8974 RawString* Script::Source() const { | 8981 RawString* Script::Source() const { |
8975 String& source = String::Handle(raw_ptr()->source_); | 8982 String& source = String::Handle(raw_ptr()->source_); |
8976 if (source.IsNull()) { | 8983 if (source.IsNull()) { |
8977 return GenerateSource(); | 8984 return GenerateSource(); |
8978 } | 8985 } |
8979 return raw_ptr()->source_; | 8986 return raw_ptr()->source_; |
8980 } | 8987 } |
8981 | 8988 |
8982 RawString* Script::GenerateSource() const { | 8989 RawString* Script::GenerateSource() const { |
8983 #if !defined(DART_PRECOMPILED_RUNTIME) | |
8984 if (kind() == RawScript::kKernelTag) { | |
8985 String& source = String::Handle(raw_ptr()->source_); | |
8986 if (source.IsNull()) { | |
8987 // This is created lazily. Now we need it. | |
8988 set_source(kernel::GetSourceFor(*this)); | |
8989 } | |
8990 return raw_ptr()->source_; | |
8991 } | |
8992 #endif // !defined(DART_PRECOMPILED_RUNTIME) | |
8993 | |
8994 const TokenStream& token_stream = TokenStream::Handle(tokens()); | 8990 const TokenStream& token_stream = TokenStream::Handle(tokens()); |
8995 if (token_stream.IsNull()) { | 8991 if (token_stream.IsNull()) { |
8996 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT); | 8992 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kFullAOT); |
8997 return String::null(); | 8993 return String::null(); |
8998 } | 8994 } |
8999 return token_stream.GenerateSource(); | 8995 return token_stream.GenerateSource(); |
9000 } | 8996 } |
9001 | 8997 |
9002 void Script::set_compile_time_constants(const Array& value) const { | 8998 void Script::set_compile_time_constants(const Array& value) const { |
9003 StorePointer(&raw_ptr()->compile_time_constants_, value.raw()); | 8999 StorePointer(&raw_ptr()->compile_time_constants_, value.raw()); |
9004 } | 9000 } |
9005 | 9001 |
9006 void Script::set_kernel_data(const uint8_t* kernel_data) const { | |
9007 StoreNonPointer(&raw_ptr()->kernel_data_, kernel_data); | |
9008 } | |
9009 | |
9010 void Script::set_kernel_data_size(const intptr_t kernel_data_size) const { | |
9011 StoreNonPointer(&raw_ptr()->kernel_data_size_, kernel_data_size); | |
9012 } | |
9013 | |
9014 void Script::set_kernel_script_index(const intptr_t kernel_script_index) const { | 9002 void Script::set_kernel_script_index(const intptr_t kernel_script_index) const { |
9015 StoreNonPointer(&raw_ptr()->kernel_script_index_, kernel_script_index); | 9003 StoreNonPointer(&raw_ptr()->kernel_script_index_, kernel_script_index); |
9016 } | 9004 } |
9017 | 9005 |
9018 void Script::set_kernel_string_offsets(const TypedData& offsets) const { | 9006 void Script::set_kernel_string_offsets(const TypedData& offsets) const { |
9019 StorePointer(&raw_ptr()->kernel_string_offsets_, offsets.raw()); | 9007 StorePointer(&raw_ptr()->kernel_string_offsets_, offsets.raw()); |
9020 } | 9008 } |
9021 | 9009 |
9022 void Script::set_kernel_string_data(const TypedData& data) const { | 9010 void Script::set_kernel_string_data(const TypedData& data) const { |
9023 StorePointer(&raw_ptr()->kernel_string_data_, data.raw()); | 9011 StorePointer(&raw_ptr()->kernel_string_data_, data.raw()); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9206 Array& yields = Array::Handle(raw_ptr()->yield_positions_); | 9194 Array& yields = Array::Handle(raw_ptr()->yield_positions_); |
9207 if (yields.IsNull() && kind() == RawScript::kKernelTag) { | 9195 if (yields.IsNull() && kind() == RawScript::kKernelTag) { |
9208 // This is created lazily. Now we need it. | 9196 // This is created lazily. Now we need it. |
9209 kernel::CollectTokenPositionsFor(*this); | 9197 kernel::CollectTokenPositionsFor(*this); |
9210 } | 9198 } |
9211 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 9199 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
9212 return raw_ptr()->yield_positions_; | 9200 return raw_ptr()->yield_positions_; |
9213 } | 9201 } |
9214 | 9202 |
9215 RawArray* Script::line_starts() const { | 9203 RawArray* Script::line_starts() const { |
9216 #if !defined(DART_PRECOMPILED_RUNTIME) | |
9217 const Array& line_starts_array = Array::Handle(raw_ptr()->line_starts_); | |
9218 if (line_starts_array.IsNull() && kind() == RawScript::kKernelTag) { | |
9219 // This is created lazily. Now we need it. | |
9220 set_line_starts(kernel::GetLineStartsFor(*this)); | |
9221 } | |
9222 #endif // !defined(DART_PRECOMPILED_RUNTIME) | |
9223 return raw_ptr()->line_starts_; | 9204 return raw_ptr()->line_starts_; |
9224 } | 9205 } |
9225 | 9206 |
9226 RawArray* Script::debug_positions() const { | 9207 RawArray* Script::debug_positions() const { |
9227 #if !defined(DART_PRECOMPILED_RUNTIME) | 9208 #if !defined(DART_PRECOMPILED_RUNTIME) |
9228 Array& debug_positions_array = Array::Handle(raw_ptr()->debug_positions_); | 9209 Array& debug_positions_array = Array::Handle(raw_ptr()->debug_positions_); |
9229 if (debug_positions_array.IsNull() && kind() == RawScript::kKernelTag) { | 9210 if (debug_positions_array.IsNull() && kind() == RawScript::kKernelTag) { |
9230 // This is created lazily. Now we need it. | 9211 // This is created lazily. Now we need it. |
9231 kernel::CollectTokenPositionsFor(*this); | 9212 kernel::CollectTokenPositionsFor(*this); |
9232 } | 9213 } |
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9954 GrowableHandlePtrArray<const String> pieces(zone, 3); | 9935 GrowableHandlePtrArray<const String> pieces(zone, 3); |
9955 pieces.Add(cname); | 9936 pieces.Add(cname); |
9956 pieces.Add(Symbols::At()); | 9937 pieces.Add(Symbols::At()); |
9957 pieces.Add(String::Handle(param.name())); | 9938 pieces.Add(String::Handle(param.name())); |
9958 return Symbols::FromConcatAll(thread, pieces); | 9939 return Symbols::FromConcatAll(thread, pieces); |
9959 } | 9940 } |
9960 | 9941 |
9961 void Library::AddMetadata(const Object& owner, | 9942 void Library::AddMetadata(const Object& owner, |
9962 const String& name, | 9943 const String& name, |
9963 TokenPosition token_pos, | 9944 TokenPosition token_pos, |
9964 intptr_t kernel_offset) const { | 9945 intptr_t kernel_offset, |
| 9946 const TypedData* kernel_data) const { |
9965 Thread* thread = Thread::Current(); | 9947 Thread* thread = Thread::Current(); |
9966 ASSERT(thread->IsMutatorThread()); | 9948 ASSERT(thread->IsMutatorThread()); |
9967 Zone* zone = thread->zone(); | 9949 Zone* zone = thread->zone(); |
9968 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); | 9950 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); |
9969 const Field& field = | 9951 const Field& field = |
9970 Field::Handle(zone, Field::NewTopLevel(metaname, | 9952 Field::Handle(zone, Field::NewTopLevel(metaname, |
9971 false, // is_final | 9953 false, // is_final |
9972 false, // is_const | 9954 false, // is_const |
9973 owner, token_pos)); | 9955 owner, token_pos)); |
9974 field.SetFieldType(Object::dynamic_type()); | 9956 field.SetFieldType(Object::dynamic_type()); |
9975 field.set_is_reflectable(false); | 9957 field.set_is_reflectable(false); |
9976 field.SetStaticValue(Array::empty_array(), true); | 9958 field.SetStaticValue(Array::empty_array(), true); |
9977 field.set_kernel_offset(kernel_offset); | 9959 field.set_kernel_offset(kernel_offset); |
| 9960 if (kernel_data != NULL) { |
| 9961 field.set_kernel_data(*kernel_data); |
| 9962 } |
9978 GrowableObjectArray& metadata = | 9963 GrowableObjectArray& metadata = |
9979 GrowableObjectArray::Handle(zone, this->metadata()); | 9964 GrowableObjectArray::Handle(zone, this->metadata()); |
9980 metadata.Add(field, Heap::kOld); | 9965 metadata.Add(field, Heap::kOld); |
9981 } | 9966 } |
9982 | 9967 |
9983 void Library::AddClassMetadata(const Class& cls, | 9968 void Library::AddClassMetadata(const Class& cls, |
9984 const Object& tl_owner, | 9969 const Object& tl_owner, |
9985 TokenPosition token_pos, | 9970 TokenPosition token_pos, |
9986 intptr_t kernel_offset) const { | 9971 intptr_t kernel_offset, |
| 9972 const TypedData* kernel_data) const { |
9987 Thread* thread = Thread::Current(); | 9973 Thread* thread = Thread::Current(); |
9988 Zone* zone = thread->zone(); | 9974 Zone* zone = thread->zone(); |
9989 // We use the toplevel class as the owner of a class's metadata field because | 9975 // We use the toplevel class as the owner of a class's metadata field because |
9990 // a class's metadata is in scope of the library, not the class. | 9976 // a class's metadata is in scope of the library, not the class. |
9991 AddMetadata(tl_owner, | 9977 AddMetadata(tl_owner, |
9992 String::Handle(zone, MakeClassMetaName(thread, zone, cls)), | 9978 String::Handle(zone, MakeClassMetaName(thread, zone, cls)), |
9993 token_pos, kernel_offset); | 9979 token_pos, kernel_offset, kernel_data); |
9994 } | 9980 } |
9995 | 9981 |
9996 void Library::AddFieldMetadata(const Field& field, | 9982 void Library::AddFieldMetadata(const Field& field, |
9997 TokenPosition token_pos, | 9983 TokenPosition token_pos, |
9998 intptr_t kernel_offset) const { | 9984 intptr_t kernel_offset, |
| 9985 const TypedData* kernel_data) const { |
9999 Thread* thread = Thread::Current(); | 9986 Thread* thread = Thread::Current(); |
10000 Zone* zone = thread->zone(); | 9987 Zone* zone = thread->zone(); |
10001 AddMetadata(Object::Handle(zone, field.RawOwner()), | 9988 AddMetadata(Object::Handle(zone, field.RawOwner()), |
10002 String::Handle(zone, MakeFieldMetaName(thread, zone, field)), | 9989 String::Handle(zone, MakeFieldMetaName(thread, zone, field)), |
10003 token_pos, kernel_offset); | 9990 token_pos, kernel_offset, kernel_data); |
10004 } | 9991 } |
10005 | 9992 |
10006 void Library::AddFunctionMetadata(const Function& func, | 9993 void Library::AddFunctionMetadata(const Function& func, |
10007 TokenPosition token_pos, | 9994 TokenPosition token_pos, |
10008 intptr_t kernel_offset) const { | 9995 intptr_t kernel_offset, |
| 9996 const TypedData* kernel_data) const { |
10009 Thread* thread = Thread::Current(); | 9997 Thread* thread = Thread::Current(); |
10010 Zone* zone = thread->zone(); | 9998 Zone* zone = thread->zone(); |
10011 AddMetadata(Object::Handle(zone, func.RawOwner()), | 9999 AddMetadata(Object::Handle(zone, func.RawOwner()), |
10012 String::Handle(zone, MakeFunctionMetaName(thread, zone, func)), | 10000 String::Handle(zone, MakeFunctionMetaName(thread, zone, func)), |
10013 token_pos, kernel_offset); | 10001 token_pos, kernel_offset, kernel_data); |
10014 } | 10002 } |
10015 | 10003 |
10016 void Library::AddTypeParameterMetadata(const TypeParameter& param, | 10004 void Library::AddTypeParameterMetadata(const TypeParameter& param, |
10017 TokenPosition token_pos) const { | 10005 TokenPosition token_pos) const { |
10018 Thread* thread = Thread::Current(); | 10006 Thread* thread = Thread::Current(); |
10019 Zone* zone = thread->zone(); | 10007 Zone* zone = thread->zone(); |
10020 AddMetadata( | 10008 AddMetadata( |
10021 Class::Handle(zone, param.parameterized_class()), | 10009 Class::Handle(zone, param.parameterized_class()), |
10022 String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param)), | 10010 String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param)), |
10023 token_pos); | 10011 token_pos); |
(...skipping 12524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22548 } | 22536 } |
22549 return UserTag::null(); | 22537 return UserTag::null(); |
22550 } | 22538 } |
22551 | 22539 |
22552 const char* UserTag::ToCString() const { | 22540 const char* UserTag::ToCString() const { |
22553 const String& tag_label = String::Handle(label()); | 22541 const String& tag_label = String::Handle(label()); |
22554 return tag_label.ToCString(); | 22542 return tag_label.ToCString(); |
22555 } | 22543 } |
22556 | 22544 |
22557 } // namespace dart | 22545 } // namespace dart |
OLD | NEW |