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

Side by Side Diff: sdk/lib/core/errors.dart

Issue 11369243: Make Exception a class, not an interface, and remove the const constructor. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated. Moved safeToString to Error. Created 8 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 class Error { 5 class Error {
6 const Error(); 6 const Error();
7
8 /**
9 * Safely convert a value to a [String] description.
10 *
11 * The conversion is guaranteed to not throw, so it won't use the object's
12 * toString method.
13 */
14 static String safeToString(Object object) {
15 if (object is int || object is double || object is bool || null == object) {
16 return object.toString();
17 }
18 if (object is String) {
19 // TODO(ahe): Remove backslash when http://dartbug.com/4995 is fixed.
20 const backslash = '\\';
21 String escaped = object
22 .replaceAll('$backslash', '$backslash$backslash')
23 .replaceAll('\n', '${backslash}n')
24 .replaceAll('\r', '${backslash}r')
25 .replaceAll('"', '$backslash"');
26 return '"$escaped"';
27 }
28 return _objectToString(object);
29 }
30
31 external static String _objectToString(Object object);
7 } 32 }
8 33
9 /** 34 /**
10 * Error thrown by the runtime system when an assert statement fails. 35 * Error thrown by the runtime system when an assert statement fails.
11 */ 36 */
12 class AssertionError implements Error { 37 class AssertionError implements Error {
13 } 38 }
14 39
15 /** 40 /**
16 * Error thrown by the runtime system when a type assertion fails. 41 * Error thrown by the runtime system when a type assertion fails.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 : this._existingArgumentNames = existingArgumentNames; 138 : this._existingArgumentNames = existingArgumentNames;
114 139
115 String toString() { 140 String toString() {
116 StringBuffer sb = new StringBuffer(); 141 StringBuffer sb = new StringBuffer();
117 int i = 0; 142 int i = 0;
118 if (_arguments != null) { 143 if (_arguments != null) {
119 for (; i < _arguments.length; i++) { 144 for (; i < _arguments.length; i++) {
120 if (i > 0) { 145 if (i > 0) {
121 sb.add(", "); 146 sb.add(", ");
122 } 147 }
123 sb.add(safeToString(_arguments[i])); 148 sb.add(Error.safeToString(_arguments[i]));
124 } 149 }
125 } 150 }
126 if (_namedArguments != null) { 151 if (_namedArguments != null) {
127 _namedArguments.forEach((String key, var value) { 152 _namedArguments.forEach((String key, var value) {
128 if (i > 0) { 153 if (i > 0) {
129 sb.add(", "); 154 sb.add(", ");
130 } 155 }
131 sb.add(key); 156 sb.add(key);
132 sb.add(": "); 157 sb.add(": ");
133 sb.add(safeToString(value)); 158 sb.add(Error.safeToString(value));
134 i++; 159 i++;
135 }); 160 });
136 } 161 }
137 if (_existingArgumentNames == null) { 162 if (_existingArgumentNames == null) {
138 return "NoSuchMethodError : method not found: '$_memberName'\n" 163 return "NoSuchMethodError : method not found: '$_memberName'\n"
139 "Receiver: ${safeToString(_receiver)}\n" 164 "Receiver: ${Error.safeToString(_receiver)}\n"
140 "Arguments: [$sb]"; 165 "Arguments: [$sb]";
141 } else { 166 } else {
142 String actualParameters = sb.toString(); 167 String actualParameters = sb.toString();
143 sb = new StringBuffer(); 168 sb = new StringBuffer();
144 for (int i = 0; i < _existingArgumentNames.length; i++) { 169 for (int i = 0; i < _existingArgumentNames.length; i++) {
145 if (i > 0) { 170 if (i > 0) {
146 sb.add(", "); 171 sb.add(", ");
147 } 172 }
148 sb.add(_existingArgumentNames[i]); 173 sb.add(_existingArgumentNames[i]);
149 } 174 }
150 String formalParameters = sb.toString(); 175 String formalParameters = sb.toString();
151 return "NoSuchMethodError: incorrect number of arguments passed to " 176 return "NoSuchMethodError: incorrect number of arguments passed to "
152 "method named '$_memberName'\n" 177 "method named '$_memberName'\n"
153 "Receiver: ${safeToString(_receiver)}\n" 178 "Receiver: ${Error.safeToString(_receiver)}\n"
154 "Tried calling: $_memberName($actualParameters)\n" 179 "Tried calling: $_memberName($actualParameters)\n"
155 "Found: $_memberName($formalParameters)"; 180 "Found: $_memberName($formalParameters)";
156 } 181 }
157 } 182 }
158
159 static String safeToString(Object object) {
160 if (object is int || object is double || object is bool || null == object) {
161 return object.toString();
162 }
163 if (object is String) {
164 // TODO(ahe): Remove backslash when http://dartbug.com/4995 is fixed.
165 const backslash = '\\';
166 String escaped = object
167 .replaceAll('$backslash', '$backslash$backslash')
168 .replaceAll('\n', '${backslash}n')
169 .replaceAll('\r', '${backslash}r')
170 .replaceAll('"', '$backslash"');
171 return '"$escaped"';
172 }
173 return _objectToString(object);
174 }
175
176 external static String _objectToString(Object object);
177 } 183 }
178 184
179 185
180 /** 186 /**
181 * The operation was not allowed by the object. 187 * The operation was not allowed by the object.
182 * 188 *
183 * This [Error] is thrown when a class cannot implement 189 * This [Error] is thrown when a class cannot implement
184 * one of the methods in its signature. 190 * one of the methods in its signature.
185 */ 191 */
186 class UnsupportedError implements Error { 192 class UnsupportedError implements Error {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 230
225 class OutOfMemoryError implements Error { 231 class OutOfMemoryError implements Error {
226 const OutOfMemoryError(); 232 const OutOfMemoryError();
227 String toString() => "Out of Memory"; 233 String toString() => "Out of Memory";
228 } 234 }
229 235
230 class StackOverflowError implements Error { 236 class StackOverflowError implements Error {
231 const StackOverflowError(); 237 const StackOverflowError();
232 String toString() => "Stack Overflow"; 238 String toString() => "Stack Overflow";
233 } 239 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/lib/core_patch.dart ('k') | sdk/lib/core/exceptions.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698