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

Unified Diff: frog/member.dart

Issue 8457007: Better runtime type checks. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: cleaner output Created 9 years, 1 month 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: frog/member.dart
diff --git a/frog/member.dart b/frog/member.dart
index 870994907dcc736eaa8752b17a5315d5ee680e4f..b843e3d5464629a649b74ce4c4ab1bf05de7c750 100644
--- a/frog/member.dart
+++ b/frog/member.dart
@@ -689,6 +689,30 @@ class MethodMember extends Member {
return true;
}
+ /** Returns true if any of the arguments will need conversion. */
+ // TODO(jmesserly): I don't like how this is coupled to invoke
+ bool needsArgumentConversion(Arguments args) {
+ int bareCount = args.bareCount;
+ for (int i = 0; i < bareCount; i++) {
+ var arg = args.values[i];
+ if (arg.needsConversion(parameters[i].type)) {
+ return false;
+ }
+ }
+
+ if (bareCount < parameters.length) {
+ genParameterValues();
+ for (int i = bareCount; i < parameters.length; i++) {
+ var arg = args.getValue(parameters[i].name);
+ if (arg != null && arg.needsConversion(parameters[i].type)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
static String _argCountMsg(int actual, int expected, [bool atLeast=false]) {
// TODO(jimhug): better messages with default named args.
return 'wrong number of arguments, expected ' +
@@ -1000,6 +1024,7 @@ class MethodMember extends Member {
var op = TokenKind.rawOperatorFromMethod(name);
code = '${target.code} $op ${argsCode[0]}';
}
+
return new Value(returnType, code);
} else {
var value;
@@ -1451,7 +1476,7 @@ class FactoryMap {
return getFactoriesFor(typeName)[name];
}
- void forEach(void f(MethodMember member)) {
+ void forEach(void f(Member member)) {
Jennifer Messerly 2011/11/05 00:45:11 This was a run time type error: we are passing a C
factories.forEach((_, Map constructors) {
constructors.forEach((_, Member member) {
f(member);

Powered by Google App Engine
This is Rietveld 408576698