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

Unified Diff: frog/member.dart

Issue 9264069: Improve frog error reporting when providing too few or too many arguments. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 11 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 | tests/language/src/PrivateFactoryResolutionNegativeTest.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/member.dart
diff --git a/frog/member.dart b/frog/member.dart
index dedf1556b70c81a39834c2f2e6244a1b1e1b1071..7c261f5eca842941809bff5b04226d493f01700c 100644
--- a/frog/member.dart
+++ b/frog/member.dart
@@ -894,9 +894,25 @@ class MethodMember extends Member {
return false;
}
- static String _argCountMsg(int actual, int expected, [bool atLeast=false]) {
- return 'wrong number of positional arguments, expected ' +
- '${atLeast ? "at least " : ""}$expected but found $actual';
+ /** Returns true if any of the parameters are optional. */
+ bool hasOptionalParameters() {
+ return parameters.some((Parameter p) => p.isOptional);
+ }
+
+ String _tooManyArgumentsMsg(int actual, int expected) {
+ return hasOptionalParameters()
+ ? 'too many arguments, expected at most $expected but found $actual'
+ : _wrongArgumentCountMsg(actual, expected);
+ }
+
+ String _tooFewArgumentsMsg(int actual, int expected) {
+ return hasOptionalParameters()
+ ? 'too few arguments, expected at least $expected but found $actual'
+ : _wrongArgumentCountMsg(actual, expected);
+ }
+
+ String _wrongArgumentCountMsg(int actual, int expected) {
+ return 'wrong number of arguments, expected $expected but found $actual';
}
Value _argError(CallingContext context, Node node, Value target,
@@ -936,7 +952,7 @@ class MethodMember extends Member {
for (int i = 0; i < bareCount; i++) {
var arg = args.values[i];
if (i >= parameters.length) {
- var msg = _argCountMsg(args.length, parameters.length);
+ var msg = _tooManyArgumentsMsg(args.length, parameters.length);
return _argError(context, node, target, args, msg, i);
}
argValues.add(arg.convertTo(context, parameters[i].type));
@@ -961,7 +977,7 @@ class MethodMember extends Member {
}
if (arg == null || !parameters[i].isOptional) {
- var msg = _argCountMsg(Math.min(i, args.length), i + 1, atLeast:true);
+ var msg = _tooFewArgumentsMsg(Math.min(i, args.length), i + 1);
return _argError(context, node, target, args, msg, i);
} else {
argValues.add(arg);
« no previous file with comments | « no previous file | tests/language/src/PrivateFactoryResolutionNegativeTest.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698