OLD | NEW |
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 | 5 @patch class Error { |
6 class Error { | 6 @patch static String _objectToString(Object object) { |
7 @patch | |
8 static String _objectToString(Object object) { | |
9 return Object._toString(object); | 7 return Object._toString(object); |
10 } | 8 } |
11 | 9 |
12 @patch | 10 @patch static String _stringToSafeString(String string) { |
13 static String _stringToSafeString(String string) { | |
14 return JSON.encode(string); | 11 return JSON.encode(string); |
15 } | 12 } |
16 | 13 |
17 @patch | 14 @patch StackTrace get stackTrace => _stackTrace; |
18 StackTrace get stackTrace => _stackTrace; | |
19 | 15 |
20 StackTrace _stackTrace; | 16 StackTrace _stackTrace; |
21 } | 17 } |
22 | 18 |
23 class _AssertionError extends Error implements AssertionError { | 19 class _AssertionError extends Error implements AssertionError { |
24 _AssertionError._create( | 20 _AssertionError._create( |
25 this._failedAssertion, this._url, this._line, this._column, this.message); | 21 this._failedAssertion, this._url, this._line, this._column, |
| 22 this.message); |
| 23 |
26 | 24 |
27 // AssertionError_throwNew in errors.cc fishes the assertion source code | 25 // AssertionError_throwNew in errors.cc fishes the assertion source code |
28 // out of the script. It expects a Dart stack frame from class | 26 // out of the script. It expects a Dart stack frame from class |
29 // _AssertionError. Thus we need a Dart stub that calls the native code. | 27 // _AssertionError. Thus we need a Dart stub that calls the native code. |
30 static _throwNew(int assertionStart, int assertionEnd, Object message) { | 28 static _throwNew(int assertionStart, int assertionEnd, Object message) { |
31 _doThrowNew(assertionStart, assertionEnd, message); | 29 _doThrowNew(assertionStart, assertionEnd, message); |
32 } | 30 } |
33 | 31 |
34 static _doThrowNew(int assertionStart, int assertionEnd, Object message) | 32 static _doThrowNew(int assertionStart, int assertionEnd, Object message) |
35 native "AssertionError_throwNew"; | 33 native "AssertionError_throwNew"; |
36 | 34 |
37 static _evaluateAssertion(condition) { | 35 static _evaluateAssertion(condition) { |
38 if (identical(condition, true) || identical(condition, false)) { | 36 if (identical(condition, true) || identical(condition, false)) { |
39 return condition; | 37 return condition; |
40 } | 38 } |
41 if (condition is _Closure) { | 39 if (condition is _Closure) { |
42 return condition(); | 40 return condition(); |
43 } | 41 } |
44 if (condition is Function) { | 42 if (condition is Function) { |
45 condition = condition(); | 43 condition = condition(); |
(...skipping 13 matching lines...) Expand all Loading... |
59 return "'$_failedAssertion': $_messageString"; | 57 return "'$_failedAssertion': $_messageString"; |
60 } | 58 } |
61 var columnInfo = ""; | 59 var columnInfo = ""; |
62 if (_column > 0) { | 60 if (_column > 0) { |
63 // Only add column information if it is valid. | 61 // Only add column information if it is valid. |
64 columnInfo = " pos $_column"; | 62 columnInfo = " pos $_column"; |
65 } | 63 } |
66 return "'$_url': Failed assertion: line $_line$columnInfo: " | 64 return "'$_url': Failed assertion: line $_line$columnInfo: " |
67 "'$_failedAssertion': $_messageString"; | 65 "'$_failedAssertion': $_messageString"; |
68 } | 66 } |
69 | |
70 final String _failedAssertion; | 67 final String _failedAssertion; |
71 final String _url; | 68 final String _url; |
72 final int _line; | 69 final int _line; |
73 final int _column; | 70 final int _column; |
74 final Object message; | 71 final Object message; |
75 } | 72 } |
76 | 73 |
77 class _TypeError extends _AssertionError implements TypeError { | 74 class _TypeError extends _AssertionError implements TypeError { |
78 _TypeError._create(String url, int line, int column, String errorMsg) | 75 _TypeError._create(String url, int line, int column, String errorMsg) |
79 : super._create("is assignable", url, line, column, errorMsg); | 76 : super._create("is assignable", url, line, column, errorMsg); |
80 | 77 |
81 static _throwNew(int location, Object src_value, _Type dst_type, | 78 static _throwNew(int location, |
82 String dst_name, String bound_error_msg) native "TypeError_throwNew"; | 79 Object src_value, |
| 80 _Type dst_type, |
| 81 String dst_name, |
| 82 String bound_error_msg) |
| 83 native "TypeError_throwNew"; |
83 | 84 |
84 static _throwNewIfNotLoaded( | 85 static _throwNewIfNotLoaded(_LibraryPrefix prefix, |
85 _LibraryPrefix prefix, | 86 int location, |
86 int location, | 87 Object src_value, |
87 Object src_value, | 88 _Type dst_type, |
88 _Type dst_type, | 89 String dst_name, |
89 String dst_name, | 90 String bound_error_msg) { |
90 String bound_error_msg) { | |
91 if (!prefix.isLoaded()) { | 91 if (!prefix.isLoaded()) { |
92 _throwNew(location, src_value, dst_type, dst_name, bound_error_msg); | 92 _throwNew(location, src_value, dst_type, dst_name, bound_error_msg); |
93 } | 93 } |
94 } | 94 } |
95 | 95 |
96 String toString() => super.message; | 96 String toString() => super.message; |
97 } | 97 } |
98 | 98 |
99 class _CastError extends Error implements CastError { | 99 class _CastError extends Error implements CastError { |
100 _CastError._create(this._url, this._line, this._column, this._errorMsg); | 100 _CastError._create(this._url, this._line, this._column, this._errorMsg); |
101 | 101 |
102 // A CastError is allocated by TypeError._throwNew() when dst_name equals | 102 // A CastError is allocated by TypeError._throwNew() when dst_name equals |
103 // Symbols::InTypeCast(). | 103 // Symbols::InTypeCast(). |
104 | 104 |
105 String toString() => _errorMsg; | 105 String toString() => _errorMsg; |
106 | 106 |
107 // Fields _url, _line, and _column are only used for debugging purposes. | 107 // Fields _url, _line, and _column are only used for debugging purposes. |
108 final String _url; | 108 final String _url; |
109 final int _line; | 109 final int _line; |
110 final int _column; | 110 final int _column; |
111 final String _errorMsg; | 111 final String _errorMsg; |
112 } | 112 } |
113 | 113 |
114 @patch | 114 @patch class FallThroughError { |
115 class FallThroughError { | |
116 FallThroughError._create(this._url, this._line); | 115 FallThroughError._create(this._url, this._line); |
117 | 116 |
118 static _throwNew(int case_clause_pos) native "FallThroughError_throwNew"; | 117 static _throwNew(int case_clause_pos) native "FallThroughError_throwNew"; |
119 | 118 |
120 @patch | 119 @patch |
121 String toString() { | 120 String toString() { |
122 return "'$_url': Switch case fall-through at line $_line."; | 121 return "'$_url': Switch case fall-through at line $_line."; |
123 } | 122 } |
124 | 123 |
125 // These new fields cannot be declared final, because a constructor exists | 124 // These new fields cannot be declared final, because a constructor exists |
126 // in the original version of this patched class. | 125 // in the original version of this patched class. |
127 String _url; | 126 String _url; |
128 int _line; | 127 int _line; |
129 } | 128 } |
130 | 129 |
131 class _InternalError { | 130 class _InternalError { |
132 const _InternalError(this._msg); | 131 const _InternalError(this._msg); |
133 String toString() => "InternalError: '${_msg}'"; | 132 String toString() => "InternalError: '${_msg}'"; |
134 final String _msg; | 133 final String _msg; |
135 } | 134 } |
136 | 135 |
137 @patch | 136 @patch class UnsupportedError { |
138 class UnsupportedError { | |
139 static _throwNew(String msg) { | 137 static _throwNew(String msg) { |
140 throw new UnsupportedError(msg); | 138 throw new UnsupportedError(msg); |
141 } | 139 } |
142 } | 140 } |
143 | 141 |
144 @patch | 142 @patch class CyclicInitializationError { |
145 class CyclicInitializationError { | |
146 static _throwNew(String variableName) { | 143 static _throwNew(String variableName) { |
147 throw new CyclicInitializationError(variableName); | 144 throw new CyclicInitializationError(variableName); |
148 } | 145 } |
149 } | 146 } |
150 | 147 |
151 @patch | 148 @patch class AbstractClassInstantiationError { |
152 class AbstractClassInstantiationError { | |
153 AbstractClassInstantiationError._create( | 149 AbstractClassInstantiationError._create( |
154 this._className, this._url, this._line); | 150 this._className, this._url, this._line); |
155 | 151 |
156 static _throwNew(int case_clause_pos, String className) | 152 static _throwNew(int case_clause_pos, String className) |
157 native "AbstractClassInstantiationError_throwNew"; | 153 native "AbstractClassInstantiationError_throwNew"; |
158 | 154 |
159 @patch | 155 @patch String toString() { |
160 String toString() { | |
161 return "Cannot instantiate abstract class $_className: " | 156 return "Cannot instantiate abstract class $_className: " |
162 "_url '$_url' line $_line"; | 157 "_url '$_url' line $_line"; |
163 } | 158 } |
164 | 159 |
165 // These new fields cannot be declared final, because a constructor exists | 160 // These new fields cannot be declared final, because a constructor exists |
166 // in the original version of this patched class. | 161 // in the original version of this patched class. |
167 String _url; | 162 String _url; |
168 int _line; | 163 int _line; |
169 } | 164 } |
170 | 165 |
171 @patch | 166 @patch class NoSuchMethodError { |
172 class NoSuchMethodError { | |
173 // The compiler emits a call to _throwNew when it cannot resolve a static | 167 // The compiler emits a call to _throwNew when it cannot resolve a static |
174 // method at compile time. The receiver is actually the literal class of the | 168 // method at compile time. The receiver is actually the literal class of the |
175 // unresolved method. | 169 // unresolved method. |
176 static void _throwNew(Object receiver, String memberName, int invocation_type, | 170 static void _throwNew(Object receiver, |
177 List arguments, List argumentNames, List existingArgumentNames) { | 171 String memberName, |
| 172 int invocation_type, |
| 173 List arguments, |
| 174 List argumentNames, |
| 175 List existingArgumentNames) { |
178 int numNamedArguments = argumentNames == null ? 0 : argumentNames.length; | 176 int numNamedArguments = argumentNames == null ? 0 : argumentNames.length; |
179 int numPositionalArguments = arguments == null ? 0 : arguments.length; | 177 int numPositionalArguments = arguments == null ? 0 : arguments.length; |
180 numPositionalArguments -= numNamedArguments; | 178 numPositionalArguments -= numNamedArguments; |
181 List positionalArguments; | 179 List positionalArguments; |
182 if (numPositionalArguments > 0) { | 180 if (numPositionalArguments > 0) { |
183 // TODO(srdjan): Unresolvable static methods sometimes do not provide the | 181 // TODO(srdjan): Unresolvable static methods sometimes do not provide the |
184 // arguments, because the arguments are evaluated but not passed to the | 182 // arguments, because the arguments are evaluated but not passed to the |
185 // throwing stub (see EffectGraphVisitor::BuildThrowNoSuchMethodError and | 183 // throwing stub (see EffectGraphVisitor::BuildThrowNoSuchMethodError and |
186 // Parser::ThrowNoSuchMethodError)). There is no way to distinguish the | 184 // Parser::ThrowNoSuchMethodError)). There is no way to distinguish the |
187 // case of no arguments from the case of the arguments not being passed | 185 // case of no arguments from the case of the arguments not being passed |
188 // in here, though. See https://github.com/dart-lang/sdk/issues/27572 | 186 // in here, though. See https://github.com/dart-lang/sdk/issues/27572 |
189 positionalArguments = arguments.sublist(0, numPositionalArguments); | 187 positionalArguments = arguments.sublist(0, numPositionalArguments); |
190 } | 188 } |
191 Map<Symbol, dynamic> namedArguments = new Map<Symbol, dynamic>(); | 189 Map<Symbol, dynamic> namedArguments = new Map<Symbol, dynamic>(); |
192 for (int i = 0; i < numNamedArguments; i++) { | 190 for (int i = 0; i < numNamedArguments; i++) { |
193 var arg_value = arguments[numPositionalArguments + i]; | 191 var arg_value = arguments[numPositionalArguments + i]; |
194 namedArguments[new Symbol(argumentNames[i])] = arg_value; | 192 namedArguments[new Symbol(argumentNames[i])] = arg_value; |
195 } | 193 } |
196 throw new NoSuchMethodError._withType( | 194 throw new NoSuchMethodError._withType(receiver, |
197 receiver, | 195 new Symbol(memberName), |
198 new Symbol(memberName), | 196 invocation_type, |
199 invocation_type, | 197 positionalArguments, |
200 positionalArguments, | 198 namedArguments, |
201 namedArguments, | 199 existingArgumentNames); |
202 existingArgumentNames); | |
203 } | 200 } |
204 | 201 |
205 static void _throwNewIfNotLoaded( | 202 static void _throwNewIfNotLoaded(_LibraryPrefix prefix, |
206 _LibraryPrefix prefix, | 203 Object receiver, |
207 Object receiver, | 204 String memberName, |
208 String memberName, | 205 int invocation_type, |
209 int invocation_type, | 206 List arguments, |
210 List arguments, | 207 List argumentNames, |
211 List argumentNames, | 208 List existingArgumentNames) { |
212 List existingArgumentNames) { | |
213 if (!prefix.isLoaded()) { | 209 if (!prefix.isLoaded()) { |
214 _throwNew(receiver, memberName, invocation_type, arguments, argumentNames, | 210 _throwNew(receiver, memberName, invocation_type, arguments, |
215 existingArgumentNames); | 211 argumentNames, existingArgumentNames); |
216 } | 212 } |
217 } | 213 } |
218 | 214 |
219 // Remember the type from the invocation mirror or static compilation | 215 // Remember the type from the invocation mirror or static compilation |
220 // analysis when thrown directly with _throwNew. A negative value means | 216 // analysis when thrown directly with _throwNew. A negative value means |
221 // that no information is available. | 217 // that no information is available. |
222 final int _invocation_type; | 218 final int _invocation_type; |
223 | 219 |
224 @patch | 220 @patch |
225 NoSuchMethodError(Object receiver, Symbol memberName, | 221 NoSuchMethodError(Object receiver, |
226 List positionalArguments, Map<Symbol, dynamic> namedArguments, | 222 Symbol memberName, |
227 [List existingArgumentNames = null]) | 223 List positionalArguments, |
| 224 Map<Symbol, dynamic> namedArguments, |
| 225 [List existingArgumentNames = null]) |
228 : _receiver = receiver, | 226 : _receiver = receiver, |
229 _memberName = memberName, | 227 _memberName = memberName, |
230 _arguments = positionalArguments, | 228 _arguments = positionalArguments, |
231 _namedArguments = namedArguments, | 229 _namedArguments = namedArguments, |
232 _existingArgumentNames = existingArgumentNames, | 230 _existingArgumentNames = existingArgumentNames, |
233 _invocation_type = -1; | 231 _invocation_type = -1; |
234 | 232 |
235 // This constructor seems to be called with either strings or | 233 // This constructor seems to be called with either strings or |
236 // values read from another NoSuchMethodError. | 234 // values read from another NoSuchMethodError. |
237 NoSuchMethodError._withType( | 235 NoSuchMethodError._withType(this._receiver, |
238 this._receiver, | 236 /*String|Symbol*/ memberName, |
239 /*String|Symbol*/ memberName, | 237 this._invocation_type, |
240 this._invocation_type, | 238 this._arguments, |
241 this._arguments, | 239 Map<dynamic, dynamic> namedArguments, |
242 Map<dynamic, dynamic> namedArguments, | 240 [List existingArgumentNames = null]) |
243 [List existingArgumentNames = null]) | |
244 : this._memberName = | 241 : this._memberName = |
245 (memberName is String) ? new Symbol(memberName) : memberName, | 242 (memberName is String) ? new Symbol(memberName) : memberName, |
246 this._namedArguments = (namedArguments == null) | 243 this._namedArguments = |
247 ? null | 244 (namedArguments == null) |
248 : new Map<Symbol, dynamic>.fromIterable(namedArguments.keys, | 245 ? null |
249 key: (k) => (k is String) ? new Symbol(k) : k, | 246 : new Map<Symbol, dynamic>.fromIterable( |
250 value: (k) => namedArguments[k]), | 247 namedArguments.keys, |
| 248 key: (k) => (k is String) ? new Symbol(k) : k, |
| 249 value: (k) => namedArguments[k]), |
251 this._existingArgumentNames = existingArgumentNames; | 250 this._existingArgumentNames = existingArgumentNames; |
252 | 251 |
253 @patch | 252 @patch String toString() { |
254 String toString() { | |
255 var level = (_invocation_type >> _InvocationMirror._CALL_SHIFT) & | 253 var level = (_invocation_type >> _InvocationMirror._CALL_SHIFT) & |
256 _InvocationMirror._CALL_MASK; | 254 _InvocationMirror._CALL_MASK; |
257 var type = _invocation_type & _InvocationMirror._TYPE_MASK; | 255 var type = _invocation_type & _InvocationMirror._TYPE_MASK; |
258 String memberName = (_memberName == null) | 256 String memberName = (_memberName == null) ? "" : |
259 ? "" | 257 internal.Symbol.getUnmangledName(_memberName); |
260 : internal.Symbol.getUnmangledName(_memberName); | |
261 | 258 |
262 if (type == _InvocationMirror._LOCAL_VAR) { | 259 if (type == _InvocationMirror._LOCAL_VAR) { |
263 return "NoSuchMethodError: Cannot assign to final variable '$memberName'"; | 260 return "NoSuchMethodError: Cannot assign to final variable '$memberName'"; |
264 } | 261 } |
265 | 262 |
266 StringBuffer arguments = new StringBuffer(); | 263 StringBuffer arguments = new StringBuffer(); |
267 int argumentCount = 0; | 264 int argumentCount = 0; |
268 if (_arguments != null) { | 265 if (_arguments != null) { |
269 for (; argumentCount < _arguments.length; argumentCount++) { | 266 for (; argumentCount < _arguments.length; argumentCount++) { |
270 if (argumentCount > 0) { | 267 if (argumentCount > 0) { |
(...skipping 11 matching lines...) Expand all Loading... |
282 arguments.write(": "); | 279 arguments.write(": "); |
283 arguments.write(Error.safeToString(value)); | 280 arguments.write(Error.safeToString(value)); |
284 argumentCount++; | 281 argumentCount++; |
285 }); | 282 }); |
286 } | 283 } |
287 bool args_mismatch = _existingArgumentNames != null; | 284 bool args_mismatch = _existingArgumentNames != null; |
288 String args_message = args_mismatch ? " with matching arguments" : ""; | 285 String args_message = args_mismatch ? " with matching arguments" : ""; |
289 | 286 |
290 String type_str; | 287 String type_str; |
291 if (type >= 0 && type < 5) { | 288 if (type >= 0 && type < 5) { |
292 type_str = (const [ | 289 type_str = (const ["method", "getter", "setter", "getter or setter", |
293 "method", | 290 "variable"])[type]; |
294 "getter", | |
295 "setter", | |
296 "getter or setter", | |
297 "variable" | |
298 ])[type]; | |
299 } | 291 } |
300 | 292 |
301 StringBuffer msg_buf = new StringBuffer("NoSuchMethodError: "); | 293 StringBuffer msg_buf = new StringBuffer("NoSuchMethodError: "); |
302 bool is_type_call = false; | 294 bool is_type_call = false; |
303 switch (level) { | 295 switch (level) { |
304 case _InvocationMirror._DYNAMIC: | 296 case _InvocationMirror._DYNAMIC: { |
305 { | 297 if (_receiver == null) { |
306 if (_receiver == null) { | 298 if (args_mismatch) { |
307 if (args_mismatch) { | 299 msg_buf.writeln("The null object does not have a $type_str " |
308 msg_buf.writeln("The null object does not have a $type_str " | 300 "'$memberName'$args_message."); |
309 "'$memberName'$args_message."); | |
310 } else { | |
311 msg_buf | |
312 .writeln("The $type_str '$memberName' was called on null."); | |
313 } | |
314 } else { | 301 } else { |
315 if (_receiver is Function) { | 302 msg_buf.writeln("The $type_str '$memberName' was called on null."); |
316 msg_buf.writeln("Closure call with mismatched arguments: " | |
317 "function '$memberName'"); | |
318 } else if (_receiver is _Type && memberName == "call") { | |
319 is_type_call = true; | |
320 String name = _receiver.toString(); | |
321 msg_buf.writeln("Attempted to use type '$name' as a function. " | |
322 "Since types do not define a method 'call', this is not " | |
323 "possible. Did you intend to call the $name constructor and " | |
324 "forget the 'new' operator?"); | |
325 } else { | |
326 msg_buf | |
327 .writeln("Class '${_receiver.runtimeType}' has no instance " | |
328 "$type_str '$memberName'$args_message."); | |
329 } | |
330 } | 303 } |
331 break; | 304 } else { |
| 305 if (_receiver is Function) { |
| 306 msg_buf.writeln("Closure call with mismatched arguments: " |
| 307 "function '$memberName'"); |
| 308 } else if (_receiver is _Type && memberName == "call") { |
| 309 is_type_call = true; |
| 310 String name = _receiver.toString(); |
| 311 msg_buf.writeln("Attempted to use type '$name' as a function. " |
| 312 "Since types do not define a method 'call', this is not " |
| 313 "possible. Did you intend to call the $name constructor and " |
| 314 "forget the 'new' operator?"); |
| 315 } else { |
| 316 msg_buf.writeln("Class '${_receiver.runtimeType}' has no instance " |
| 317 "$type_str '$memberName'$args_message."); |
| 318 } |
332 } | 319 } |
333 case _InvocationMirror._SUPER: | 320 break; |
334 { | 321 } |
335 msg_buf.writeln("Super class of class '${_receiver.runtimeType}' has " | 322 case _InvocationMirror._SUPER: { |
| 323 msg_buf.writeln("Super class of class '${_receiver.runtimeType}' has " |
336 "no instance $type_str '$memberName'$args_message."); | 324 "no instance $type_str '$memberName'$args_message."); |
337 memberName = "super.$memberName"; | 325 memberName = "super.$memberName"; |
338 break; | 326 break; |
339 } | 327 } |
340 case _InvocationMirror._STATIC: | 328 case _InvocationMirror._STATIC: { |
341 { | 329 msg_buf.writeln("No static $type_str '$memberName'$args_message " |
342 msg_buf.writeln("No static $type_str '$memberName'$args_message " | 330 "declared in class '$_receiver'."); |
343 "declared in class '$_receiver'."); | 331 break; |
344 break; | 332 } |
345 } | 333 case _InvocationMirror._CONSTRUCTOR: { |
346 case _InvocationMirror._CONSTRUCTOR: | 334 msg_buf.writeln("No constructor '$memberName'$args_message declared " |
347 { | 335 "in class '$_receiver'."); |
348 msg_buf.writeln("No constructor '$memberName'$args_message declared " | 336 memberName = "new $memberName"; |
349 "in class '$_receiver'."); | 337 break; |
350 memberName = "new $memberName"; | 338 } |
351 break; | 339 case _InvocationMirror._TOP_LEVEL: { |
352 } | 340 msg_buf.writeln("No top-level $type_str '$memberName'$args_message " |
353 case _InvocationMirror._TOP_LEVEL: | 341 "declared."); |
354 { | 342 break; |
355 msg_buf.writeln("No top-level $type_str '$memberName'$args_message " | 343 } |
356 "declared."); | |
357 break; | |
358 } | |
359 } | 344 } |
360 | 345 |
361 if (level == _InvocationMirror._TOP_LEVEL) { | 346 if (level == _InvocationMirror._TOP_LEVEL) { |
362 msg_buf.writeln("Receiver: top-level"); | 347 msg_buf.writeln("Receiver: top-level"); |
363 } else { | 348 } else { |
364 msg_buf.writeln("Receiver: ${Error.safeToString(_receiver)}"); | 349 msg_buf.writeln("Receiver: ${Error.safeToString(_receiver)}"); |
365 } | 350 } |
366 | 351 |
367 if (type == _InvocationMirror._METHOD) { | 352 if (type == _InvocationMirror._METHOD) { |
368 String m = is_type_call ? "$_receiver" : "$memberName"; | 353 String m = is_type_call ? "$_receiver" : "$memberName"; |
(...skipping 14 matching lines...) Expand all Loading... |
383 } | 368 } |
384 formalParameters.write(_existingArgumentNames[i]); | 369 formalParameters.write(_existingArgumentNames[i]); |
385 } | 370 } |
386 msg_buf.write("\nFound: $memberName($formalParameters)"); | 371 msg_buf.write("\nFound: $memberName($formalParameters)"); |
387 } | 372 } |
388 | 373 |
389 return msg_buf.toString(); | 374 return msg_buf.toString(); |
390 } | 375 } |
391 } | 376 } |
392 | 377 |
| 378 |
393 class _CompileTimeError extends Error { | 379 class _CompileTimeError extends Error { |
394 final String _errorMsg; | 380 final String _errorMsg; |
395 _CompileTimeError(this._errorMsg); | 381 _CompileTimeError(this._errorMsg); |
396 String toString() => _errorMsg; | 382 String toString() => _errorMsg; |
397 } | 383 } |
OLD | NEW |