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

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

Issue 2972343002: [kernel] Insert kernel bodies into VM heap (Closed)
Patch Set: Review comments Created 3 years, 4 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') | runtime/vm/parser.cc » ('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 2715 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698