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

Unified Diff: sdk/lib/_internal/compiler/implementation/scanner/listener.dart

Issue 155703004: Support parameter metadata. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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
Index: sdk/lib/_internal/compiler/implementation/scanner/listener.dart
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index 1be0e2a56a023d5b46beed6b5827d33367b2deb2..67fc7799068f57a73b609c62442579f9c74ce60e 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -252,6 +252,12 @@ class Listener {
void endMethod(Token getOrSet, Token beginToken, Token endToken) {
}
+ void beginMetadataStar(Token token) {
+ }
+
+ void endMetadataStar(int count, bool forParameter) {
+ }
+
void beginMetadata(Token token) {
}
@@ -1264,8 +1270,9 @@ class NodeListener extends ElementListener {
}
TypeAnnotation type = popNode();
Modifiers modifiers = popNode();
- pushNode(
- new VariableDefinitions(type, modifiers, new NodeList.singleton(name)));
+ NodeList metadata = popNode();
+ pushNode(new VariableDefinitions.forParameter(
+ metadata, type, modifiers, new NodeList.singleton(name)));
}
void endFormalParameters(int count, Token beginToken, Token endToken) {
@@ -1812,6 +1819,17 @@ class NodeListener extends ElementListener {
beginToken, inKeyword));
}
+ void endMetadataStar(int count, bool forParameter) {
+ // TODO(johnniwinther): Handle metadata for all node kinds.
+ if (forParameter) {
+ if (0 == count) {
+ pushNode(null);
+ } else {
+ pushNode(makeNodeList(count, null, null, ' '));
+ }
+ }
+ }
+
void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
NodeList arguments = popNode();
if (arguments == null) {
@@ -1839,13 +1857,14 @@ class NodeListener extends ElementListener {
if (name != null) {
send = new Send(receiver, name);
}
- pushNode(send);
+ pushNode(new Metadata(beginToken, send));
} else {
// This is a const constructor call.
endConstructorReference(beginToken, periodBeforeName, endToken);
Node constructor = popNode();
- pushNode(new NewExpression(beginToken,
- new Send(null, constructor, arguments)));
+ pushNode(new Metadata(beginToken,
+ new NewExpression(null,
+ new Send(null, constructor, arguments))));
}
}
@@ -1993,7 +2012,6 @@ class PartialMetadataAnnotation extends MetadataAnnotationX {
final Token beginToken;
final Token tokenAfterEndToken;
Expression cachedNode;
- Constant value;
PartialMetadataAnnotation(this.beginToken, this.tokenAfterEndToken);
@@ -2007,9 +2025,10 @@ class PartialMetadataAnnotation extends MetadataAnnotationX {
Node parseNode(DiagnosticListener listener) {
if (cachedNode != null) return cachedNode;
- cachedNode = parse(listener,
- annotatedElement.getCompilationUnit(),
- (p) => p.parseMetadata(beginToken));
+ Metadata metadata = parse(listener,
+ annotatedElement.getCompilationUnit(),
+ (p) => p.parseMetadata(beginToken));
+ cachedNode = metadata.expression;
return cachedNode;
}
}

Powered by Google App Engine
This is Rietveld 408576698