Index: sdk/lib/_internal/compiler/js_lib/core_patch.dart |
diff --git a/sdk/lib/_internal/compiler/js_lib/core_patch.dart b/sdk/lib/_internal/compiler/js_lib/core_patch.dart |
index 5dd1c230bb2a5c44c00cbece3071cd498e918be2..ce675bfed672000d0c8aa93237976b628664b9c8 100644 |
--- a/sdk/lib/_internal/compiler/js_lib/core_patch.dart |
+++ b/sdk/lib/_internal/compiler/js_lib/core_patch.dart |
@@ -15,7 +15,8 @@ import 'dart:_js_helper' show patch, |
Primitives, |
ConstantMap, |
stringJoinUnchecked, |
- objectHashCode; |
+ objectHashCode, |
+ Closure; |
import 'dart:_native_typed_data' show NativeUint8List; |
@@ -151,6 +152,8 @@ class double { |
class Error { |
@patch |
static String _objectToString(Object object) { |
+ // Closures all have useful and safe toString methods. |
+ if (object is Closure) return object.toString(); |
return Primitives.objectToString(object); |
} |
@@ -458,45 +461,37 @@ class NoSuchMethodError { |
@patch |
String toString() { |
StringBuffer sb = new StringBuffer(); |
- int i = 0; |
+ String comma = ''; |
if (_arguments != null) { |
- for (; i < _arguments.length; i++) { |
- if (i > 0) { |
- sb.write(", "); |
- } |
- sb.write(Error.safeToString(_arguments[i])); |
+ for (var argument in _arguments) { |
floitsch
2015/05/12 23:14:16
maybe?:
sb.writeAll(_arguments.map(Error.safeToStr
sra1
2015/05/12 23:25:50
if (_arguments != null && _arguments.isNotEmpty) .
|
+ sb.write(comma); |
+ sb.write(Error.safeToString(argument)); |
+ comma = ', '; |
} |
} |
if (_namedArguments != null) { |
_namedArguments.forEach((Symbol key, var value) { |
- if (i > 0) { |
- sb.write(", "); |
- } |
+ sb.write(comma); |
sb.write(_symbolToString(key)); |
sb.write(": "); |
sb.write(Error.safeToString(value)); |
- i++; |
+ comma = ', '; |
}); |
} |
+ String memberName = _symbolToString(_memberName); |
+ String receiverText = Error.safeToString(_receiver); |
+ String actualParameters = '$sb'; |
if (_existingArgumentNames == null) { |
- return "NoSuchMethodError : method not found: '$_memberName'\n" |
- "Receiver: ${Error.safeToString(_receiver)}\n" |
- "Arguments: [$sb]"; |
+ return "NoSuchMethodError: method not found: '$memberName'\n" |
+ "Receiver: ${receiverText}\n" |
+ "Arguments: [$actualParameters]"; |
} else { |
- String actualParameters = sb.toString(); |
- sb = new StringBuffer(); |
- for (int i = 0; i < _existingArgumentNames.length; i++) { |
- if (i > 0) { |
- sb.write(", "); |
- } |
- sb.write(_existingArgumentNames[i]); |
- } |
- String formalParameters = sb.toString(); |
+ String formalParameters = _existingArgumentNames.join(', '); |
return "NoSuchMethodError: incorrect number of arguments passed to " |
- "method named '$_memberName'\n" |
- "Receiver: ${Error.safeToString(_receiver)}\n" |
- "Tried calling: $_memberName($actualParameters)\n" |
- "Found: $_memberName($formalParameters)"; |
+ "method named '$memberName'\n" |
+ "Receiver: ${receiverText}\n" |
+ "Tried calling: $memberName($actualParameters)\n" |
+ "Found: $memberName($formalParameters)"; |
} |
} |
} |