| 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 |