Index: compiler/java/com/google/dart/compiler/parser/DartParser.java |
=================================================================== |
--- compiler/java/com/google/dart/compiler/parser/DartParser.java (revision 10739) |
+++ compiler/java/com/google/dart/compiler/parser/DartParser.java (working copy) |
@@ -1459,6 +1459,7 @@ |
} |
int arity = -1; |
+ Token operation = null; |
if (peek(1) != Token.LPAREN && optionalPseudoKeyword(OPERATOR_KEYWORD)) { |
// Overloaded operator. |
if (modifiers.isStatic()) { |
@@ -1467,11 +1468,13 @@ |
modifiers = modifiers.makeOperator(); |
beginOperatorName(); |
- Token operation = next(); |
+ operation = next(); |
if (operation.isUserDefinableOperator()) { |
name = done(new DartIdentifier(operation.getSyntax())); |
if (operation == Token.ASSIGN_INDEX) { |
arity = 2; |
+ } else if (operation == Token.SUB) { |
+ arity = -1; |
} else if (operation.isBinaryOperator()) { |
arity = 1; |
} else if (operation == Token.INDEX) { |
@@ -1571,6 +1574,16 @@ |
reportError(parameter, ParserErrorCode.NAMED_PARAMETER_NOT_ALLOWED); |
} |
} |
+ } else if (operation == Token.SUB) { |
+ if (parameters.size() != 0 && parameters.size() != 1) { |
+ reportError(position(), ParserErrorCode.ILLEGAL_NUMBER_OF_PARAMETERS); |
+ } |
+ // In methods with required arity each parameter is required. |
+ for (DartParameter parameter : parameters) { |
+ if (parameter.getModifiers().isNamed()) { |
+ reportError(parameter, ParserErrorCode.NAMED_PARAMETER_NOT_ALLOWED); |
+ } |
+ } |
} |
// Parse initializer expressions for constructors. |