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