Chromium Code Reviews| Index: runtime/vm/object.cc |
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
| index bdfac3c04eebfd88df665dccbf890e9f3ad69cd0..5cf452472e25d83b4b623183073ed742cb09bbbb 100644 |
| --- a/runtime/vm/object.cc |
| +++ b/runtime/vm/object.cc |
| @@ -6546,6 +6546,15 @@ static RawString* MakeFunctionMetaName(const Function& func) { |
| } |
| +static RawString* MakeTypeParameterMetaName(const TypeParameter& param) { |
| + const String& cname = String::Handle( |
| + MakeClassMetaName(Class::Handle(param.parameterized_class()))); |
| + String& pname = String::Handle(param.name()); |
| + pname = String::Concat(Symbols::At(), pname); |
| + return String::Concat(cname, pname); |
|
rmacnak
2013/09/13 01:13:28
We can have a type parameter and function or field
Michael Lippautz (Google)
2013/09/13 01:42:17
I changed the separator symbol. We can change this
|
| +} |
| + |
| + |
| void Library::AddMetadata(const Class& cls, |
| const String& name, |
| intptr_t token_pos) const { |
| @@ -6584,6 +6593,15 @@ void Library::AddFunctionMetadata(const Function& func, |
| token_pos); |
| } |
| + |
| +void Library::AddTypeParameterMetadata(const TypeParameter& param, |
| + intptr_t token_pos) const { |
| + AddMetadata(Class::Handle(param.parameterized_class()), |
| + String::Handle(MakeTypeParameterMetaName(param)), |
| + token_pos); |
| +} |
| + |
| + |
| void Library::AddLibraryMetadata(const Class& cls, intptr_t token_pos) const { |
| AddMetadata(cls, Symbols::TopLevel(), token_pos); |
| } |
| @@ -6598,6 +6616,8 @@ RawString* Library::MakeMetadataName(const Object& obj) const { |
| return MakeFunctionMetaName(Function::Cast(obj)); |
| } else if (obj.IsLibrary()) { |
| return Symbols::TopLevel().raw(); |
| + } else if (obj.IsTypeParameter()) { |
| + return MakeTypeParameterMetaName(TypeParameter::Cast(obj)); |
| } |
| UNIMPLEMENTED(); |
| return String::null(); |
| @@ -6623,7 +6643,7 @@ RawField* Library::GetMetadataField(const String& metaname) const { |
| RawObject* Library::GetMetadata(const Object& obj) const { |
| if (!obj.IsClass() && !obj.IsField() && !obj.IsFunction() && |
| - !obj.IsLibrary()) { |
| + !obj.IsLibrary() && !obj.IsTypeParameter()) { |
| return Object::null(); |
| } |
| const String& metaname = String::Handle(MakeMetadataName(obj)); |