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

Side by Side Diff: runtime/lib/errors_patch.dart

Issue 177633008: Better error message for assignment to final local variables (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 10 months 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
« no previous file with comments | « no previous file | runtime/lib/invocation_mirror.h » ('j') | runtime/vm/parser.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 patch class Error { 5 patch class Error {
6 /* patch */ static String _objectToString(Object object) { 6 /* patch */ static String _objectToString(Object object) {
7 return Object._toString(object); 7 return Object._toString(object);
8 } 8 }
9 9
10 /* patch */ StackTrace get stackTrace => _stackTrace; 10 /* patch */ StackTrace get stackTrace => _stackTrace;
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 205
206 206
207 String _developerMessage(args_mismatch) { 207 String _developerMessage(args_mismatch) {
208 if (_invocation_type < 0) { 208 if (_invocation_type < 0) {
209 return ""; 209 return "";
210 } 210 }
211 var type = _invocation_type & _InvocationMirror._TYPE_MASK; 211 var type = _invocation_type & _InvocationMirror._TYPE_MASK;
212 var level = (_invocation_type >> _InvocationMirror._CALL_SHIFT) & 212 var level = (_invocation_type >> _InvocationMirror._CALL_SHIFT) &
213 _InvocationMirror._CALL_MASK; 213 _InvocationMirror._CALL_MASK;
214 var type_str = 214 var type_str =
215 (const ["method", "getter", "setter", "getter or setter"])[type]; 215 (const ["method", "getter", "setter", "getter or setter", "variable"])[t ype];
216 var args_message = args_mismatch ? " with matching arguments" : ""; 216 var args_message = args_mismatch ? " with matching arguments" : "";
217 var msg; 217 var msg;
218 var memberName = 218 var memberName =
219 (_memberName == null) ? "" : internal.Symbol.getName(_memberName); 219 (_memberName == null) ? "" : internal.Symbol.getName(_memberName);
220
221 if (type == _InvocationMirror._LOCAL_VAR) {
222 return "cannot assign to final variable '$memberName'.\n\n";
Ivan Posva 2014/02/25 07:10:07 How about just assigning to msg here and let the r
hausner 2014/02/25 18:47:05 I'm not sure what massaging you mean. Adding the t
223 }
220 switch (level) { 224 switch (level) {
221 case _InvocationMirror._DYNAMIC: { 225 case _InvocationMirror._DYNAMIC: {
222 if (_receiver == null) { 226 if (_receiver == null) {
223 msg = "The null object does not have a $type_str '$memberName'" 227 msg = "The null object does not have a $type_str '$memberName'"
224 "$args_message."; 228 "$args_message.";
225 } else { 229 } else {
226 if (_receiver is Function) { 230 if (_receiver is Function) {
227 msg = "Closure call with mismatched arguments: " 231 msg = "Closure call with mismatched arguments: "
228 "function '$memberName'"; 232 "function '$memberName'";
229 } else { 233 } else {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 String receiver_str; 291 String receiver_str;
288 var level = (_invocation_type >> _InvocationMirror._CALL_SHIFT) & 292 var level = (_invocation_type >> _InvocationMirror._CALL_SHIFT) &
289 _InvocationMirror._CALL_MASK; 293 _InvocationMirror._CALL_MASK;
290 if ( level == _InvocationMirror._TOP_LEVEL) { 294 if ( level == _InvocationMirror._TOP_LEVEL) {
291 receiver_str = "top-level"; 295 receiver_str = "top-level";
292 } else { 296 } else {
293 receiver_str = Error.safeToString(_receiver); 297 receiver_str = Error.safeToString(_receiver);
294 } 298 }
295 var memberName = 299 var memberName =
296 (_memberName == null) ? "" : internal.Symbol.getName(_memberName); 300 (_memberName == null) ? "" : internal.Symbol.getName(_memberName);
297 if (!args_mismatch) { 301 var type = _invocation_type & _InvocationMirror._TYPE_MASK;
302 if (type == _InvocationMirror._LOCAL_VAR) {
298 msg_buf.write( 303 msg_buf.write(
299 "NoSuchMethodError : method not found: '$memberName'\n" 304 "NoSuchMethodError: cannot assign to final variable '$memberName'");
305 } else if (!args_mismatch) {
306 msg_buf.write(
307 "NoSuchMethodError: method not found: '$memberName'\n"
300 "Receiver: $receiver_str\n" 308 "Receiver: $receiver_str\n"
301 "Arguments: [$actual_buf]"); 309 "Arguments: [$actual_buf]");
302 } else { 310 } else {
303 String actualParameters = actual_buf.toString(); 311 String actualParameters = actual_buf.toString();
304 StringBuffer formal_buf = new StringBuffer(); 312 StringBuffer formal_buf = new StringBuffer();
305 for (int i = 0; i < _existingArgumentNames.length; i++) { 313 for (int i = 0; i < _existingArgumentNames.length; i++) {
306 if (i > 0) { 314 if (i > 0) {
307 formal_buf.write(", "); 315 formal_buf.write(", ");
308 } 316 }
309 formal_buf.write(_existingArgumentNames[i]); 317 formal_buf.write(_existingArgumentNames[i]);
310 } 318 }
311 String formalParameters = formal_buf.toString(); 319 String formalParameters = formal_buf.toString();
312 msg_buf.write( 320 msg_buf.write(
313 "NoSuchMethodError: incorrect number of arguments passed to " 321 "NoSuchMethodError: incorrect number of arguments passed to "
314 "method named '$memberName'\n" 322 "method named '$memberName'\n"
315 "Receiver: $receiver_str\n" 323 "Receiver: $receiver_str\n"
316 "Tried calling: $memberName($actualParameters)\n" 324 "Tried calling: $memberName($actualParameters)\n"
317 "Found: $memberName($formalParameters)"); 325 "Found: $memberName($formalParameters)");
318 } 326 }
319 return msg_buf.toString(); 327 return msg_buf.toString();
320 } 328 }
321 } 329 }
322 330
323 class _JavascriptIntegerOverflowError extends Error { 331 class _JavascriptIntegerOverflowError extends Error {
324 final Object _value; 332 final Object _value;
325 333
326 _JavascriptIntegerOverflowError(this._value); 334 _JavascriptIntegerOverflowError(this._value);
327 String toString() => "Javascript Integer Overflow: $_value"; 335 String toString() => "Javascript Integer Overflow: $_value";
328 } 336 }
OLDNEW
« no previous file with comments | « no previous file | runtime/lib/invocation_mirror.h » ('j') | runtime/vm/parser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698