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

Side by Side Diff: frog/member.dart

Issue 8457007: Better runtime type checks. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merged, and fix typo in member name 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** A formal parameter to a [Method]. */ 5 /** A formal parameter to a [Method]. */
6 class Parameter { 6 class Parameter {
7 FormalNode definition; 7 FormalNode definition;
8 8
9 String name; 9 String name;
10 Type type; 10 Type type;
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 if (p >= 0 && args.values[p].needsTemp) { 682 if (p >= 0 && args.values[p].needsTemp) {
683 if (lastParameter != null && lastParameter > p) { 683 if (lastParameter != null && lastParameter > p) {
684 return false; 684 return false;
685 } 685 }
686 lastParameter = p; 686 lastParameter = p;
687 } 687 }
688 } 688 }
689 return true; 689 return true;
690 } 690 }
691 691
692 /** Returns true if any of the arguments will need conversion. */
693 // TODO(jmesserly): I don't like how this is coupled to invoke
jimhug 2011/11/07 16:41:26 I agree that this is starting to feel nasty - alon
694 bool needsArgumentConversion(Arguments args) {
695 int bareCount = args.bareCount;
696 for (int i = 0; i < bareCount; i++) {
697 var arg = args.values[i];
698 if (arg.needsConversion(parameters[i].type)) {
699 return false;
700 }
701 }
702
703 if (bareCount < parameters.length) {
704 genParameterValues();
705 for (int i = bareCount; i < parameters.length; i++) {
706 var arg = args.getValue(parameters[i].name);
707 if (arg != null && arg.needsConversion(parameters[i].type)) {
708 return false;
709 }
710 }
711 }
712
713 return true;
714 }
715
692 static String _argCountMsg(int actual, int expected, [bool atLeast=false]) { 716 static String _argCountMsg(int actual, int expected, [bool atLeast=false]) {
693 // TODO(jimhug): better messages with default named args. 717 // TODO(jimhug): better messages with default named args.
694 return 'wrong number of arguments, expected ' + 718 return 'wrong number of arguments, expected ' +
695 '${atLeast ? "at least " : ""}$expected but found $actual'; 719 '${atLeast ? "at least " : ""}$expected but found $actual';
696 } 720 }
697 721
698 Value _argError(MethodGenerator context, Node node, Value target, 722 Value _argError(MethodGenerator context, Node node, Value target,
699 Arguments args, String msg) { 723 Arguments args, String msg) {
700 if (isStatic || isConstructor) { 724 if (isStatic || isConstructor) {
701 world.error(msg, node.span); 725 world.error(msg, node.span);
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 } else if (name == '\$bit_not') { 1017 } else if (name == '\$bit_not') {
994 code = '~${target.code}'; 1018 code = '~${target.code}';
995 } else if (name == '\$truncdiv') { 1019 } else if (name == '\$truncdiv') {
996 code = '$name(${target.code}, ${argsCode[0]})'; 1020 code = '$name(${target.code}, ${argsCode[0]})';
997 } else if (name == '\$mod') { 1021 } else if (name == '\$mod') {
998 code = '$name(${target.code}, ${argsCode[0]})'; 1022 code = '$name(${target.code}, ${argsCode[0]})';
999 } else { 1023 } else {
1000 var op = TokenKind.rawOperatorFromMethod(name); 1024 var op = TokenKind.rawOperatorFromMethod(name);
1001 code = '${target.code} $op ${argsCode[0]}'; 1025 code = '${target.code} $op ${argsCode[0]}';
1002 } 1026 }
1027
1003 return new Value(returnType, code); 1028 return new Value(returnType, code);
1004 } else { 1029 } else {
1005 var value; 1030 var value;
1006 num val0, val1, ival0, ival1; 1031 num val0, val1, ival0, ival1;
1007 val0 = target.dynamic.actualValue; 1032 val0 = target.dynamic.actualValue;
1008 ival0 = val0.toInt(); 1033 ival0 = val0.toInt();
1009 if (args.values.length > 0) { 1034 if (args.values.length > 0) {
1010 val1 = args.values[0].dynamic.actualValue; 1035 val1 = args.values[0].dynamic.actualValue;
1011 ival1 = val1.toInt(); 1036 ival1 = val1.toInt();
1012 } 1037 }
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
1444 } 1469 }
1445 1470
1446 void addFactory(String typeName, String name, Member member) { 1471 void addFactory(String typeName, String name, Member member) {
1447 getFactoriesFor(typeName)[name] = member; 1472 getFactoriesFor(typeName)[name] = member;
1448 } 1473 }
1449 1474
1450 Member getFactory(String typeName, String name) { 1475 Member getFactory(String typeName, String name) {
1451 return getFactoriesFor(typeName)[name]; 1476 return getFactoriesFor(typeName)[name];
1452 } 1477 }
1453 1478
1454 void forEach(void f(MethodMember member)) { 1479 void forEach(void f(Member member)) {
1455 factories.forEach((_, Map constructors) { 1480 factories.forEach((_, Map constructors) {
1456 constructors.forEach((_, Member member) { 1481 constructors.forEach((_, Member member) {
1457 f(member); 1482 f(member);
1458 }); 1483 });
1459 }); 1484 });
1460 } 1485 }
1461 } 1486 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698