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

Unified Diff: compiler/java/com/google/dart/compiler/parser/DartParser.java

Issue 10868078: Fix for 4700 - accept metadata in more places (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: compiler/java/com/google/dart/compiler/parser/DartParser.java
===================================================================
--- compiler/java/com/google/dart/compiler/parser/DartParser.java (revision 11322)
+++ compiler/java/com/google/dart/compiler/parser/DartParser.java (working copy)
@@ -1861,8 +1861,10 @@
*/
private DartFieldDefinition parseFieldDeclaration(Modifiers modifiers, DartTypeNode type) {
List<DartField> fields = new ArrayList<DartField>();
+ List<DartAnnotation> metadata = parseMetadata();
do {
beginVariableDeclaration();
+ List<DartAnnotation> fieldMetadata = parseMetadata();
DartIdentifier name = parseIdentifier();
DartExpression value = null;
if (optional(Token.ASSIGN)) {
@@ -1874,9 +1876,13 @@
if (modifiers.isExternal()) {
reportError(name, ParserErrorCode.EXTERNAL_ONLY_METHOD);
}
- fields.add(done(new DartField(name, modifiers, null, value)));
+ DartField field = done(new DartField(name, modifiers, null, value));
+ field.setMetadata(fieldMetadata);
+ fields.add(field);
} while (optional(Token.COMMA));
- return done(new DartFieldDefinition(type, fields));
+ DartFieldDefinition definition = new DartFieldDefinition(type, fields);
+ definition.setMetadata(metadata);
+ return done(definition);
}
/**
@@ -3759,6 +3765,7 @@
List<DartVariable> idents = new ArrayList<DartVariable>();
do {
beginVariableDeclaration();
+ List<DartAnnotation> metadata = parseMetadata();
DartIdentifier name = parseIdentifier();
DartExpression value = null;
if (isParsingInterface) {
@@ -3767,7 +3774,9 @@
} else if (optional(Token.ASSIGN)) {
value = parseExpression();
}
- idents.add(done(new DartVariable(name, value)));
+ DartVariable variable = done(new DartVariable(name, value));
+ variable.setMetadata(metadata);
+ idents.add(variable);
} while (optional(Token.COMMA));
return idents;
@@ -3856,7 +3865,14 @@
labels.add(parseIdentifier());
expect(Token.COLON);
}
+ List<DartAnnotation> metadata = parseMetadata();
DartStatement statement = parseNonLabelledStatement();
+ if (!metadata.isEmpty() && statement instanceof DartVariableStatement) {
+ DartVariableStatement variableStatement = (DartVariableStatement) statement;
+ if (!variableStatement.getVariables().isEmpty()) {
+ variableStatement.getVariables().get(0).setMetadata(metadata);
+ }
+ }
for (int i = labels.size() - 1; i >= 0; i--) {
statement = done(new DartLabel(labels.get(i), statement));
}
@@ -4632,6 +4648,7 @@
*/
private DartParameter parseCatchParameter() {
beginCatchParameter();
+ List<DartAnnotation> metadata = parseMetadata();
DartTypeNode type = null;
Modifiers modifiers = Modifiers.NONE;
boolean isDeclared = false;
@@ -4651,7 +4668,9 @@
if (!isDeclared) {
reportError(name, ParserErrorCode.EXPECTED_VAR_FINAL_OR_TYPE);
}
- return done(new DartParameter(name, type, null, null, modifiers));
+ DartParameter parameter = done(new DartParameter(name, type, null, null, modifiers));
+ parameter.setMetadata(metadata);
+ return parameter;
}
/**
@@ -4708,8 +4727,10 @@
if (optional(Token.CATCH)) {
expect(Token.LPAREN);
beginCatchParameter();
+ List<DartAnnotation> metadata = parseMetadata();
DartIdentifier exceptionName = parseIdentifier();
exception = done(new DartParameter(exceptionName, exceptionType, null, null, Modifiers.NONE));
+ exception.setMetadata(metadata);
if (optional(Token.COMMA)) {
beginCatchParameter();
DartIdentifier stackName = parseIdentifier();
@@ -4719,9 +4740,11 @@
} else {
// Create a dummy identifier that the user cannot reliably reference.
beginCatchParameter();
+ List<DartAnnotation> metadata = parseMetadata();
beginIdentifier();
DartIdentifier exceptionName = done(new DartIdentifier("e" + Long.toHexString(System.currentTimeMillis())));
exception = done(new DartParameter(exceptionName, exceptionType, null, null, Modifiers.NONE));
+ exception.setMetadata(metadata);
}
DartBlock block = parseBlock();
catches.add(done(new DartCatchBlock(block, exception, stackTrace)));
@@ -4732,8 +4755,10 @@
DartParameter exception;
if (match(Token.IDENTIFIER) && (peek(1) == Token.COMMA || peek(1) == Token.RPAREN)) {
beginCatchParameter();
+ List<DartAnnotation> metadata = parseMetadata();
DartIdentifier exceptionName = parseIdentifier();
exception = done(new DartParameter(exceptionName, null , null, null, Modifiers.NONE));
+ exception.setMetadata(metadata);
} else {
// Old-style parameter
//reportError(position(), ParserErrorCode.DEPRECATED_CATCH);
@@ -4743,8 +4768,10 @@
if (optional(Token.COMMA)) {
if (match(Token.IDENTIFIER) && peek(1) == Token.RPAREN) {
beginCatchParameter();
+ List<DartAnnotation> metadata = parseMetadata();
DartIdentifier stackName = parseIdentifier();
stackTrace = done(new DartParameter(stackName, null, null, null, Modifiers.NONE));
+ stackTrace.setMetadata(metadata);
} else {
// Old-style parameter
//reportError(position(), ParserErrorCode.DEPRECATED_CATCH);
« no previous file with comments | « no previous file | compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698