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

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

Issue 10916268: New 'Clean Up' to convert old optional parameters to the new optional named where possible. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 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
Index: compiler/java/com/google/dart/compiler/parser/DartParser.java
diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java
index 76802e8b9e0c651f561661878c008f76625b2b8d..2ec422c5711388ffb51f08ae6f66cad41d0d3711 100644
--- a/compiler/java/com/google/dart/compiler/parser/DartParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java
@@ -1110,13 +1110,13 @@ public class DartParser extends CompletionHooksParserBase {
}
List<DartTypeParameter> typeParameters = parseTypeParametersOpt();
- List<DartParameter> params = parseFormalParameterList();
+ FormalParameters params = parseFormalParameterList();
expect(Token.SEMICOLON);
validateNoDefaultParameterValues(
- params,
+ params.val,
ParserErrorCode.DEFAULT_VALUE_CAN_NOT_BE_SPECIFIED_IN_TYPEDEF);
- return done(new DartFunctionTypeAlias(name, returnType, params, typeParameters));
+ return done(new DartFunctionTypeAlias(name, returnType, params.val, typeParameters));
}
/**
@@ -1516,7 +1516,7 @@ public class DartParser extends CompletionHooksParserBase {
name = doneWithoutConsuming(new DartPropertyAccess(name, parseIdentifier()));
}
done(name);
- List<DartParameter> formals = parseFormalParameterList();
+ FormalParameters formals = parseFormalParameterList();
int parametersCloseParen = ctx.getTokenLocation().getBegin();
// Parse redirecting factory
@@ -1532,8 +1532,8 @@ public class DartParser extends CompletionHooksParserBase {
redirectedConstructorName = parseIdentifier();
}
expect(Token.SEMICOLON);
- DartFunction function = doneWithoutConsuming(new DartFunction(formals, parametersCloseParen,
- null, null));
+ DartFunction function = doneWithoutConsuming(new DartFunction(formals.val,
+ formals.optionalOpenOffset, formals.optionalCloseOffset, parametersCloseParen, null, null));
return DartMethodDefinition.create(name, function, modifiers, redirectedTypeName,
redirectedConstructorName);
}
@@ -1541,10 +1541,12 @@ public class DartParser extends CompletionHooksParserBase {
DartFunction function;
if (peekPseudoKeyword(0, NATIVE_KEYWORD)) {
modifiers = modifiers.makeNative();
- function = new DartFunction(formals, parametersCloseParen, parseNativeBlock(modifiers), null);
+ function = new DartFunction(formals.val, formals.optionalOpenOffset,
+ formals.optionalCloseOffset, parametersCloseParen, parseNativeBlock(modifiers), null);
} else {
- function = new DartFunction(formals, parametersCloseParen,
- parseFunctionStatementBody(!modifiers.isExternal(), true), null);
+ function = new DartFunction(formals.val, formals.optionalOpenOffset,
+ formals.optionalCloseOffset, parametersCloseParen, parseFunctionStatementBody(
+ !modifiers.isExternal(), true), null);
}
doneWithoutConsuming(function);
return DartMethodDefinition.create(name, function, modifiers, null);
@@ -1670,15 +1672,16 @@ public class DartParser extends CompletionHooksParserBase {
}
// Parse the parameters definitions.
- List<DartParameter> parameters;
+ FormalParameters parametersInfo;
if (modifiers.isGetter() && peek(0) != Token.LPAREN) {
// TODO: For now the parameters are optional so that both the old and new style will be
// accepted, but eventually parameters should be disallowed.
- parameters = new ArrayList<DartParameter>();
+ parametersInfo = new FormalParameters(new ArrayList<DartParameter>(), -1, -1);
} else {
//reportError(position(), ParserErrorCode.DEPRECATED_GETTER);
- parameters = parseFormalParameterList();
+ parametersInfo = parseFormalParameterList();
}
+ List<DartParameter> parameters = parametersInfo.val;
int parametersCloseParen = ctx.getTokenLocation().getBegin();
if (arity != -1) {
@@ -1718,6 +1721,7 @@ public class DartParser extends CompletionHooksParserBase {
}
expect(Token.SEMICOLON);
DartFunction function = doneWithoutConsuming(new DartFunction(parameters,
+ parametersInfo.optionalOpenOffset, parametersInfo.optionalCloseOffset,
parametersCloseParen, null, returnType));
return DartMethodDefinition.create(name, function, modifiers, redirectedTypeName,
redirectedConstructorName);
@@ -1747,8 +1751,9 @@ public class DartParser extends CompletionHooksParserBase {
}
}
- DartFunction function = doneWithoutConsuming(new DartFunction(parameters, parametersCloseParen,
- body, returnType));
+ DartFunction function = doneWithoutConsuming(new DartFunction(parameters,
+ parametersInfo.optionalOpenOffset, parametersInfo.optionalCloseOffset,
+ parametersCloseParen, body, returnType));
return DartMethodDefinition.create(name, function, modifiers, initializers);
}
@@ -1988,6 +1993,18 @@ public class DartParser extends CompletionHooksParserBase {
setMetadata(definition, metadata);
return done(definition);
}
+
+ private static class FormalParameters {
+ private final List<DartParameter> val;
+ private final int optionalOpenOffset;
+ private final int optionalCloseOffset;
+ public FormalParameters(List<DartParameter> parameters, int optionalOpenOffset,
+ int optionalCloseOffset) {
+ this.val = parameters;
+ this.optionalOpenOffset = optionalOpenOffset;
+ this.optionalCloseOffset = optionalCloseOffset;
+ }
+ }
/**
* <pre>
@@ -2016,9 +2033,11 @@ public class DartParser extends CompletionHooksParserBase {
* </pre>
*/
@Terminals(tokens = {Token.COMMA, Token.RPAREN})
- private List<DartParameter> parseFormalParameterList() {
+ private FormalParameters parseFormalParameterList() {
beginFormalParameterList();
List<DartParameter> params = new ArrayList<DartParameter>();
+ int optionalOpenOffset = -1;
+ int optionalCloseOffset = -1;
expect(Token.LPAREN);
boolean done = optional(Token.RPAREN);
boolean isOptional = false;
@@ -2029,22 +2048,26 @@ public class DartParser extends CompletionHooksParserBase {
reportErrorWithoutAdvancing(ParserErrorCode.CANNOT_MIX_OPTIONAL_AND_NAMED_PARAMETERS);
}
isOptional = true;
+ optionalOpenOffset = ctx.getTokenLocation().getBegin();
}
if (!isNamed && optional(Token.LBRACE)) {
if (isOptional) {
reportErrorWithoutAdvancing(ParserErrorCode.CANNOT_MIX_OPTIONAL_AND_NAMED_PARAMETERS);
}
isNamed = true;
+ optionalOpenOffset = ctx.getTokenLocation().getBegin();
}
DartParameter param = parseFormalParameter(isOptional, isNamed);
params.add(param);
if (isOptional && optional(Token.RBRACK)) {
+ optionalCloseOffset = ctx.getTokenLocation().getBegin();
expectCloseParen();
break;
}
if (isNamed && optional(Token.RBRACE)) {
+ optionalCloseOffset = ctx.getTokenLocation().getBegin();
expectCloseParen();
break;
}
@@ -2064,7 +2087,7 @@ public class DartParser extends CompletionHooksParserBase {
}
}
- return done(params);
+ return new FormalParameters(done(params), optionalOpenOffset, optionalCloseOffset);
}
/**
@@ -2138,7 +2161,7 @@ public class DartParser extends CompletionHooksParserBase {
if (hasVar) {
reportError(position(), ParserErrorCode.FUNCTION_TYPED_PARAMETER_IS_VAR);
}
- functionParams = parseFormalParameterList();
+ functionParams = parseFormalParameterList().val;
validateNoDefaultParameterValues(
functionParams,
ParserErrorCode.DEFAULT_VALUE_CAN_NOT_BE_SPECIFIED_IN_CLOSURE);
@@ -2191,7 +2214,8 @@ public class DartParser extends CompletionHooksParserBase {
break;
}
- DartParameter parameter = new DartParameter(paramName, type, functionParams, defaultExpr, modifiers);
+ DartParameter parameter = new DartParameter(paramName, type, functionParams, defaultExpr,
+ modifiers);
setMetadata(parameter, metadata);
return done(parameter);
}
@@ -3448,10 +3472,11 @@ public class DartParser extends CompletionHooksParserBase {
default:
return null;
}
- List<DartParameter> params = parseFormalParameterList();
+ FormalParameters params = parseFormalParameterList();
int parametersCloseParen = ctx.getTokenLocation().getBegin();
DartBlock body = parseFunctionStatementBody(true, isDeclaration);
- DartFunction function = new DartFunction(params, parametersCloseParen, body, returnType);
+ DartFunction function = new DartFunction(params.val, params.optionalOpenOffset,
+ params.optionalCloseOffset, parametersCloseParen, body, returnType);
doneWithoutConsuming(function);
return function;
}

Powered by Google App Engine
This is Rietveld 408576698