Chromium Code Reviews| 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)"; |
| } |
| } |
| } |