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

Unified Diff: runtime/vm/object.cc

Issue 23872010: Add metadata for type parameters (TypeVariableMirror). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: rebase Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
« 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