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

Side by Side Diff: pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart

Issue 1030103004: Implement ResolvedVisitor using SemanticSendVisitor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Cleanups. Created 5 years, 9 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 part of dart2js.semantics_visitor; 5 part of dart2js.semantics_visitor;
6 6
7 /// Mixin that implements all `errorX` methods of [SemanticSendVisitor] by 7 /// Mixin that implements all `errorX` methods of [SemanticSendVisitor] by
8 /// delegating to a bulk handler. 8 /// delegating to a bulk handler.
9 /// 9 ///
10 /// Use this mixin to provide a trivial implementation for all `errorX` methods. 10 /// Use this mixin to provide a trivial implementation for all `errorX` methods.
11 abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 11 abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
12 R bulkHandleNode(Node node, String message); 12 R bulkHandleNode(Node node, String message, A arg);
13 13
14 R bulkHandleError(Send node) { 14 R bulkHandleError(Send node, A arg) {
15 return bulkHandleNode(node, "Error expression `$node` unhandled."); 15 return bulkHandleNode(node, "Error expression `$node` unhandled.", arg);
16 } 16 }
17 17
18 @override 18 @override
19 R errorInvalidAssert( 19 R errorInvalidAssert(
20 Send node, 20 Send node,
21 NodeList arguments, 21 NodeList arguments,
22 A arg) { 22 A arg) {
23 return bulkHandleError(node); 23 return bulkHandleError(node, arg);
24 } 24 }
25 25
26 @override 26 @override
27 R errorClassTypeLiteralCompound( 27 R errorClassTypeLiteralCompound(
28 Send node, 28 Send node,
29 TypeConstantExpression constant, 29 TypeConstantExpression constant,
30 AssignmentOperator operator, 30 AssignmentOperator operator,
31 Node rhs, 31 Node rhs,
32 A arg) { 32 A arg) {
33 return bulkHandleError(node); 33 return bulkHandleError(node, arg);
34 } 34 }
35 35
36 @override 36 @override
37 R errorClassTypeLiteralPostfix( 37 R errorClassTypeLiteralPostfix(
38 Send node, 38 Send node,
39 TypeConstantExpression constant, 39 TypeConstantExpression constant,
40 IncDecOperator operator, 40 IncDecOperator operator,
41 A arg) { 41 A arg) {
42 return bulkHandleError(node); 42 return bulkHandleError(node, arg);
43 } 43 }
44 44
45 @override 45 @override
46 R errorClassTypeLiteralPrefix( 46 R errorClassTypeLiteralPrefix(
47 Send node, 47 Send node,
48 TypeConstantExpression constant, 48 TypeConstantExpression constant,
49 IncDecOperator operator, 49 IncDecOperator operator,
50 A arg) { 50 A arg) {
51 return bulkHandleError(node); 51 return bulkHandleError(node, arg);
52 } 52 }
53 53
54 @override 54 @override
55 R errorClassTypeLiteralSet( 55 R errorClassTypeLiteralSet(
56 SendSet node, 56 SendSet node,
57 TypeConstantExpression constant, 57 TypeConstantExpression constant,
58 Node rhs, 58 Node rhs,
59 A arg) { 59 A arg) {
60 return bulkHandleError(node); 60 return bulkHandleError(node, arg);
61 } 61 }
62 62
63 @override 63 @override
64 R errorDynamicTypeLiteralCompound( 64 R errorDynamicTypeLiteralCompound(
65 Send node, 65 Send node,
66 TypeConstantExpression constant, 66 TypeConstantExpression constant,
67 AssignmentOperator operator, 67 AssignmentOperator operator,
68 Node rhs, 68 Node rhs,
69 A arg) { 69 A arg) {
70 return bulkHandleError(node); 70 return bulkHandleError(node, arg);
71 } 71 }
72 72
73 @override 73 @override
74 R errorDynamicTypeLiteralPostfix( 74 R errorDynamicTypeLiteralPostfix(
75 Send node, 75 Send node,
76 TypeConstantExpression constant, 76 TypeConstantExpression constant,
77 IncDecOperator operator, 77 IncDecOperator operator,
78 A arg) { 78 A arg) {
79 return bulkHandleError(node); 79 return bulkHandleError(node, arg);
80 } 80 }
81 81
82 @override 82 @override
83 R errorDynamicTypeLiteralPrefix( 83 R errorDynamicTypeLiteralPrefix(
84 Send node, 84 Send node,
85 TypeConstantExpression constant, 85 TypeConstantExpression constant,
86 IncDecOperator operator, 86 IncDecOperator operator,
87 A arg) { 87 A arg) {
88 return bulkHandleError(node); 88 return bulkHandleError(node, arg);
89 } 89 }
90 90
91 @override 91 @override
92 R errorDynamicTypeLiteralSet( 92 R errorDynamicTypeLiteralSet(
93 SendSet node, 93 SendSet node,
94 TypeConstantExpression constant, 94 TypeConstantExpression constant,
95 Node rhs, 95 Node rhs,
96 A arg) { 96 A arg) {
97 return bulkHandleError(node); 97 return bulkHandleError(node, arg);
98 } 98 }
99 99
100 @override 100 @override
101 R errorFinalLocalVariableCompound( 101 R errorFinalLocalVariableCompound(
102 Send node, 102 Send node,
103 LocalVariableElement 103 LocalVariableElement
104 variable, 104 variable,
105 AssignmentOperator operator, 105 AssignmentOperator operator,
106 Node rhs, 106 Node rhs,
107 A arg) { 107 A arg) {
108 return bulkHandleError(node); 108 return bulkHandleError(node, arg);
109 } 109 }
110 110
111 @override 111 @override
112 R errorFinalLocalVariableSet( 112 R errorFinalLocalVariableSet(
113 SendSet node, 113 SendSet node,
114 LocalVariableElement variable, 114 LocalVariableElement variable,
115 Node rhs, 115 Node rhs,
116 A arg) { 116 A arg) {
117 return bulkHandleError(node); 117 return bulkHandleError(node, arg);
118 } 118 }
119 119
120 @override 120 @override
121 R errorFinalParameterCompound( 121 R errorFinalParameterCompound(
122 Send node, 122 Send node,
123 ParameterElement parameter, 123 ParameterElement parameter,
124 AssignmentOperator operator, 124 AssignmentOperator operator,
125 Node rhs, 125 Node rhs,
126 A arg) { 126 A arg) {
127 return bulkHandleError(node); 127 return bulkHandleError(node, arg);
128 } 128 }
129 129
130 @override 130 @override
131 R errorFinalParameterSet( 131 R errorFinalParameterSet(
132 SendSet node, 132 SendSet node,
133 ParameterElement parameter, 133 ParameterElement parameter,
134 Node rhs, 134 Node rhs,
135 A arg) { 135 A arg) {
136 return bulkHandleError(node); 136 return bulkHandleError(node, arg);
137 } 137 }
138 138
139 @override 139 @override
140 R errorFinalStaticFieldCompound( 140 R errorFinalStaticFieldCompound(
141 Send node, 141 Send node,
142 FieldElement field, 142 FieldElement field,
143 AssignmentOperator operator, 143 AssignmentOperator operator,
144 Node rhs, 144 Node rhs,
145 A arg) { 145 A arg) {
146 return bulkHandleError(node); 146 return bulkHandleError(node, arg);
147 } 147 }
148 148
149 @override 149 @override
150 R errorFinalStaticFieldSet( 150 R errorFinalStaticFieldSet(
151 SendSet node, 151 SendSet node,
152 FieldElement field, 152 FieldElement field,
153 Node rhs, 153 Node rhs,
154 A arg) { 154 A arg) {
155 return bulkHandleError(node); 155 return bulkHandleError(node, arg);
156 } 156 }
157 157
158 @override 158 @override
159 R errorFinalSuperFieldCompound( 159 R errorFinalSuperFieldCompound(
160 Send node, 160 Send node,
161 FieldElement field, 161 FieldElement field,
162 AssignmentOperator operator, 162 AssignmentOperator operator,
163 Node rhs, 163 Node rhs,
164 A arg) { 164 A arg) {
165 return bulkHandleError(node); 165 return bulkHandleError(node, arg);
166 } 166 }
167 167
168 @override 168 @override
169 R errorFinalSuperFieldSet( 169 R errorFinalSuperFieldSet(
170 SendSet node, 170 SendSet node,
171 FieldElement field, 171 FieldElement field,
172 Node rhs, 172 Node rhs,
173 A arg) { 173 A arg) {
174 return bulkHandleError(node); 174 return bulkHandleError(node, arg);
175 } 175 }
176 176
177 @override 177 @override
178 R errorFinalTopLevelFieldCompound( 178 R errorFinalTopLevelFieldCompound(
179 Send node, 179 Send node,
180 FieldElement field, 180 FieldElement field,
181 AssignmentOperator operator, 181 AssignmentOperator operator,
182 Node rhs, 182 Node rhs,
183 A arg) { 183 A arg) {
184 return bulkHandleError(node); 184 return bulkHandleError(node, arg);
185 } 185 }
186 186
187 @override 187 @override
188 R errorFinalTopLevelFieldSet( 188 R errorFinalTopLevelFieldSet(
189 SendSet node, 189 SendSet node,
190 FieldElement field, 190 FieldElement field,
191 Node rhs, 191 Node rhs,
192 A arg) { 192 A arg) {
193 return bulkHandleError(node); 193 return bulkHandleError(node, arg);
194 } 194 }
195 195
196 @override 196 @override
197 R errorLocalFunctionCompound( 197 R errorLocalFunctionCompound(
198 Send node, 198 Send node,
199 LocalFunctionElement function, 199 LocalFunctionElement function,
200 AssignmentOperator operator, 200 AssignmentOperator operator,
201 Node rhs, 201 Node rhs,
202 A arg) { 202 A arg) {
203 return bulkHandleError(node); 203 return bulkHandleError(node, arg);
204 } 204 }
205 205
206 @override 206 @override
207 R errorLocalFunctionPostfix( 207 R errorLocalFunctionPostfix(
208 Send node, 208 Send node,
209 LocalFunctionElement function, 209 LocalFunctionElement function,
210 IncDecOperator operator, 210 IncDecOperator operator,
211 A arg) { 211 A arg) {
212 return bulkHandleError(node); 212 return bulkHandleError(node, arg);
213 } 213 }
214 214
215 @override 215 @override
216 R errorLocalFunctionPrefix( 216 R errorLocalFunctionPrefix(
217 Send node, 217 Send node,
218 LocalFunctionElement function, 218 LocalFunctionElement function,
219 IncDecOperator operator, 219 IncDecOperator operator,
220 A arg) { 220 A arg) {
221 return bulkHandleError(node); 221 return bulkHandleError(node, arg);
222 } 222 }
223 223
224 @override 224 @override
225 R errorLocalFunctionSet( 225 R errorLocalFunctionSet(
226 SendSet node, 226 SendSet node,
227 LocalFunctionElement function, 227 LocalFunctionElement function,
228 Node rhs, 228 Node rhs,
229 A arg) { 229 A arg) {
230 return bulkHandleError(node); 230 return bulkHandleError(node, arg);
231 } 231 }
232 232
233 @override 233 @override
234 R errorStaticFunctionSet( 234 R errorStaticFunctionSet(
235 Send node, 235 Send node,
236 MethodElement function, 236 MethodElement function,
237 Node rhs, 237 Node rhs,
238 A arg) { 238 A arg) {
239 return bulkHandleError(node); 239 return bulkHandleError(node, arg);
240 } 240 }
241 241
242 @override 242 @override
243 R errorStaticGetterSet( 243 R errorStaticGetterSet(
244 SendSet node, 244 SendSet node,
245 FunctionElement getter, 245 FunctionElement getter,
246 Node rhs, 246 Node rhs,
247 A arg) { 247 A arg) {
248 return bulkHandleError(node); 248 return bulkHandleError(node, arg);
249 } 249 }
250 250
251 @override 251 @override
252 R errorStaticSetterGet( 252 R errorStaticSetterGet(
253 Send node, 253 Send node,
254 FunctionElement setter, 254 FunctionElement setter,
255 A arg) { 255 A arg) {
256 return bulkHandleError(node); 256 return bulkHandleError(node, arg);
257 } 257 }
258 258
259 @override 259 @override
260 R errorStaticSetterInvoke( 260 R errorStaticSetterInvoke(
261 Send node, 261 Send node,
262 FunctionElement setter, 262 FunctionElement setter,
263 NodeList arguments, 263 NodeList arguments,
264 Selector selector, 264 Selector selector,
265 A arg) { 265 A arg) {
266 return bulkHandleError(node); 266 return bulkHandleError(node, arg);
267 } 267 }
268 268
269 @override 269 @override
270 R errorSuperGetterSet( 270 R errorSuperGetterSet(
271 SendSet node, 271 SendSet node,
272 FunctionElement getter, 272 FunctionElement getter,
273 Node rhs, 273 Node rhs,
274 A arg) { 274 A arg) {
275 return bulkHandleError(node); 275 return bulkHandleError(node, arg);
276 } 276 }
277 277
278 @override 278 @override
279 R errorSuperMethodSet( 279 R errorSuperMethodSet(
280 Send node, 280 Send node,
281 MethodElement method, 281 MethodElement method,
282 Node rhs, 282 Node rhs,
283 A arg) { 283 A arg) {
284 return bulkHandleError(node); 284 return bulkHandleError(node, arg);
285 } 285 }
286 286
287 @override 287 @override
288 R errorSuperSetterGet( 288 R errorSuperSetterGet(
289 Send node, 289 Send node,
290 FunctionElement setter, 290 FunctionElement setter,
291 A arg) { 291 A arg) {
292 return bulkHandleError(node); 292 return bulkHandleError(node, arg);
293 } 293 }
294 294
295 @override 295 @override
296 R errorSuperSetterInvoke( 296 R errorSuperSetterInvoke(
297 Send node, 297 Send node,
298 FunctionElement setter, 298 FunctionElement setter,
299 NodeList arguments, 299 NodeList arguments,
300 Selector selector, 300 Selector selector,
301 A arg) { 301 A arg) {
302 return bulkHandleError(node); 302 return bulkHandleError(node, arg);
303 } 303 }
304 304
305 @override 305 @override
306 R errorTopLevelFunctionSet( 306 R errorTopLevelFunctionSet(
307 Send node, 307 Send node,
308 MethodElement function, 308 MethodElement function,
309 Node rhs, 309 Node rhs,
310 A arg) { 310 A arg) {
311 return bulkHandleError(node); 311 return bulkHandleError(node, arg);
312 } 312 }
313 313
314 @override 314 @override
315 R errorTopLevelGetterSet( 315 R errorTopLevelGetterSet(
316 SendSet node, 316 SendSet node,
317 FunctionElement getter, 317 FunctionElement getter,
318 Node rhs, 318 Node rhs,
319 A arg) { 319 A arg) {
320 return bulkHandleError(node); 320 return bulkHandleError(node, arg);
321 } 321 }
322 322
323 @override 323 @override
324 R errorTopLevelSetterGet( 324 R errorTopLevelSetterGet(
325 Send node, 325 Send node,
326 FunctionElement setter, 326 FunctionElement setter,
327 A arg) { 327 A arg) {
328 return bulkHandleError(node); 328 return bulkHandleError(node, arg);
329 } 329 }
330 330
331 @override 331 @override
332 R errorTopLevelSetterInvoke( 332 R errorTopLevelSetterInvoke(
333 Send node, 333 Send node,
334 FunctionElement setter, 334 FunctionElement setter,
335 NodeList arguments, 335 NodeList arguments,
336 Selector selector, 336 Selector selector,
337 A arg) { 337 A arg) {
338 return bulkHandleError(node); 338 return bulkHandleError(node, arg);
339 } 339 }
340 340
341 @override 341 @override
342 R errorTypeVariableTypeLiteralCompound( 342 R errorTypeVariableTypeLiteralCompound(
343 Send node, 343 Send node,
344 TypeVariableElement element, 344 TypeVariableElement element,
345 AssignmentOperator operator, 345 AssignmentOperator operator,
346 Node rhs, 346 Node rhs,
347 A arg) { 347 A arg) {
348 return bulkHandleError(node); 348 return bulkHandleError(node, arg);
349 } 349 }
350 350
351 @override 351 @override
352 R errorTypeVariableTypeLiteralPostfix( 352 R errorTypeVariableTypeLiteralPostfix(
353 Send node, 353 Send node,
354 TypeVariableElement element, 354 TypeVariableElement element,
355 IncDecOperator operator, 355 IncDecOperator operator,
356 A arg) { 356 A arg) {
357 return bulkHandleError(node); 357 return bulkHandleError(node, arg);
358 } 358 }
359 359
360 @override 360 @override
361 R errorTypeVariableTypeLiteralPrefix( 361 R errorTypeVariableTypeLiteralPrefix(
362 Send node, 362 Send node,
363 TypeVariableElement element, 363 TypeVariableElement element,
364 IncDecOperator operator, 364 IncDecOperator operator,
365 A arg) { 365 A arg) {
366 return bulkHandleError(node); 366 return bulkHandleError(node, arg);
367 } 367 }
368 368
369 @override 369 @override
370 R errorTypeVariableTypeLiteralSet( 370 R errorTypeVariableTypeLiteralSet(
371 SendSet node, 371 SendSet node,
372 TypeVariableElement element, 372 TypeVariableElement element,
373 Node rhs, 373 Node rhs,
374 A arg) { 374 A arg) {
375 return bulkHandleError(node); 375 return bulkHandleError(node, arg);
376 } 376 }
377 377
378 @override 378 @override
379 R errorTypedefTypeLiteralCompound( 379 R errorTypedefTypeLiteralCompound(
380 Send node, 380 Send node,
381 TypeConstantExpression constant, 381 TypeConstantExpression constant,
382 AssignmentOperator operator, 382 AssignmentOperator operator,
383 Node rhs, 383 Node rhs,
384 A arg) { 384 A arg) {
385 return bulkHandleError(node); 385 return bulkHandleError(node, arg);
386 } 386 }
387 387
388 @override 388 @override
389 R errorTypedefTypeLiteralPostfix( 389 R errorTypedefTypeLiteralPostfix(
390 Send node, 390 Send node,
391 TypeConstantExpression constant, 391 TypeConstantExpression constant,
392 IncDecOperator operator, 392 IncDecOperator operator,
393 A arg) { 393 A arg) {
394 return bulkHandleError(node); 394 return bulkHandleError(node, arg);
395 } 395 }
396 396
397 @override 397 @override
398 R errorTypedefTypeLiteralPrefix( 398 R errorTypedefTypeLiteralPrefix(
399 Send node, 399 Send node,
400 TypeConstantExpression constant, 400 TypeConstantExpression constant,
401 IncDecOperator operator, 401 IncDecOperator operator,
402 A arg) { 402 A arg) {
403 return bulkHandleError(node); 403 return bulkHandleError(node, arg);
404 } 404 }
405 405
406 @override 406 @override
407 R errorTypedefTypeLiteralSet( 407 R errorTypedefTypeLiteralSet(
408 SendSet node, 408 SendSet node,
409 TypeConstantExpression constant, 409 TypeConstantExpression constant,
410 Node rhs, 410 Node rhs,
411 A arg) { 411 A arg) {
412 return bulkHandleError(node); 412 return bulkHandleError(node, arg);
413 } 413 }
414 414
415 @override 415 @override
416 R errorUnresolvedCompound( 416 R errorUnresolvedCompound(
417 Send node, 417 Send node,
418 Element element, 418 Element element,
419 AssignmentOperator operator, 419 AssignmentOperator operator,
420 Node rhs, 420 Node rhs,
421 A arg) { 421 A arg) {
422 return bulkHandleError(node); 422 return bulkHandleError(node, arg);
423 } 423 }
424 424
425 @override 425 @override
426 R errorUnresolvedGet( 426 R errorUnresolvedGet(
427 Send node, 427 Send node,
428 Element element, 428 Element element,
429 A arg) { 429 A arg) {
430 return bulkHandleError(node); 430 return bulkHandleError(node, arg);
431 } 431 }
432 432
433 @override 433 @override
434 R errorUnresolvedInvoke( 434 R errorUnresolvedInvoke(
435 Send node, 435 Send node,
436 Element element, 436 Element element,
437 NodeList arguments, 437 NodeList arguments,
438 Selector selector, 438 Selector selector,
439 A arg) { 439 A arg) {
440 return bulkHandleError(node); 440 return bulkHandleError(node, arg);
441 } 441 }
442 442
443 @override 443 @override
444 R errorUnresolvedPostfix( 444 R errorUnresolvedPostfix(
445 Send node, 445 Send node,
446 Element element, 446 Element element,
447 IncDecOperator operator, 447 IncDecOperator operator,
448 A arg) { 448 A arg) {
449 return bulkHandleError(node); 449 return bulkHandleError(node, arg);
450 } 450 }
451 451
452 @override 452 @override
453 R errorUnresolvedPrefix( 453 R errorUnresolvedPrefix(
454 Send node, 454 Send node,
455 Element element, 455 Element element,
456 IncDecOperator operator, 456 IncDecOperator operator,
457 A arg) { 457 A arg) {
458 return bulkHandleError(node); 458 return bulkHandleError(node, arg);
459 } 459 }
460 460
461 @override 461 @override
462 R errorUnresolvedSet( 462 R errorUnresolvedSet(
463 Send node, 463 Send node,
464 Element element, 464 Element element,
465 Node rhs, 465 Node rhs,
466 A arg) { 466 A arg) {
467 return bulkHandleError(node); 467 return bulkHandleError(node, arg);
468 } 468 }
469 469
470 @override 470 @override
471 R errorUnresolvedSuperCompoundIndexSet( 471 R errorUnresolvedSuperCompoundIndexSet(
472 SendSet node, 472 SendSet node,
473 Element element, 473 Element element,
474 Node index, 474 Node index,
475 AssignmentOperator operator, 475 AssignmentOperator operator,
476 Node rhs, 476 Node rhs,
477 A arg) { 477 A arg) {
478 return bulkHandleError(node); 478 return bulkHandleError(node, arg);
479 } 479 }
480 480
481 @override 481 @override
482 R errorUnresolvedSuperIndex( 482 R errorUnresolvedSuperIndex(
483 Send node, 483 Send node,
484 Element function, 484 Element function,
485 Node index, 485 Node index,
486 A arg) { 486 A arg) {
487 return bulkHandleError(node); 487 return bulkHandleError(node, arg);
488 } 488 }
489 489
490 @override 490 @override
491 R errorUnresolvedSuperIndexPostfix( 491 R errorUnresolvedSuperIndexPostfix(
492 Send node, 492 Send node,
493 Element function, 493 Element function,
494 Node index, 494 Node index,
495 IncDecOperator operator, 495 IncDecOperator operator,
496 A arg) { 496 A arg) {
497 return bulkHandleError(node); 497 return bulkHandleError(node, arg);
498 } 498 }
499 499
500 @override 500 @override
501 R errorUnresolvedSuperIndexPrefix( 501 R errorUnresolvedSuperIndexPrefix(
502 Send node, 502 Send node,
503 Element function, 503 Element function,
504 Node index, 504 Node index,
505 IncDecOperator operator, 505 IncDecOperator operator,
506 A arg) { 506 A arg) {
507 return bulkHandleError(node); 507 return bulkHandleError(node, arg);
508 } 508 }
509 509
510 @override 510 @override
511 R errorUnresolvedSuperIndexSet( 511 R errorUnresolvedSuperIndexSet(
512 SendSet node, 512 SendSet node,
513 Element element, 513 Element element,
514 Node index, 514 Node index,
515 Node rhs, 515 Node rhs,
516 A arg) { 516 A arg) {
517 return bulkHandleError(node); 517 return bulkHandleError(node, arg);
518 } 518 }
519 519
520 @override 520 @override
521 R errorUnresolvedSuperBinary( 521 R errorUnresolvedSuperBinary(
522 Send node, 522 Send node,
523 Element element, 523 Element element,
524 BinaryOperator operator, 524 BinaryOperator operator,
525 Node argument, 525 Node argument,
526 A arg) { 526 A arg) {
527 return bulkHandleError(node); 527 return bulkHandleError(node, arg);
528 } 528 }
529 529
530 @override 530 @override
531 R errorUnresolvedSuperUnary( 531 R errorUnresolvedSuperUnary(
532 Send node, 532 Send node,
533 UnaryOperator operator, 533 UnaryOperator operator,
534 Element element, 534 Element element,
535 A arg) { 535 A arg) {
536 return bulkHandleError(node); 536 return bulkHandleError(node, arg);
537 } 537 }
538 538
539 @override 539 @override
540 R errorUndefinedBinaryExpression( 540 R errorUndefinedBinaryExpression(
541 Send node, 541 Send node,
542 Node left, 542 Node left,
543 Operator operator, 543 Operator operator,
544 Node right, 544 Node right,
545 A arg) { 545 A arg) {
546 return bulkHandleError(node); 546 return bulkHandleError(node, arg);
547 } 547 }
548 548
549 @override 549 @override
550 R errorUndefinedUnaryExpression( 550 R errorUndefinedUnaryExpression(
551 Send node, 551 Send node,
552 Operator operator, 552 Operator operator,
553 Node expression, 553 Node expression,
554 A arg) { 554 A arg) {
555 return bulkHandleError(node); 555 return bulkHandleError(node, arg);
556 } 556 }
557 } 557 }
558 558
559 /// Mixin that implements all `visitXPrefix` methods of [SemanticSendVisitor] by 559 /// Mixin that implements all `visitXPrefix` methods of [SemanticSendVisitor] by
560 /// delegating to a bulk handler. 560 /// delegating to a bulk handler.
561 /// 561 ///
562 /// Use this mixin to provide a trivial implementation for all `visitXPrefix` 562 /// Use this mixin to provide a trivial implementation for all `visitXPrefix`
563 /// methods. 563 /// methods.
564 abstract class PrefixBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 564 abstract class PrefixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
565 R bulkHandleNode(Node node, String message); 565 R bulkHandleNode(Node node, String message, A arg);
566 566
567 R bulkHandlePrefix(Send node) { 567 R bulkHandlePrefix(Send node, A arg) {
568 return bulkHandleNode(node, "Prefix expression `$node` unhandled."); 568 return bulkHandleNode(node, "Prefix expression `$node` unhandled.", arg);
569 } 569 }
570 570
571 @override 571 @override
572 R visitDynamicPropertyPrefix( 572 R visitDynamicPropertyPrefix(
573 Send node, 573 Send node,
574 Node receiver, 574 Node receiver,
575 IncDecOperator operator, 575 IncDecOperator operator,
576 Selector getterSelector, 576 Selector getterSelector,
577 Selector setterSelector, 577 Selector setterSelector,
578 A arg) { 578 A arg) {
579 return bulkHandlePrefix(node); 579 return bulkHandlePrefix(node, arg);
580 } 580 }
581 581
582 @override 582 @override
583 R visitIndexPrefix( 583 R visitIndexPrefix(
584 Send node, 584 Send node,
585 Node receiver, 585 Node receiver,
586 Node index, 586 Node index,
587 IncDecOperator operator, 587 IncDecOperator operator,
588 A arg) { 588 A arg) {
589 return bulkHandlePrefix(node); 589 return bulkHandlePrefix(node, arg);
590 } 590 }
591 591
592 @override 592 @override
593 R visitLocalVariablePrefix( 593 R visitLocalVariablePrefix(
594 Send node, 594 Send node,
595 LocalVariableElement variable, 595 LocalVariableElement variable,
596 IncDecOperator operator, 596 IncDecOperator operator,
597 A arg) { 597 A arg) {
598 return bulkHandlePrefix(node); 598 return bulkHandlePrefix(node, arg);
599 } 599 }
600 600
601 @override 601 @override
602 R visitParameterPrefix( 602 R visitParameterPrefix(
603 Send node, 603 Send node,
604 ParameterElement parameter, 604 ParameterElement parameter,
605 IncDecOperator operator, 605 IncDecOperator operator,
606 A arg) { 606 A arg) {
607 return bulkHandlePrefix(node); 607 return bulkHandlePrefix(node, arg);
608 } 608 }
609 609
610 @override 610 @override
611 R visitStaticFieldPrefix( 611 R visitStaticFieldPrefix(
612 Send node, 612 Send node,
613 FieldElement field, 613 FieldElement field,
614 IncDecOperator operator, 614 IncDecOperator operator,
615 A arg) { 615 A arg) {
616 return bulkHandlePrefix(node); 616 return bulkHandlePrefix(node, arg);
617 } 617 }
618 618
619 @override 619 @override
620 R visitStaticGetterSetterPrefix( 620 R visitStaticGetterSetterPrefix(
621 Send node, 621 Send node,
622 FunctionElement getter, 622 FunctionElement getter,
623 FunctionElement setter, 623 FunctionElement setter,
624 IncDecOperator operator, 624 IncDecOperator operator,
625 A arg) { 625 A arg) {
626 return bulkHandlePrefix(node); 626 return bulkHandlePrefix(node, arg);
627 } 627 }
628 628
629 @override 629 @override
630 R visitStaticMethodSetterPrefix( 630 R visitStaticMethodSetterPrefix(
631 Send node, 631 Send node,
632 FunctionElement getter, 632 FunctionElement getter,
633 FunctionElement setter, 633 FunctionElement setter,
634 IncDecOperator operator, 634 IncDecOperator operator,
635 A arg) { 635 A arg) {
636 return bulkHandlePrefix(node); 636 return bulkHandlePrefix(node, arg);
637 } 637 }
638 638
639 @override 639 @override
640 R visitSuperFieldFieldPrefix( 640 R visitSuperFieldFieldPrefix(
641 Send node, 641 Send node,
642 FieldElement readField, 642 FieldElement readField,
643 FieldElement writtenField, 643 FieldElement writtenField,
644 IncDecOperator operator, 644 IncDecOperator operator,
645 A arg) { 645 A arg) {
646 return bulkHandlePrefix(node); 646 return bulkHandlePrefix(node, arg);
647 } 647 }
648 648
649 @override 649 @override
650 R visitSuperFieldPrefix( 650 R visitSuperFieldPrefix(
651 Send node, 651 Send node,
652 FieldElement field, 652 FieldElement field,
653 IncDecOperator operator, 653 IncDecOperator operator,
654 A arg) { 654 A arg) {
655 return bulkHandlePrefix(node); 655 return bulkHandlePrefix(node, arg);
656 } 656 }
657 657
658 @override 658 @override
659 R visitSuperFieldSetterPrefix( 659 R visitSuperFieldSetterPrefix(
660 Send node, 660 Send node,
661 FieldElement field, 661 FieldElement field,
662 FunctionElement setter, 662 FunctionElement setter,
663 IncDecOperator operator, 663 IncDecOperator operator,
664 A arg) { 664 A arg) {
665 return bulkHandlePrefix(node); 665 return bulkHandlePrefix(node, arg);
666 } 666 }
667 667
668 @override 668 @override
669 R visitSuperGetterFieldPrefix( 669 R visitSuperGetterFieldPrefix(
670 Send node, 670 Send node,
671 FunctionElement getter, 671 FunctionElement getter,
672 FieldElement field, 672 FieldElement field,
673 IncDecOperator operator, 673 IncDecOperator operator,
674 A arg) { 674 A arg) {
675 return bulkHandlePrefix(node); 675 return bulkHandlePrefix(node, arg);
676 } 676 }
677 677
678 @override 678 @override
679 R visitSuperGetterSetterPrefix( 679 R visitSuperGetterSetterPrefix(
680 Send node, 680 Send node,
681 FunctionElement getter, 681 FunctionElement getter,
682 FunctionElement setter, 682 FunctionElement setter,
683 IncDecOperator operator, 683 IncDecOperator operator,
684 A arg) { 684 A arg) {
685 return bulkHandlePrefix(node); 685 return bulkHandlePrefix(node, arg);
686 } 686 }
687 687
688 @override 688 @override
689 R visitSuperIndexPrefix( 689 R visitSuperIndexPrefix(
690 Send node, 690 Send node,
691 FunctionElement indexFunction, 691 FunctionElement indexFunction,
692 FunctionElement indexSetFunction, 692 FunctionElement indexSetFunction,
693 Node index, 693 Node index,
694 IncDecOperator operator, 694 IncDecOperator operator,
695 A arg) { 695 A arg) {
696 return bulkHandlePrefix(node); 696 return bulkHandlePrefix(node, arg);
697 } 697 }
698 698
699 @override 699 @override
700 R visitSuperMethodSetterPrefix( 700 R visitSuperMethodSetterPrefix(
701 Send node, 701 Send node,
702 FunctionElement method, 702 FunctionElement method,
703 FunctionElement setter, 703 FunctionElement setter,
704 IncDecOperator operator, 704 IncDecOperator operator,
705 A arg) { 705 A arg) {
706 return bulkHandlePrefix(node); 706 return bulkHandlePrefix(node, arg);
707 } 707 }
708 708
709 @override 709 @override
710 R visitThisPropertyPrefix( 710 R visitThisPropertyPrefix(
711 Send node, 711 Send node,
712 IncDecOperator operator, 712 IncDecOperator operator,
713 Selector getterSelector, 713 Selector getterSelector,
714 Selector setterSelector, 714 Selector setterSelector,
715 A arg) { 715 A arg) {
716 return bulkHandlePrefix(node); 716 return bulkHandlePrefix(node, arg);
717 } 717 }
718 718
719 @override 719 @override
720 R visitTopLevelFieldPrefix( 720 R visitTopLevelFieldPrefix(
721 Send node, 721 Send node,
722 FieldElement field, 722 FieldElement field,
723 IncDecOperator operator, 723 IncDecOperator operator,
724 A arg) { 724 A arg) {
725 return bulkHandlePrefix(node); 725 return bulkHandlePrefix(node, arg);
726 } 726 }
727 727
728 @override 728 @override
729 R visitTopLevelGetterSetterPrefix( 729 R visitTopLevelGetterSetterPrefix(
730 Send node, 730 Send node,
731 FunctionElement getter, 731 FunctionElement getter,
732 FunctionElement setter, 732 FunctionElement setter,
733 IncDecOperator operator, 733 IncDecOperator operator,
734 A arg) { 734 A arg) {
735 return bulkHandlePrefix(node); 735 return bulkHandlePrefix(node, arg);
736 } 736 }
737 737
738 @override 738 @override
739 R visitTopLevelMethodSetterPrefix( 739 R visitTopLevelMethodSetterPrefix(
740 Send node, 740 Send node,
741 FunctionElement method, 741 FunctionElement method,
742 FunctionElement setter, 742 FunctionElement setter,
743 IncDecOperator operator, 743 IncDecOperator operator,
744 A arg) { 744 A arg) {
745 return bulkHandlePrefix(node); 745 return bulkHandlePrefix(node, arg);
746 } 746 }
747 } 747 }
748 748
749 /// Mixin that implements all `visitXPostfix` methods of [SemanticSendVisitor] 749 /// Mixin that implements all `visitXPostfix` methods of [SemanticSendVisitor]
750 /// by delegating to a bulk handler. 750 /// by delegating to a bulk handler.
751 /// 751 ///
752 /// Use this mixin to provide a trivial implementation for all `visitXPostfix` 752 /// Use this mixin to provide a trivial implementation for all `visitXPostfix`
753 /// methods. 753 /// methods.
754 abstract class PostfixBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 754 abstract class PostfixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
755 R bulkHandleNode(Node node, String message); 755 R bulkHandleNode(Node node, String message, A arg);
756 756
757 R bulkHandlePostfix(Send node) { 757 R bulkHandlePostfix(Send node, A arg) {
758 return bulkHandleNode(node, "Postfix expression `$node` unhandled."); 758 return bulkHandleNode(node, "Postfix expression `$node` unhandled.", arg);
759 } 759 }
760 760
761 @override 761 @override
762 R visitDynamicPropertyPostfix( 762 R visitDynamicPropertyPostfix(
763 Send node, 763 Send node,
764 Node receiver, 764 Node receiver,
765 IncDecOperator operator, 765 IncDecOperator operator,
766 Selector getterSelector, 766 Selector getterSelector,
767 Selector setterSelector, 767 Selector setterSelector,
768 A arg) { 768 A arg) {
769 return bulkHandlePostfix(node); 769 return bulkHandlePostfix(node, arg);
770 } 770 }
771 771
772 @override 772 @override
773 R visitIndexPostfix( 773 R visitIndexPostfix(
774 Send node, 774 Send node,
775 Node receiver, 775 Node receiver,
776 Node index, 776 Node index,
777 IncDecOperator operator, 777 IncDecOperator operator,
778 A arg) { 778 A arg) {
779 return bulkHandlePostfix(node); 779 return bulkHandlePostfix(node, arg);
780 } 780 }
781 781
782 @override 782 @override
783 R visitLocalVariablePostfix( 783 R visitLocalVariablePostfix(
784 Send node, 784 Send node,
785 LocalVariableElement variable, 785 LocalVariableElement variable,
786 IncDecOperator operator, 786 IncDecOperator operator,
787 A arg) { 787 A arg) {
788 return bulkHandlePostfix(node); 788 return bulkHandlePostfix(node, arg);
789 } 789 }
790 790
791 @override 791 @override
792 R visitParameterPostfix( 792 R visitParameterPostfix(
793 Send node, 793 Send node,
794 ParameterElement parameter, 794 ParameterElement parameter,
795 IncDecOperator operator, 795 IncDecOperator operator,
796 A arg) { 796 A arg) {
797 return bulkHandlePostfix(node); 797 return bulkHandlePostfix(node, arg);
798 } 798 }
799 799
800 @override 800 @override
801 R visitStaticFieldPostfix( 801 R visitStaticFieldPostfix(
802 Send node, 802 Send node,
803 FieldElement field, 803 FieldElement field,
804 IncDecOperator operator, 804 IncDecOperator operator,
805 A arg) { 805 A arg) {
806 return bulkHandlePostfix(node); 806 return bulkHandlePostfix(node, arg);
807 } 807 }
808 808
809 @override 809 @override
810 R visitStaticGetterSetterPostfix( 810 R visitStaticGetterSetterPostfix(
811 Send node, 811 Send node,
812 FunctionElement getter, 812 FunctionElement getter,
813 FunctionElement setter, 813 FunctionElement setter,
814 IncDecOperator operator, 814 IncDecOperator operator,
815 A arg) { 815 A arg) {
816 return bulkHandlePostfix(node); 816 return bulkHandlePostfix(node, arg);
817 } 817 }
818 818
819 @override 819 @override
820 R visitStaticMethodSetterPostfix( 820 R visitStaticMethodSetterPostfix(
821 Send node, 821 Send node,
822 FunctionElement getter, 822 FunctionElement getter,
823 FunctionElement setter, 823 FunctionElement setter,
824 IncDecOperator operator, 824 IncDecOperator operator,
825 A arg) { 825 A arg) {
826 return bulkHandlePostfix(node); 826 return bulkHandlePostfix(node, arg);
827 } 827 }
828 828
829 @override 829 @override
830 R visitSuperFieldFieldPostfix( 830 R visitSuperFieldFieldPostfix(
831 Send node, 831 Send node,
832 FieldElement readField, 832 FieldElement readField,
833 FieldElement writtenField, 833 FieldElement writtenField,
834 IncDecOperator operator, 834 IncDecOperator operator,
835 A arg) { 835 A arg) {
836 return bulkHandlePostfix(node); 836 return bulkHandlePostfix(node, arg);
837 } 837 }
838 838
839 @override 839 @override
840 R visitSuperFieldPostfix( 840 R visitSuperFieldPostfix(
841 Send node, 841 Send node,
842 FieldElement field, 842 FieldElement field,
843 IncDecOperator operator, 843 IncDecOperator operator,
844 A arg) { 844 A arg) {
845 return bulkHandlePostfix(node); 845 return bulkHandlePostfix(node, arg);
846 } 846 }
847 847
848 @override 848 @override
849 R visitSuperFieldSetterPostfix( 849 R visitSuperFieldSetterPostfix(
850 Send node, 850 Send node,
851 FieldElement field, 851 FieldElement field,
852 FunctionElement setter, 852 FunctionElement setter,
853 IncDecOperator operator, 853 IncDecOperator operator,
854 A arg) { 854 A arg) {
855 return bulkHandlePostfix(node); 855 return bulkHandlePostfix(node, arg);
856 } 856 }
857 857
858 @override 858 @override
859 R visitSuperGetterFieldPostfix( 859 R visitSuperGetterFieldPostfix(
860 Send node, 860 Send node,
861 FunctionElement getter, 861 FunctionElement getter,
862 FieldElement field, 862 FieldElement field,
863 IncDecOperator operator, 863 IncDecOperator operator,
864 A arg) { 864 A arg) {
865 return bulkHandlePostfix(node); 865 return bulkHandlePostfix(node, arg);
866 } 866 }
867 867
868 @override 868 @override
869 R visitSuperGetterSetterPostfix( 869 R visitSuperGetterSetterPostfix(
870 Send node, 870 Send node,
871 FunctionElement getter, 871 FunctionElement getter,
872 FunctionElement setter, 872 FunctionElement setter,
873 IncDecOperator operator, 873 IncDecOperator operator,
874 A arg) { 874 A arg) {
875 return bulkHandlePostfix(node); 875 return bulkHandlePostfix(node, arg);
876 } 876 }
877 877
878 @override 878 @override
879 R visitSuperIndexPostfix( 879 R visitSuperIndexPostfix(
880 Send node, 880 Send node,
881 FunctionElement indexFunction, 881 FunctionElement indexFunction,
882 FunctionElement indexSetFunction, 882 FunctionElement indexSetFunction,
883 Node index, 883 Node index,
884 IncDecOperator operator, 884 IncDecOperator operator,
885 A arg) { 885 A arg) {
886 return bulkHandlePostfix(node); 886 return bulkHandlePostfix(node, arg);
887 } 887 }
888 888
889 @override 889 @override
890 R visitSuperMethodSetterPostfix( 890 R visitSuperMethodSetterPostfix(
891 Send node, 891 Send node,
892 FunctionElement method, 892 FunctionElement method,
893 FunctionElement setter, 893 FunctionElement setter,
894 IncDecOperator operator, 894 IncDecOperator operator,
895 A arg) { 895 A arg) {
896 return bulkHandlePostfix(node); 896 return bulkHandlePostfix(node, arg);
897 } 897 }
898 898
899 @override 899 @override
900 R visitThisPropertyPostfix( 900 R visitThisPropertyPostfix(
901 Send node, 901 Send node,
902 IncDecOperator operator, 902 IncDecOperator operator,
903 Selector getterSelector, 903 Selector getterSelector,
904 Selector setterSelector, 904 Selector setterSelector,
905 A arg) { 905 A arg) {
906 return bulkHandlePostfix(node); 906 return bulkHandlePostfix(node, arg);
907 } 907 }
908 908
909 @override 909 @override
910 R visitTopLevelFieldPostfix( 910 R visitTopLevelFieldPostfix(
911 Send node, 911 Send node,
912 FieldElement field, 912 FieldElement field,
913 IncDecOperator operator, 913 IncDecOperator operator,
914 A arg) { 914 A arg) {
915 return bulkHandlePostfix(node); 915 return bulkHandlePostfix(node, arg);
916 } 916 }
917 917
918 @override 918 @override
919 R visitTopLevelGetterSetterPostfix( 919 R visitTopLevelGetterSetterPostfix(
920 Send node, 920 Send node,
921 FunctionElement getter, 921 FunctionElement getter,
922 FunctionElement setter, 922 FunctionElement setter,
923 IncDecOperator operator, 923 IncDecOperator operator,
924 A arg) { 924 A arg) {
925 return bulkHandlePostfix(node); 925 return bulkHandlePostfix(node, arg);
926 } 926 }
927 927
928 @override 928 @override
929 R visitTopLevelMethodSetterPostfix( 929 R visitTopLevelMethodSetterPostfix(
930 Send node, 930 Send node,
931 FunctionElement method, 931 FunctionElement method,
932 FunctionElement setter, 932 FunctionElement setter,
933 IncDecOperator operator, 933 IncDecOperator operator,
934 A arg) { 934 A arg) {
935 return bulkHandlePostfix(node); 935 return bulkHandlePostfix(node, arg);
936 } 936 }
937 } 937 }
938 938
939 /// Mixin that implements all `visitXCompound` methods of [SemanticSendVisitor] 939 /// Mixin that implements all `visitXCompound` methods of [SemanticSendVisitor]
940 /// by delegating to a bulk handler. 940 /// by delegating to a bulk handler.
941 /// 941 ///
942 /// Use this mixin to provide a trivial implementation for all `xCompound` 942 /// Use this mixin to provide a trivial implementation for all `xCompound`
943 /// methods. 943 /// methods.
944 abstract class CompoundBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 944 abstract class CompoundBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
945 R bulkHandleNode(Node node, String message); 945 R bulkHandleNode(Node node, String message, A arg);
946 946
947 R bulkHandleCompound(Send node) { 947 R bulkHandleCompound(Send node, A arg) {
948 return bulkHandleNode(node, "Compound assignment `$node` unhandled."); 948 return bulkHandleNode(node, "Compound assignment `$node` unhandled.", arg);
949 } 949 }
950 950
951 @override 951 @override
952 R visitDynamicPropertyCompound( 952 R visitDynamicPropertyCompound(
953 Send node, 953 Send node,
954 Node receiver, 954 Node receiver,
955 AssignmentOperator operator, 955 AssignmentOperator operator,
956 Node rhs, 956 Node rhs,
957 Selector getterSelector, 957 Selector getterSelector,
958 Selector setterSelector, 958 Selector setterSelector,
959 A arg) { 959 A arg) {
960 return bulkHandleCompound(node); 960 return bulkHandleCompound(node, arg);
961 } 961 }
962 962
963 @override 963 @override
964 R visitLocalVariableCompound( 964 R visitLocalVariableCompound(
965 Send node, 965 Send node,
966 LocalVariableElement variable, 966 LocalVariableElement variable,
967 AssignmentOperator operator, 967 AssignmentOperator operator,
968 Node rhs, 968 Node rhs,
969 A arg) { 969 A arg) {
970 return bulkHandleCompound(node); 970 return bulkHandleCompound(node, arg);
971 } 971 }
972 972
973 @override 973 @override
974 R visitParameterCompound( 974 R visitParameterCompound(
975 Send node, 975 Send node,
976 ParameterElement parameter, 976 ParameterElement parameter,
977 AssignmentOperator operator, 977 AssignmentOperator operator,
978 Node rhs, 978 Node rhs,
979 A arg) { 979 A arg) {
980 return bulkHandleCompound(node); 980 return bulkHandleCompound(node, arg);
981 } 981 }
982 982
983 @override 983 @override
984 R visitStaticFieldCompound( 984 R visitStaticFieldCompound(
985 Send node, 985 Send node,
986 FieldElement field, 986 FieldElement field,
987 AssignmentOperator operator, 987 AssignmentOperator operator,
988 Node rhs, 988 Node rhs,
989 A arg) { 989 A arg) {
990 return bulkHandleCompound(node); 990 return bulkHandleCompound(node, arg);
991 } 991 }
992 992
993 @override 993 @override
994 R visitStaticGetterSetterCompound( 994 R visitStaticGetterSetterCompound(
995 Send node, 995 Send node,
996 FunctionElement getter, 996 FunctionElement getter,
997 FunctionElement setter, 997 FunctionElement setter,
998 AssignmentOperator operator, 998 AssignmentOperator operator,
999 Node rhs, 999 Node rhs,
1000 A arg) { 1000 A arg) {
1001 return bulkHandleCompound(node); 1001 return bulkHandleCompound(node, arg);
1002 } 1002 }
1003 1003
1004 @override 1004 @override
1005 R visitStaticMethodSetterCompound( 1005 R visitStaticMethodSetterCompound(
1006 Send node, 1006 Send node,
1007 FunctionElement method, 1007 FunctionElement method,
1008 FunctionElement setter, 1008 FunctionElement setter,
1009 AssignmentOperator operator, 1009 AssignmentOperator operator,
1010 Node rhs, 1010 Node rhs,
1011 A arg) { 1011 A arg) {
1012 return bulkHandleCompound(node); 1012 return bulkHandleCompound(node, arg);
1013 } 1013 }
1014 1014
1015 @override 1015 @override
1016 R visitSuperFieldCompound( 1016 R visitSuperFieldCompound(
1017 Send node, 1017 Send node,
1018 FieldElement field, 1018 FieldElement field,
1019 AssignmentOperator operator, 1019 AssignmentOperator operator,
1020 Node rhs, 1020 Node rhs,
1021 A arg) { 1021 A arg) {
1022 return bulkHandleCompound(node); 1022 return bulkHandleCompound(node, arg);
1023 } 1023 }
1024 1024
1025 @override 1025 @override
1026 R visitSuperFieldSetterCompound( 1026 R visitSuperFieldSetterCompound(
1027 Send node, 1027 Send node,
1028 FieldElement field, 1028 FieldElement field,
1029 FunctionElement setter, 1029 FunctionElement setter,
1030 AssignmentOperator operator, 1030 AssignmentOperator operator,
1031 Node rhs, 1031 Node rhs,
1032 A arg) { 1032 A arg) {
1033 return bulkHandleCompound(node); 1033 return bulkHandleCompound(node, arg);
1034 } 1034 }
1035 1035
1036 @override 1036 @override
1037 R visitSuperGetterFieldCompound( 1037 R visitSuperGetterFieldCompound(
1038 Send node, 1038 Send node,
1039 FunctionElement getter, 1039 FunctionElement getter,
1040 FieldElement field, 1040 FieldElement field,
1041 AssignmentOperator operator, 1041 AssignmentOperator operator,
1042 Node rhs, 1042 Node rhs,
1043 A arg) { 1043 A arg) {
1044 return bulkHandleCompound(node); 1044 return bulkHandleCompound(node, arg);
1045 } 1045 }
1046 1046
1047 @override 1047 @override
1048 R visitSuperGetterSetterCompound( 1048 R visitSuperGetterSetterCompound(
1049 Send node, 1049 Send node,
1050 FunctionElement getter, 1050 FunctionElement getter,
1051 FunctionElement setter, 1051 FunctionElement setter,
1052 AssignmentOperator operator, 1052 AssignmentOperator operator,
1053 Node rhs, 1053 Node rhs,
1054 A arg) { 1054 A arg) {
1055 return bulkHandleCompound(node); 1055 return bulkHandleCompound(node, arg);
1056 } 1056 }
1057 1057
1058 @override 1058 @override
1059 R visitSuperMethodSetterCompound( 1059 R visitSuperMethodSetterCompound(
1060 Send node, 1060 Send node,
1061 FunctionElement method, 1061 FunctionElement method,
1062 FunctionElement setter, 1062 FunctionElement setter,
1063 AssignmentOperator operator, 1063 AssignmentOperator operator,
1064 Node rhs, 1064 Node rhs,
1065 A arg) { 1065 A arg) {
1066 return bulkHandleCompound(node); 1066 return bulkHandleCompound(node, arg);
1067 } 1067 }
1068 1068
1069 @override 1069 @override
1070 R visitThisPropertyCompound( 1070 R visitThisPropertyCompound(
1071 Send node, 1071 Send node,
1072 AssignmentOperator operator, 1072 AssignmentOperator operator,
1073 Node rhs, 1073 Node rhs,
1074 Selector getterSelector, 1074 Selector getterSelector,
1075 Selector setterSelector, 1075 Selector setterSelector,
1076 A arg) { 1076 A arg) {
1077 return bulkHandleCompound(node); 1077 return bulkHandleCompound(node, arg);
1078 } 1078 }
1079 1079
1080 @override 1080 @override
1081 R visitTopLevelFieldCompound( 1081 R visitTopLevelFieldCompound(
1082 Send node, 1082 Send node,
1083 FieldElement field, 1083 FieldElement field,
1084 AssignmentOperator operator, 1084 AssignmentOperator operator,
1085 Node rhs, 1085 Node rhs,
1086 A arg) { 1086 A arg) {
1087 return bulkHandleCompound(node); 1087 return bulkHandleCompound(node, arg);
1088 } 1088 }
1089 1089
1090 @override 1090 @override
1091 R visitTopLevelGetterSetterCompound( 1091 R visitTopLevelGetterSetterCompound(
1092 Send node, 1092 Send node,
1093 FunctionElement getter, 1093 FunctionElement getter,
1094 FunctionElement setter, 1094 FunctionElement setter,
1095 AssignmentOperator operator, 1095 AssignmentOperator operator,
1096 Node rhs, 1096 Node rhs,
1097 A arg) { 1097 A arg) {
1098 return bulkHandleCompound(node); 1098 return bulkHandleCompound(node, arg);
1099 } 1099 }
1100 1100
1101 @override 1101 @override
1102 R visitTopLevelMethodSetterCompound( 1102 R visitTopLevelMethodSetterCompound(
1103 Send node, 1103 Send node,
1104 FunctionElement method, 1104 FunctionElement method,
1105 FunctionElement setter, 1105 FunctionElement setter,
1106 AssignmentOperator operator, 1106 AssignmentOperator operator,
1107 Node rhs, 1107 Node rhs,
1108 A arg) { 1108 A arg) {
1109 return bulkHandleCompound(node); 1109 return bulkHandleCompound(node, arg);
1110 } 1110 }
1111 } 1111 }
1112 1112
1113 /// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by 1113 /// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by
1114 /// delegating to a bulk handler. 1114 /// delegating to a bulk handler.
1115 /// 1115 ///
1116 /// Use this mixin to provide a trivial implementation for all `visitXInvoke` 1116 /// Use this mixin to provide a trivial implementation for all `visitXInvoke`
1117 /// methods. 1117 /// methods.
1118 abstract class InvokeBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1118 abstract class InvokeBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1119 R bulkHandleNode(Node node, String message); 1119 R bulkHandleNode(Node node, String message, A arg);
1120 1120
1121 R bulkHandleInvoke(Send node) { 1121 R bulkHandleInvoke(Send node, A arg) {
1122 return bulkHandleNode(node, "Invocation `$node` unhandled."); 1122 return bulkHandleNode(node, "Invocation `$node` unhandled.", arg);
1123 } 1123 }
1124 1124
1125 @override 1125 @override
1126 R visitClassTypeLiteralInvoke( 1126 R visitClassTypeLiteralInvoke(
1127 Send node, 1127 Send node,
1128 TypeConstantExpression constant, 1128 TypeConstantExpression constant,
1129 NodeList arguments, 1129 NodeList arguments,
1130 Selector selector, 1130 Selector selector,
1131 A arg) { 1131 A arg) {
1132 return bulkHandleInvoke(node); 1132 return bulkHandleInvoke(node, arg);
1133 } 1133 }
1134 1134
1135 @override 1135 @override
1136 R visitDynamicPropertyInvoke( 1136 R visitDynamicPropertyInvoke(
1137 Send node, 1137 Send node,
1138 Node receiver, 1138 Node receiver,
1139 NodeList arguments, 1139 NodeList arguments,
1140 Selector selector, 1140 Selector selector,
1141 A arg) { 1141 A arg) {
1142 return bulkHandleInvoke(node); 1142 return bulkHandleInvoke(node, arg);
1143 } 1143 }
1144 1144
1145 @override 1145 @override
1146 R visitDynamicTypeLiteralInvoke( 1146 R visitDynamicTypeLiteralInvoke(
1147 Send node, 1147 Send node,
1148 TypeConstantExpression constant, 1148 TypeConstantExpression constant,
1149 NodeList arguments, 1149 NodeList arguments,
1150 Selector selector, 1150 Selector selector,
1151 A arg) { 1151 A arg) {
1152 return bulkHandleInvoke(node); 1152 return bulkHandleInvoke(node, arg);
1153 } 1153 }
1154 1154
1155 @override 1155 @override
1156 R visitExpressionInvoke( 1156 R visitExpressionInvoke(
1157 Send node, 1157 Send node,
1158 Node expression, 1158 Node expression,
1159 NodeList arguments, 1159 NodeList arguments,
1160 Selector selector, 1160 Selector selector,
1161 A arg) { 1161 A arg) {
1162 return bulkHandleInvoke(node); 1162 return bulkHandleInvoke(node, arg);
1163 } 1163 }
1164 1164
1165 @override 1165 @override
1166 R visitLocalFunctionInvoke( 1166 R visitLocalFunctionInvoke(
1167 Send node, 1167 Send node,
1168 LocalFunctionElement function, 1168 LocalFunctionElement function,
1169 NodeList arguments, 1169 NodeList arguments,
1170 Selector selector, 1170 Selector selector,
1171 A arg) { 1171 A arg) {
1172 return bulkHandleInvoke(node); 1172 return bulkHandleInvoke(node, arg);
1173 } 1173 }
1174 1174
1175 @override 1175 @override
1176 R visitLocalVariableInvoke( 1176 R visitLocalVariableInvoke(
1177 Send node, 1177 Send node,
1178 LocalVariableElement variable, 1178 LocalVariableElement variable,
1179 NodeList arguments, 1179 NodeList arguments,
1180 Selector selector, 1180 Selector selector,
1181 A arg) { 1181 A arg) {
1182 return bulkHandleInvoke(node); 1182 return bulkHandleInvoke(node, arg);
1183 } 1183 }
1184 1184
1185 @override 1185 @override
1186 R visitParameterInvoke( 1186 R visitParameterInvoke(
1187 Send node, 1187 Send node,
1188 ParameterElement parameter, 1188 ParameterElement parameter,
1189 NodeList arguments, 1189 NodeList arguments,
1190 Selector selector, 1190 Selector selector,
1191 A arg) { 1191 A arg) {
1192 return bulkHandleInvoke(node); 1192 return bulkHandleInvoke(node, arg);
1193 } 1193 }
1194 1194
1195 @override 1195 @override
1196 R visitStaticFieldInvoke( 1196 R visitStaticFieldInvoke(
1197 Send node, 1197 Send node,
1198 FieldElement field, 1198 FieldElement field,
1199 NodeList arguments, 1199 NodeList arguments,
1200 Selector selector, 1200 Selector selector,
1201 A arg) { 1201 A arg) {
1202 return bulkHandleInvoke(node); 1202 return bulkHandleInvoke(node, arg);
1203 } 1203 }
1204 1204
1205 @override 1205 @override
1206 R visitStaticFunctionInvoke( 1206 R visitStaticFunctionInvoke(
1207 Send node, 1207 Send node,
1208 MethodElement function, 1208 MethodElement function,
1209 NodeList arguments, 1209 NodeList arguments,
1210 Selector selector, 1210 Selector selector,
1211 A arg) { 1211 A arg) {
1212 return bulkHandleInvoke(node); 1212 return bulkHandleInvoke(node, arg);
1213 } 1213 }
1214 1214
1215 @override 1215 @override
1216 R visitStaticGetterInvoke( 1216 R visitStaticGetterInvoke(
1217 Send node, 1217 Send node,
1218 FunctionElement getter, 1218 FunctionElement getter,
1219 NodeList arguments, 1219 NodeList arguments,
1220 Selector selector, 1220 Selector selector,
1221 A arg) { 1221 A arg) {
1222 return bulkHandleInvoke(node); 1222 return bulkHandleInvoke(node, arg);
1223 } 1223 }
1224 1224
1225 @override 1225 @override
1226 R visitSuperFieldInvoke( 1226 R visitSuperFieldInvoke(
1227 Send node, 1227 Send node,
1228 FieldElement field, 1228 FieldElement field,
1229 NodeList arguments, 1229 NodeList arguments,
1230 Selector selector, 1230 Selector selector,
1231 A arg) { 1231 A arg) {
1232 return bulkHandleInvoke(node); 1232 return bulkHandleInvoke(node, arg);
1233 } 1233 }
1234 1234
1235 @override 1235 @override
1236 R visitSuperGetterInvoke( 1236 R visitSuperGetterInvoke(
1237 Send node, 1237 Send node,
1238 FunctionElement getter, 1238 FunctionElement getter,
1239 NodeList arguments, 1239 NodeList arguments,
1240 Selector selector, 1240 Selector selector,
1241 A arg) { 1241 A arg) {
1242 return bulkHandleInvoke(node); 1242 return bulkHandleInvoke(node, arg);
1243 } 1243 }
1244 1244
1245 @override 1245 @override
1246 R visitSuperMethodInvoke( 1246 R visitSuperMethodInvoke(
1247 Send node, 1247 Send node,
1248 MethodElement method, 1248 MethodElement method,
1249 NodeList arguments, 1249 NodeList arguments,
1250 Selector selector, 1250 Selector selector,
1251 A arg) { 1251 A arg) {
1252 return bulkHandleInvoke(node); 1252 return bulkHandleInvoke(node, arg);
1253 } 1253 }
1254 1254
1255 @override 1255 @override
1256 R visitThisInvoke( 1256 R visitThisInvoke(
1257 Send node, 1257 Send node,
1258 NodeList arguments, 1258 NodeList arguments,
1259 Selector selector, 1259 Selector selector,
1260 A arg) { 1260 A arg) {
1261 return bulkHandleInvoke(node); 1261 return bulkHandleInvoke(node, arg);
1262 } 1262 }
1263 1263
1264 @override 1264 @override
1265 R visitThisPropertyInvoke( 1265 R visitThisPropertyInvoke(
1266 Send node, 1266 Send node,
1267 NodeList arguments, 1267 NodeList arguments,
1268 Selector selector, 1268 Selector selector,
1269 A arg) { 1269 A arg) {
1270 return bulkHandleInvoke(node); 1270 return bulkHandleInvoke(node, arg);
1271 } 1271 }
1272 1272
1273 @override 1273 @override
1274 R visitTopLevelFieldInvoke( 1274 R visitTopLevelFieldInvoke(
1275 Send node, 1275 Send node,
1276 FieldElement field, 1276 FieldElement field,
1277 NodeList arguments, 1277 NodeList arguments,
1278 Selector selector, 1278 Selector selector,
1279 A arg) { 1279 A arg) {
1280 return bulkHandleInvoke(node); 1280 return bulkHandleInvoke(node, arg);
1281 } 1281 }
1282 1282
1283 @override 1283 @override
1284 R visitTopLevelFunctionInvoke( 1284 R visitTopLevelFunctionInvoke(
1285 Send node, 1285 Send node,
1286 MethodElement function, 1286 MethodElement function,
1287 NodeList arguments, 1287 NodeList arguments,
1288 Selector selector, 1288 Selector selector,
1289 A arg) { 1289 A arg) {
1290 return bulkHandleInvoke(node); 1290 return bulkHandleInvoke(node, arg);
1291 } 1291 }
1292 1292
1293 @override 1293 @override
1294 R visitTopLevelGetterInvoke( 1294 R visitTopLevelGetterInvoke(
1295 Send node, 1295 Send node,
1296 FunctionElement getter, 1296 FunctionElement getter,
1297 NodeList arguments, 1297 NodeList arguments,
1298 Selector selector, 1298 Selector selector,
1299 A arg) { 1299 A arg) {
1300 return bulkHandleInvoke(node); 1300 return bulkHandleInvoke(node, arg);
1301 } 1301 }
1302 1302
1303 @override 1303 @override
1304 R visitTypeVariableTypeLiteralInvoke( 1304 R visitTypeVariableTypeLiteralInvoke(
1305 Send node, 1305 Send node,
1306 TypeVariableElement element, 1306 TypeVariableElement element,
1307 NodeList arguments, 1307 NodeList arguments,
1308 Selector selector, 1308 Selector selector,
1309 A arg) { 1309 A arg) {
1310 return bulkHandleInvoke(node); 1310 return bulkHandleInvoke(node, arg);
1311 } 1311 }
1312 1312
1313 @override 1313 @override
1314 R visitTypedefTypeLiteralInvoke( 1314 R visitTypedefTypeLiteralInvoke(
1315 Send node, 1315 Send node,
1316 TypeConstantExpression constant, 1316 TypeConstantExpression constant,
1317 NodeList arguments, 1317 NodeList arguments,
1318 Selector selector, 1318 Selector selector,
1319 A arg) { 1319 A arg) {
1320 return bulkHandleInvoke(node); 1320 return bulkHandleInvoke(node, arg);
1321 } 1321 }
1322 1322
1323 @override 1323 @override
1324 R visitConstantInvoke( 1324 R visitConstantInvoke(
1325 Send node, 1325 Send node,
1326 ConstantExpression constant, 1326 ConstantExpression constant,
1327 NodeList arguments, 1327 NodeList arguments,
1328 Selector selector, 1328 Selector selector,
1329 A arg) { 1329 A arg) {
1330 return bulkHandleInvoke(node); 1330 return bulkHandleInvoke(node, arg);
1331 } 1331 }
1332 } 1332 }
1333 1333
1334 /// Mixin that implements all `visitXGet` methods of [SemanticSendVisitor] by 1334 /// Mixin that implements all `visitXGet` methods of [SemanticSendVisitor] by
1335 /// delegating to a bulk handler. 1335 /// delegating to a bulk handler.
1336 /// 1336 ///
1337 /// Use this mixin to provide a trivial implementation for all `visitXGet` 1337 /// Use this mixin to provide a trivial implementation for all `visitXGet`
1338 /// methods. 1338 /// methods.
1339 abstract class GetBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1339 abstract class GetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1340 R bulkHandleNode(Node node, String message); 1340 R bulkHandleNode(Node node, String message, A arg);
1341 1341
1342 R bulkHandleGet(Node node) { 1342 R bulkHandleGet(Node node, A arg) {
1343 return bulkHandleNode(node, "Read `$node` unhandled."); 1343 return bulkHandleNode(node, "Read `$node` unhandled.", arg);
1344 } 1344 }
1345 1345
1346 @override 1346 @override
1347 R visitClassTypeLiteralGet( 1347 R visitClassTypeLiteralGet(
1348 Send node, 1348 Send node,
1349 TypeConstantExpression constant, 1349 TypeConstantExpression constant,
1350 A arg) { 1350 A arg) {
1351 return bulkHandleGet(node); 1351 return bulkHandleGet(node, arg);
1352 } 1352 }
1353 1353
1354 @override 1354 @override
1355 R visitDynamicPropertyGet( 1355 R visitDynamicPropertyGet(
1356 Send node, 1356 Send node,
1357 Node receiver, 1357 Node receiver,
1358 Selector selector, 1358 Selector selector,
1359 A arg) { 1359 A arg) {
1360 return bulkHandleGet(node); 1360 return bulkHandleGet(node, arg);
1361 } 1361 }
1362 1362
1363 @override 1363 @override
1364 R visitDynamicTypeLiteralGet( 1364 R visitDynamicTypeLiteralGet(
1365 Send node, 1365 Send node,
1366 TypeConstantExpression constant, 1366 TypeConstantExpression constant,
1367 A arg) { 1367 A arg) {
1368 return bulkHandleGet(node); 1368 return bulkHandleGet(node, arg);
1369 } 1369 }
1370 1370
1371 @override 1371 @override
1372 R visitLocalFunctionGet( 1372 R visitLocalFunctionGet(
1373 Send node, 1373 Send node,
1374 LocalFunctionElement function, 1374 LocalFunctionElement function,
1375 A arg) { 1375 A arg) {
1376 return bulkHandleGet(node); 1376 return bulkHandleGet(node, arg);
1377 } 1377 }
1378 1378
1379 @override 1379 @override
1380 R visitLocalVariableGet( 1380 R visitLocalVariableGet(
1381 Send node, 1381 Send node,
1382 LocalVariableElement variable, 1382 LocalVariableElement variable,
1383 A arg) { 1383 A arg) {
1384 return bulkHandleGet(node); 1384 return bulkHandleGet(node, arg);
1385 } 1385 }
1386 1386
1387 @override 1387 @override
1388 R visitParameterGet( 1388 R visitParameterGet(
1389 Send node, 1389 Send node,
1390 ParameterElement parameter, 1390 ParameterElement parameter,
1391 A arg) { 1391 A arg) {
1392 return bulkHandleGet(node); 1392 return bulkHandleGet(node, arg);
1393 } 1393 }
1394 1394
1395 @override 1395 @override
1396 R visitStaticFieldGet( 1396 R visitStaticFieldGet(
1397 Send node, 1397 Send node,
1398 FieldElement field, 1398 FieldElement field,
1399 A arg) { 1399 A arg) {
1400 return bulkHandleGet(node); 1400 return bulkHandleGet(node, arg);
1401 } 1401 }
1402 1402
1403 @override 1403 @override
1404 R visitStaticFunctionGet( 1404 R visitStaticFunctionGet(
1405 Send node, 1405 Send node,
1406 MethodElement function, 1406 MethodElement function,
1407 A arg) { 1407 A arg) {
1408 return bulkHandleGet(node); 1408 return bulkHandleGet(node, arg);
1409 } 1409 }
1410 1410
1411 @override 1411 @override
1412 R visitStaticGetterGet( 1412 R visitStaticGetterGet(
1413 Send node, 1413 Send node,
1414 FunctionElement getter, 1414 FunctionElement getter,
1415 A arg) { 1415 A arg) {
1416 return bulkHandleGet(node); 1416 return bulkHandleGet(node, arg);
1417 } 1417 }
1418 1418
1419 @override 1419 @override
1420 R visitSuperFieldGet( 1420 R visitSuperFieldGet(
1421 Send node, 1421 Send node,
1422 FieldElement field, 1422 FieldElement field,
1423 A arg) { 1423 A arg) {
1424 return bulkHandleGet(node); 1424 return bulkHandleGet(node, arg);
1425 } 1425 }
1426 1426
1427 @override 1427 @override
1428 R visitSuperGetterGet( 1428 R visitSuperGetterGet(
1429 Send node, 1429 Send node,
1430 FunctionElement getter, 1430 FunctionElement getter,
1431 A arg) { 1431 A arg) {
1432 return bulkHandleGet(node); 1432 return bulkHandleGet(node, arg);
1433 } 1433 }
1434 1434
1435 @override 1435 @override
1436 R visitSuperMethodGet( 1436 R visitSuperMethodGet(
1437 Send node, 1437 Send node,
1438 MethodElement method, 1438 MethodElement method,
1439 A arg) { 1439 A arg) {
1440 return bulkHandleGet(node); 1440 return bulkHandleGet(node, arg);
1441 } 1441 }
1442 1442
1443 @override 1443 @override
1444 R visitThisGet(Identifier node, A arg) { 1444 R visitThisGet(Identifier node, A arg) {
1445 return bulkHandleGet(node); 1445 return bulkHandleGet(node, arg);
1446 } 1446 }
1447 1447
1448 @override 1448 @override
1449 R visitThisPropertyGet( 1449 R visitThisPropertyGet(
1450 Send node, 1450 Send node,
1451 Selector selector, 1451 Selector selector,
1452 A arg) { 1452 A arg) {
1453 return bulkHandleGet(node); 1453 return bulkHandleGet(node, arg);
1454 } 1454 }
1455 1455
1456 @override 1456 @override
1457 R visitTopLevelFieldGet( 1457 R visitTopLevelFieldGet(
1458 Send node, 1458 Send node,
1459 FieldElement field, 1459 FieldElement field,
1460 A arg) { 1460 A arg) {
1461 return bulkHandleGet(node); 1461 return bulkHandleGet(node, arg);
1462 } 1462 }
1463 1463
1464 @override 1464 @override
1465 R visitTopLevelFunctionGet( 1465 R visitTopLevelFunctionGet(
1466 Send node, 1466 Send node,
1467 MethodElement function, 1467 MethodElement function,
1468 A arg) { 1468 A arg) {
1469 return bulkHandleGet(node); 1469 return bulkHandleGet(node, arg);
1470 } 1470 }
1471 1471
1472 @override 1472 @override
1473 R visitTopLevelGetterGet( 1473 R visitTopLevelGetterGet(
1474 Send node, 1474 Send node,
1475 FunctionElement getter, 1475 FunctionElement getter,
1476 A arg) { 1476 A arg) {
1477 return bulkHandleGet(node); 1477 return bulkHandleGet(node, arg);
1478 } 1478 }
1479 1479
1480 @override 1480 @override
1481 R visitTypeVariableTypeLiteralGet( 1481 R visitTypeVariableTypeLiteralGet(
1482 Send node, 1482 Send node,
1483 TypeVariableElement element, 1483 TypeVariableElement element,
1484 A arg) { 1484 A arg) {
1485 return bulkHandleGet(node); 1485 return bulkHandleGet(node, arg);
1486 } 1486 }
1487 1487
1488 @override 1488 @override
1489 R visitTypedefTypeLiteralGet( 1489 R visitTypedefTypeLiteralGet(
1490 Send node, 1490 Send node,
1491 TypeConstantExpression constant, 1491 TypeConstantExpression constant,
1492 A arg) { 1492 A arg) {
1493 return bulkHandleGet(node); 1493 return bulkHandleGet(node, arg);
1494 } 1494 }
1495 1495
1496 @override 1496 @override
1497 R visitConstantGet( 1497 R visitConstantGet(
1498 Send node, 1498 Send node,
1499 TypeConstantExpression constant, 1499 TypeConstantExpression constant,
1500 A arg) { 1500 A arg) {
1501 return bulkHandleGet(node); 1501 return bulkHandleGet(node, arg);
1502 } 1502 }
1503 } 1503 }
1504 1504
1505 /// Mixin that implements all `visitXSet` methods of [SemanticSendVisitor] by 1505 /// Mixin that implements all `visitXSet` methods of [SemanticSendVisitor] by
1506 /// delegating to a bulk handler. 1506 /// delegating to a bulk handler.
1507 /// 1507 ///
1508 /// Use this mixin to provide a trivial implementation for all `visitXSet` 1508 /// Use this mixin to provide a trivial implementation for all `visitXSet`
1509 /// methods. 1509 /// methods.
1510 abstract class SetBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1510 abstract class SetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1511 R bulkHandleNode(Node node, String message); 1511 R bulkHandleNode(Node node, String message, A arg);
1512 1512
1513 R bulkHandleSet(Send node) { 1513 R bulkHandleSet(Send node, A arg) {
1514 return bulkHandleNode(node, "Assignment `$node` unhandled."); 1514 return bulkHandleNode(node, "Assignment `$node` unhandled.", arg);
1515 } 1515 }
1516 1516
1517 @override 1517 @override
1518 R visitDynamicPropertySet( 1518 R visitDynamicPropertySet(
1519 SendSet node, 1519 SendSet node,
1520 Node receiver, 1520 Node receiver,
1521 Selector selector, 1521 Selector selector,
1522 Node rhs, 1522 Node rhs,
1523 A arg) { 1523 A arg) {
1524 return bulkHandleSet(node); 1524 return bulkHandleSet(node, arg);
1525 } 1525 }
1526 1526
1527 @override 1527 @override
1528 R visitLocalVariableSet( 1528 R visitLocalVariableSet(
1529 SendSet node, 1529 SendSet node,
1530 LocalVariableElement variable, 1530 LocalVariableElement variable,
1531 Node rhs, 1531 Node rhs,
1532 A arg) { 1532 A arg) {
1533 return bulkHandleSet(node); 1533 return bulkHandleSet(node, arg);
1534 } 1534 }
1535 1535
1536 @override 1536 @override
1537 R visitParameterSet( 1537 R visitParameterSet(
1538 SendSet node, 1538 SendSet node,
1539 ParameterElement parameter, 1539 ParameterElement parameter,
1540 Node rhs, 1540 Node rhs,
1541 A arg) { 1541 A arg) {
1542 return bulkHandleSet(node); 1542 return bulkHandleSet(node, arg);
1543 } 1543 }
1544 1544
1545 @override 1545 @override
1546 R visitStaticFieldSet( 1546 R visitStaticFieldSet(
1547 SendSet node, 1547 SendSet node,
1548 FieldElement field, 1548 FieldElement field,
1549 Node rhs, 1549 Node rhs,
1550 A arg) { 1550 A arg) {
1551 return bulkHandleSet(node); 1551 return bulkHandleSet(node, arg);
1552 } 1552 }
1553 1553
1554 @override 1554 @override
1555 R visitStaticSetterSet( 1555 R visitStaticSetterSet(
1556 SendSet node, 1556 SendSet node,
1557 FunctionElement setter, 1557 FunctionElement setter,
1558 Node rhs, 1558 Node rhs,
1559 A arg) { 1559 A arg) {
1560 return bulkHandleSet(node); 1560 return bulkHandleSet(node, arg);
1561 } 1561 }
1562 1562
1563 @override 1563 @override
1564 R visitSuperFieldSet( 1564 R visitSuperFieldSet(
1565 SendSet node, 1565 SendSet node,
1566 FieldElement field, 1566 FieldElement field,
1567 Node rhs, 1567 Node rhs,
1568 A arg) { 1568 A arg) {
1569 return bulkHandleSet(node); 1569 return bulkHandleSet(node, arg);
1570 } 1570 }
1571 1571
1572 @override 1572 @override
1573 R visitSuperSetterSet( 1573 R visitSuperSetterSet(
1574 SendSet node, 1574 SendSet node,
1575 FunctionElement setter, 1575 FunctionElement setter,
1576 Node rhs, 1576 Node rhs,
1577 A arg) { 1577 A arg) {
1578 return bulkHandleSet(node); 1578 return bulkHandleSet(node, arg);
1579 } 1579 }
1580 1580
1581 @override 1581 @override
1582 R visitThisPropertySet( 1582 R visitThisPropertySet(
1583 SendSet node, 1583 SendSet node,
1584 Selector selector, 1584 Selector selector,
1585 Node rhs, 1585 Node rhs,
1586 A arg) { 1586 A arg) {
1587 return bulkHandleSet(node); 1587 return bulkHandleSet(node, arg);
1588 } 1588 }
1589 1589
1590 @override 1590 @override
1591 R visitTopLevelFieldSet( 1591 R visitTopLevelFieldSet(
1592 SendSet node, 1592 SendSet node,
1593 FieldElement field, 1593 FieldElement field,
1594 Node rhs, 1594 Node rhs,
1595 A arg) { 1595 A arg) {
1596 return bulkHandleSet(node); 1596 return bulkHandleSet(node, arg);
1597 } 1597 }
1598 1598
1599 @override 1599 @override
1600 R visitTopLevelSetterSet( 1600 R visitTopLevelSetterSet(
1601 SendSet node, 1601 SendSet node,
1602 FunctionElement setter, 1602 FunctionElement setter,
1603 Node rhs, 1603 Node rhs,
1604 A arg) { 1604 A arg) {
1605 return bulkHandleSet(node); 1605 return bulkHandleSet(node, arg);
1606 } 1606 }
1607 } 1607 }
1608 1608
1609 /// Mixin that implements all `visitXIndexSet` methods of [SemanticSendVisitor] 1609 /// Mixin that implements all `visitXIndexSet` methods of [SemanticSendVisitor]
1610 /// by delegating to a bulk handler. 1610 /// by delegating to a bulk handler.
1611 /// 1611 ///
1612 /// Use this mixin to provide a trivial implementation for all `visitXIndexSet` 1612 /// Use this mixin to provide a trivial implementation for all `visitXIndexSet`
1613 /// methods. 1613 /// methods.
1614 abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1614 abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1615 R bulkHandleNode(Node node, String message); 1615 R bulkHandleNode(Node node, String message, A arg);
1616 1616
1617 R bulkHandleIndexSet(Send node) { 1617 R bulkHandleIndexSet(Send node, A arg) {
1618 return bulkHandleNode(node, "Index set expression `$node` unhandled."); 1618 return bulkHandleNode(node, "Index set expression `$node` unhandled.", arg);
1619 } 1619 }
1620 1620
1621 @override 1621 @override
1622 R visitCompoundIndexSet( 1622 R visitCompoundIndexSet(
1623 SendSet node, 1623 SendSet node,
1624 Node receiver, 1624 Node receiver,
1625 Node index, 1625 Node index,
1626 AssignmentOperator operator, 1626 AssignmentOperator operator,
1627 Node rhs, 1627 Node rhs,
1628 A arg) { 1628 A arg) {
1629 return bulkHandleIndexSet(node); 1629 return bulkHandleIndexSet(node, arg);
1630 } 1630 }
1631 1631
1632 @override 1632 @override
1633 R visitIndexSet( 1633 R visitIndexSet(
1634 SendSet node, 1634 SendSet node,
1635 Node receiver, 1635 Node receiver,
1636 Node index, 1636 Node index,
1637 Node rhs, 1637 Node rhs,
1638 A arg) { 1638 A arg) {
1639 return bulkHandleIndexSet(node); 1639 return bulkHandleIndexSet(node, arg);
1640 } 1640 }
1641 1641
1642 @override 1642 @override
1643 R visitSuperCompoundIndexSet( 1643 R visitSuperCompoundIndexSet(
1644 SendSet node, 1644 SendSet node,
1645 FunctionElement getter, 1645 FunctionElement getter,
1646 FunctionElement setter, 1646 FunctionElement setter,
1647 Node index, 1647 Node index,
1648 AssignmentOperator operator, 1648 AssignmentOperator operator,
1649 Node rhs, 1649 Node rhs,
1650 A arg) { 1650 A arg) {
1651 return bulkHandleIndexSet(node); 1651 return bulkHandleIndexSet(node, arg);
1652 } 1652 }
1653 1653
1654 @override 1654 @override
1655 R visitSuperIndexSet( 1655 R visitSuperIndexSet(
1656 SendSet node, 1656 SendSet node,
1657 FunctionElement function, 1657 FunctionElement function,
1658 Node index, 1658 Node index,
1659 Node rhs, 1659 Node rhs,
1660 A arg) { 1660 A arg) {
1661 return bulkHandleIndexSet(node); 1661 return bulkHandleIndexSet(node, arg);
1662 } 1662 }
1663 } 1663 }
1664 1664
1665 /// Mixin that implements all binary visitor methods in [SemanticSendVisitor] by 1665 /// Mixin that implements all binary visitor methods in [SemanticSendVisitor] by
1666 /// delegating to a bulk handler. 1666 /// delegating to a bulk handler.
1667 /// 1667 ///
1668 /// Use this mixin to provide a trivial implementation for all binary visitor 1668 /// Use this mixin to provide a trivial implementation for all binary visitor
1669 /// methods. 1669 /// methods.
1670 abstract class BinaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1670 abstract class BinaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1671 R bulkHandleNode(Node node, String message); 1671 R bulkHandleNode(Node node, String message, A arg);
1672 1672
1673 R bulkHandleBinary(Send node) { 1673 R bulkHandleBinary(Send node, A arg) {
1674 return bulkHandleNode(node, "Binary expression `$node` unhandled."); 1674 return bulkHandleNode(node, "Binary expression `$node` unhandled.", arg);
1675 } 1675 }
1676 1676
1677 @override 1677 @override
1678 R visitBinary( 1678 R visitBinary(
1679 Send node, 1679 Send node,
1680 Node left, 1680 Node left,
1681 BinaryOperator operator, 1681 BinaryOperator operator,
1682 Node right, 1682 Node right,
1683 A arg) { 1683 A arg) {
1684 return bulkHandleBinary(node); 1684 return bulkHandleBinary(node, arg);
1685 } 1685 }
1686 1686
1687 @override 1687 @override
1688 R visitEquals( 1688 R visitEquals(
1689 Send node, 1689 Send node,
1690 Node left, 1690 Node left,
1691 Node right, 1691 Node right,
1692 A arg) { 1692 A arg) {
1693 return bulkHandleBinary(node); 1693 return bulkHandleBinary(node, arg);
1694 } 1694 }
1695 1695
1696 @override 1696 @override
1697 R visitNotEquals( 1697 R visitNotEquals(
1698 Send node, 1698 Send node,
1699 Node left, 1699 Node left,
1700 Node right, 1700 Node right,
1701 A arg) { 1701 A arg) {
1702 return bulkHandleBinary(node); 1702 return bulkHandleBinary(node, arg);
1703 } 1703 }
1704 1704
1705 @override 1705 @override
1706 R visitIndex( 1706 R visitIndex(
1707 Send node, 1707 Send node,
1708 Node receiver, 1708 Node receiver,
1709 Node index, 1709 Node index,
1710 A arg) { 1710 A arg) {
1711 return bulkHandleBinary(node); 1711 return bulkHandleBinary(node, arg);
1712 } 1712 }
1713 1713
1714 @override 1714 @override
1715 R visitSuperBinary( 1715 R visitSuperBinary(
1716 Send node, 1716 Send node,
1717 FunctionElement function, 1717 FunctionElement function,
1718 BinaryOperator operator, 1718 BinaryOperator operator,
1719 Node argument, 1719 Node argument,
1720 A arg) { 1720 A arg) {
1721 return bulkHandleBinary(node); 1721 return bulkHandleBinary(node, arg);
1722 } 1722 }
1723 1723
1724 @override 1724 @override
1725 R visitSuperEquals( 1725 R visitSuperEquals(
1726 Send node, 1726 Send node,
1727 FunctionElement function, 1727 FunctionElement function,
1728 Node argument, 1728 Node argument,
1729 A arg) { 1729 A arg) {
1730 return bulkHandleBinary(node); 1730 return bulkHandleBinary(node, arg);
1731 } 1731 }
1732 1732
1733 @override 1733 @override
1734 R visitSuperNotEquals( 1734 R visitSuperNotEquals(
1735 Send node, 1735 Send node,
1736 FunctionElement function, 1736 FunctionElement function,
1737 Node argument, 1737 Node argument,
1738 A arg) { 1738 A arg) {
1739 return bulkHandleBinary(node); 1739 return bulkHandleBinary(node, arg);
1740 } 1740 }
1741 1741
1742 @override 1742 @override
1743 R visitSuperIndex( 1743 R visitSuperIndex(
1744 Send node, 1744 Send node,
1745 FunctionElement function, 1745 FunctionElement function,
1746 Node index, 1746 Node index,
1747 A arg) { 1747 A arg) {
1748 return bulkHandleBinary(node); 1748 return bulkHandleBinary(node, arg);
1749 } 1749 }
1750 } 1750 }
1751 1751
1752 /// Mixin that implements all unary visitor methods in [SemanticSendVisitor] by 1752 /// Mixin that implements all unary visitor methods in [SemanticSendVisitor] by
1753 /// delegating to a bulk handler. 1753 /// delegating to a bulk handler.
1754 /// 1754 ///
1755 /// Use this mixin to provide a trivial implementation for all unary visitor 1755 /// Use this mixin to provide a trivial implementation for all unary visitor
1756 /// methods. 1756 /// methods.
1757 abstract class UnaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1757 abstract class UnaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1758 R bulkHandleNode(Node node, String message); 1758 R bulkHandleNode(Node node, String message, A arg);
1759 1759
1760 R bulkHandleUnary(Send node) { 1760 R bulkHandleUnary(Send node, A arg) {
1761 return bulkHandleNode(node, "Unary expression `$node` unhandled."); 1761 return bulkHandleNode(node, "Unary expression `$node` unhandled.", arg);
1762 } 1762 }
1763 1763
1764 @override 1764 @override
1765 R visitNot( 1765 R visitNot(
1766 Send node, 1766 Send node,
1767 Node expression, 1767 Node expression,
1768 A arg) { 1768 A arg) {
1769 return bulkHandleUnary(node); 1769 return bulkHandleUnary(node, arg);
1770 } 1770 }
1771 1771
1772 @override 1772 @override
1773 R visitSuperUnary(Send node, UnaryOperator operator, 1773 R visitSuperUnary(Send node, UnaryOperator operator,
1774 FunctionElement function, A arg) { 1774 FunctionElement function, A arg) {
1775 return bulkHandleUnary(node); 1775 return bulkHandleUnary(node, arg);
1776 } 1776 }
1777 1777
1778 @override 1778 @override
1779 R visitUnary( 1779 R visitUnary(
1780 Send node, 1780 Send node,
1781 UnaryOperator operator, 1781 UnaryOperator operator,
1782 Node expression, 1782 Node expression,
1783 A arg) { 1783 A arg) {
1784 return bulkHandleUnary(node); 1784 return bulkHandleUnary(node, arg);
1785 } 1785 }
1786 } 1786 }
1787 1787
1788 /// Mixin that implements all purely structural visitor methods in 1788 /// Mixin that implements all purely structural visitor methods in
1789 /// [SemanticSendVisitor] by delegating to a bulk handler. 1789 /// [SemanticSendVisitor] by delegating to a bulk handler.
1790 /// 1790 ///
1791 /// Use this mixin to provide a trivial implementation for all purely structural 1791 /// Use this mixin to provide a trivial implementation for all purely structural
1792 /// visitor methods. 1792 /// visitor methods.
1793 abstract class BaseBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1793 abstract class BaseBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1794 R bulkHandleNode(Node node, String message); 1794 R bulkHandleNode(Node node, String message, A arg);
1795 1795
1796 @override 1796 @override
1797 R visitAs( 1797 R visitAs(
1798 Send node, 1798 Send node,
1799 Node expression, 1799 Node expression,
1800 DartType type, 1800 DartType type,
1801 A arg) { 1801 A arg) {
1802 return bulkHandleNode(node, 'As cast `$node` unhandled.'); 1802 return bulkHandleNode(node, 'As cast `$node` unhandled.', arg);
1803 } 1803 }
1804 1804
1805 @override 1805 @override
1806 R visitAssert( 1806 R visitAssert(
1807 Send node, 1807 Send node,
1808 Node expression, 1808 Node expression,
1809 A arg) { 1809 A arg) {
1810 return bulkHandleNode(node, 'Assert `$node` unhandled.'); 1810 return bulkHandleNode(node, 'Assert `$node` unhandled.', arg);
1811 } 1811 }
1812 1812
1813 @override 1813 @override
1814 R visitIs( 1814 R visitIs(
1815 Send node, 1815 Send node,
1816 Node expression, 1816 Node expression,
1817 DartType type, 1817 DartType type,
1818 A arg) { 1818 A arg) {
1819 return bulkHandleNode(node, 'Is test `$node` unhandled.'); 1819 return bulkHandleNode(node, 'Is test `$node` unhandled.', arg);
1820 } 1820 }
1821 1821
1822 @override 1822 @override
1823 R visitIsNot( 1823 R visitIsNot(
1824 Send node, 1824 Send node,
1825 Node expression, 1825 Node expression,
1826 DartType type, 1826 DartType type,
1827 A arg) { 1827 A arg) {
1828 return bulkHandleNode(node, 'Is not test `$node` unhandled.'); 1828 return bulkHandleNode(node, 'Is not test `$node` unhandled.', arg);
1829 } 1829 }
1830 1830
1831 @override 1831 @override
1832 R visitLogicalAnd( 1832 R visitLogicalAnd(
1833 Send node, 1833 Send node,
1834 Node left, 1834 Node left,
1835 Node right, 1835 Node right,
1836 A arg) { 1836 A arg) {
1837 return bulkHandleNode(node, 'Lazy and `$node` unhandled.'); 1837 return bulkHandleNode(node, 'Lazy and `$node` unhandled.', arg);
1838 } 1838 }
1839 1839
1840 @override 1840 @override
1841 R visitLogicalOr( 1841 R visitLogicalOr(
1842 Send node, 1842 Send node,
1843 Node left, 1843 Node left,
1844 Node right, 1844 Node right,
1845 A arg) { 1845 A arg) {
1846 return bulkHandleNode(node, 'Lazy or `$node` unhandled.'); 1846 return bulkHandleNode(node, 'Lazy or `$node` unhandled.', arg);
1847 } 1847 }
1848 } 1848 }
1849 1849
1850 /// Mixin that implements all visitor methods for `super` calls in 1850 /// Mixin that implements all visitor methods for `super` calls in
1851 /// [SemanticSendVisitor] by delegating to a bulk handler. 1851 /// [SemanticSendVisitor] by delegating to a bulk handler.
1852 /// 1852 ///
1853 /// Use this mixin to provide a trivial implementation for `super` calls 1853 /// Use this mixin to provide a trivial implementation for `super` calls
1854 /// visitor methods. 1854 /// visitor methods.
1855 abstract class SuperBulkMixin<R, A> implements SemanticSendVisitor<R, A> { 1855 abstract class SuperBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
1856 R bulkHandleNode(Node node, String message); 1856 R bulkHandleNode(Node node, String message, A arg);
1857 1857
1858 R bulkHandleSuper(Send node) { 1858 R bulkHandleSuper(Send node, A arg) {
1859 return bulkHandleNode(node, "Super call `$node` unhandled."); 1859 return bulkHandleNode(node, "Super call `$node` unhandled.", arg);
1860 } 1860 }
1861 1861
1862 @override 1862 @override
1863 R visitSuperBinary( 1863 R visitSuperBinary(
1864 Send node, 1864 Send node,
1865 FunctionElement function, 1865 FunctionElement function,
1866 BinaryOperator operator, 1866 BinaryOperator operator,
1867 Node argument, 1867 Node argument,
1868 A arg) { 1868 A arg) {
1869 return bulkHandleSuper(node); 1869 return bulkHandleSuper(node, arg);
1870 } 1870 }
1871 1871
1872 @override 1872 @override
1873 R visitSuperCompoundIndexSet( 1873 R visitSuperCompoundIndexSet(
1874 SendSet node, 1874 SendSet node,
1875 FunctionElement getter, 1875 FunctionElement getter,
1876 FunctionElement setter, 1876 FunctionElement setter,
1877 Node index, 1877 Node index,
1878 AssignmentOperator operator, 1878 AssignmentOperator operator,
1879 Node rhs, 1879 Node rhs,
1880 A arg) { 1880 A arg) {
1881 return bulkHandleSuper(node); 1881 return bulkHandleSuper(node, arg);
1882 } 1882 }
1883 1883
1884 @override 1884 @override
1885 R visitSuperEquals( 1885 R visitSuperEquals(
1886 Send node, 1886 Send node,
1887 FunctionElement function, 1887 FunctionElement function,
1888 Node argument, 1888 Node argument,
1889 A arg) { 1889 A arg) {
1890 return bulkHandleSuper(node); 1890 return bulkHandleSuper(node, arg);
1891 } 1891 }
1892 1892
1893 @override 1893 @override
1894 R visitSuperFieldCompound( 1894 R visitSuperFieldCompound(
1895 Send node, 1895 Send node,
1896 FieldElement field, 1896 FieldElement field,
1897 AssignmentOperator operator, 1897 AssignmentOperator operator,
1898 Node rhs, 1898 Node rhs,
1899 A arg) { 1899 A arg) {
1900 return bulkHandleSuper(node); 1900 return bulkHandleSuper(node, arg);
1901 } 1901 }
1902 1902
1903 @override 1903 @override
1904 R visitSuperFieldFieldPostfix( 1904 R visitSuperFieldFieldPostfix(
1905 Send node, 1905 Send node,
1906 FieldElement readField, 1906 FieldElement readField,
1907 FieldElement writtenField, 1907 FieldElement writtenField,
1908 IncDecOperator operator, 1908 IncDecOperator operator,
1909 A arg) { 1909 A arg) {
1910 return bulkHandleSuper(node); 1910 return bulkHandleSuper(node, arg);
1911 } 1911 }
1912 1912
1913 @override 1913 @override
1914 R visitSuperFieldFieldPrefix( 1914 R visitSuperFieldFieldPrefix(
1915 Send node, 1915 Send node,
1916 FieldElement readField, 1916 FieldElement readField,
1917 FieldElement writtenField, 1917 FieldElement writtenField,
1918 IncDecOperator operator, 1918 IncDecOperator operator,
1919 A arg) { 1919 A arg) {
1920 return bulkHandleSuper(node); 1920 return bulkHandleSuper(node, arg);
1921 } 1921 }
1922 1922
1923 @override 1923 @override
1924 R visitSuperFieldGet( 1924 R visitSuperFieldGet(
1925 Send node, 1925 Send node,
1926 FieldElement field, 1926 FieldElement field,
1927 A arg) { 1927 A arg) {
1928 return bulkHandleSuper(node); 1928 return bulkHandleSuper(node, arg);
1929 } 1929 }
1930 1930
1931 @override 1931 @override
1932 R visitSuperFieldInvoke( 1932 R visitSuperFieldInvoke(
1933 Send node, 1933 Send node,
1934 FieldElement field, 1934 FieldElement field,
1935 NodeList arguments, 1935 NodeList arguments,
1936 Selector selector, 1936 Selector selector,
1937 A arg) { 1937 A arg) {
1938 return bulkHandleSuper(node); 1938 return bulkHandleSuper(node, arg);
1939 } 1939 }
1940 1940
1941 @override 1941 @override
1942 R visitSuperFieldPostfix( 1942 R visitSuperFieldPostfix(
1943 Send node, 1943 Send node,
1944 FieldElement field, 1944 FieldElement field,
1945 IncDecOperator operator, 1945 IncDecOperator operator,
1946 A arg) { 1946 A arg) {
1947 return bulkHandleSuper(node); 1947 return bulkHandleSuper(node, arg);
1948 } 1948 }
1949 1949
1950 @override 1950 @override
1951 R visitSuperFieldPrefix( 1951 R visitSuperFieldPrefix(
1952 Send node, 1952 Send node,
1953 FieldElement field, 1953 FieldElement field,
1954 IncDecOperator operator, 1954 IncDecOperator operator,
1955 A arg) { 1955 A arg) {
1956 return bulkHandleSuper(node); 1956 return bulkHandleSuper(node, arg);
1957 } 1957 }
1958 1958
1959 @override 1959 @override
1960 R visitSuperFieldSet( 1960 R visitSuperFieldSet(
1961 SendSet node, 1961 SendSet node,
1962 FieldElement field, 1962 FieldElement field,
1963 Node rhs, 1963 Node rhs,
1964 A arg) { 1964 A arg) {
1965 return bulkHandleSuper(node); 1965 return bulkHandleSuper(node, arg);
1966 } 1966 }
1967 1967
1968 @override 1968 @override
1969 R visitSuperFieldSetterCompound( 1969 R visitSuperFieldSetterCompound(
1970 Send node, 1970 Send node,
1971 FieldElement field, 1971 FieldElement field,
1972 FunctionElement setter, 1972 FunctionElement setter,
1973 AssignmentOperator operator, 1973 AssignmentOperator operator,
1974 Node rhs, 1974 Node rhs,
1975 A arg) { 1975 A arg) {
1976 return bulkHandleSuper(node); 1976 return bulkHandleSuper(node, arg);
1977 } 1977 }
1978 1978
1979 @override 1979 @override
1980 R visitSuperFieldSetterPostfix( 1980 R visitSuperFieldSetterPostfix(
1981 Send node, 1981 Send node,
1982 FieldElement field, 1982 FieldElement field,
1983 FunctionElement setter, 1983 FunctionElement setter,
1984 IncDecOperator operator, 1984 IncDecOperator operator,
1985 A arg) { 1985 A arg) {
1986 return bulkHandleSuper(node); 1986 return bulkHandleSuper(node, arg);
1987 } 1987 }
1988 1988
1989 @override 1989 @override
1990 R visitSuperFieldSetterPrefix( 1990 R visitSuperFieldSetterPrefix(
1991 Send node, 1991 Send node,
1992 FieldElement field, 1992 FieldElement field,
1993 FunctionElement setter, 1993 FunctionElement setter,
1994 IncDecOperator operator, 1994 IncDecOperator operator,
1995 A arg) { 1995 A arg) {
1996 return bulkHandleSuper(node); 1996 return bulkHandleSuper(node, arg);
1997 } 1997 }
1998 1998
1999 @override 1999 @override
2000 R visitSuperGetterFieldCompound( 2000 R visitSuperGetterFieldCompound(
2001 Send node, 2001 Send node,
2002 FunctionElement getter, 2002 FunctionElement getter,
2003 FieldElement field, 2003 FieldElement field,
2004 AssignmentOperator operator, 2004 AssignmentOperator operator,
2005 Node rhs, 2005 Node rhs,
2006 A arg) { 2006 A arg) {
2007 return bulkHandleSuper(node); 2007 return bulkHandleSuper(node, arg);
2008 } 2008 }
2009 2009
2010 @override 2010 @override
2011 R visitSuperGetterFieldPostfix( 2011 R visitSuperGetterFieldPostfix(
2012 Send node, 2012 Send node,
2013 FunctionElement getter, 2013 FunctionElement getter,
2014 FieldElement field, 2014 FieldElement field,
2015 IncDecOperator operator, 2015 IncDecOperator operator,
2016 A arg) { 2016 A arg) {
2017 return bulkHandleSuper(node); 2017 return bulkHandleSuper(node, arg);
2018 } 2018 }
2019 2019
2020 @override 2020 @override
2021 R visitSuperGetterFieldPrefix( 2021 R visitSuperGetterFieldPrefix(
2022 Send node, 2022 Send node,
2023 FunctionElement getter, 2023 FunctionElement getter,
2024 FieldElement field, 2024 FieldElement field,
2025 IncDecOperator operator, 2025 IncDecOperator operator,
2026 A arg) { 2026 A arg) {
2027 return bulkHandleSuper(node); 2027 return bulkHandleSuper(node, arg);
2028 } 2028 }
2029 2029
2030 @override 2030 @override
2031 R visitSuperGetterGet( 2031 R visitSuperGetterGet(
2032 Send node, 2032 Send node,
2033 FunctionElement getter, 2033 FunctionElement getter,
2034 A arg) { 2034 A arg) {
2035 return bulkHandleSuper(node); 2035 return bulkHandleSuper(node, arg);
2036 } 2036 }
2037 2037
2038 @override 2038 @override
2039 R visitSuperGetterInvoke( 2039 R visitSuperGetterInvoke(
2040 Send node, 2040 Send node,
2041 FunctionElement getter, 2041 FunctionElement getter,
2042 NodeList arguments, 2042 NodeList arguments,
2043 Selector selector, 2043 Selector selector,
2044 A arg) { 2044 A arg) {
2045 return bulkHandleSuper(node); 2045 return bulkHandleSuper(node, arg);
2046 } 2046 }
2047 2047
2048 @override 2048 @override
2049 R visitSuperGetterSetterCompound( 2049 R visitSuperGetterSetterCompound(
2050 Send node, 2050 Send node,
2051 FunctionElement getter, 2051 FunctionElement getter,
2052 FunctionElement setter, 2052 FunctionElement setter,
2053 AssignmentOperator operator, 2053 AssignmentOperator operator,
2054 Node rhs, 2054 Node rhs,
2055 A arg) { 2055 A arg) {
2056 return bulkHandleSuper(node); 2056 return bulkHandleSuper(node, arg);
2057 } 2057 }
2058 2058
2059 @override 2059 @override
2060 R visitSuperGetterSetterPostfix( 2060 R visitSuperGetterSetterPostfix(
2061 Send node, 2061 Send node,
2062 FunctionElement getter, 2062 FunctionElement getter,
2063 FunctionElement setter, 2063 FunctionElement setter,
2064 IncDecOperator operator, 2064 IncDecOperator operator,
2065 A arg) { 2065 A arg) {
2066 return bulkHandleSuper(node); 2066 return bulkHandleSuper(node, arg);
2067 } 2067 }
2068 2068
2069 @override 2069 @override
2070 R visitSuperGetterSetterPrefix( 2070 R visitSuperGetterSetterPrefix(
2071 Send node, 2071 Send node,
2072 FunctionElement getter, 2072 FunctionElement getter,
2073 FunctionElement setter, 2073 FunctionElement setter,
2074 IncDecOperator operator, 2074 IncDecOperator operator,
2075 A arg) { 2075 A arg) {
2076 return bulkHandleSuper(node); 2076 return bulkHandleSuper(node, arg);
2077 } 2077 }
2078 2078
2079 @override 2079 @override
2080 R visitSuperIndexSet( 2080 R visitSuperIndexSet(
2081 SendSet node, 2081 SendSet node,
2082 FunctionElement function, 2082 FunctionElement function,
2083 Node index, 2083 Node index,
2084 Node rhs, 2084 Node rhs,
2085 A arg) { 2085 A arg) {
2086 return bulkHandleSuper(node); 2086 return bulkHandleSuper(node, arg);
2087 } 2087 }
2088 2088
2089 @override 2089 @override
2090 R visitSuperMethodGet( 2090 R visitSuperMethodGet(
2091 Send node, 2091 Send node,
2092 MethodElement method, 2092 MethodElement method,
2093 A arg) { 2093 A arg) {
2094 return bulkHandleSuper(node); 2094 return bulkHandleSuper(node, arg);
2095 } 2095 }
2096 2096
2097 @override 2097 @override
2098 R visitSuperMethodInvoke( 2098 R visitSuperMethodInvoke(
2099 Send node, 2099 Send node,
2100 MethodElement method, 2100 MethodElement method,
2101 NodeList arguments, 2101 NodeList arguments,
2102 Selector selector, 2102 Selector selector,
2103 A arg) { 2103 A arg) {
2104 return bulkHandleSuper(node); 2104 return bulkHandleSuper(node, arg);
2105 } 2105 }
2106 2106
2107 @override 2107 @override
2108 R visitSuperMethodSetterCompound( 2108 R visitSuperMethodSetterCompound(
2109 Send node, 2109 Send node,
2110 FunctionElement method, 2110 FunctionElement method,
2111 FunctionElement setter, 2111 FunctionElement setter,
2112 AssignmentOperator operator, 2112 AssignmentOperator operator,
2113 Node rhs, 2113 Node rhs,
2114 A arg) { 2114 A arg) {
2115 return bulkHandleSuper(node); 2115 return bulkHandleSuper(node, arg);
2116 } 2116 }
2117 2117
2118 @override 2118 @override
2119 R visitSuperMethodSetterPostfix( 2119 R visitSuperMethodSetterPostfix(
2120 Send node, 2120 Send node,
2121 FunctionElement method, 2121 FunctionElement method,
2122 FunctionElement setter, 2122 FunctionElement setter,
2123 IncDecOperator operator, 2123 IncDecOperator operator,
2124 A arg) { 2124 A arg) {
2125 return bulkHandleSuper(node); 2125 return bulkHandleSuper(node, arg);
2126 } 2126 }
2127 2127
2128 @override 2128 @override
2129 R visitSuperMethodSetterPrefix( 2129 R visitSuperMethodSetterPrefix(
2130 Send node, 2130 Send node,
2131 FunctionElement method, 2131 FunctionElement method,
2132 FunctionElement setter, 2132 FunctionElement setter,
2133 IncDecOperator operator, 2133 IncDecOperator operator,
2134 A arg) { 2134 A arg) {
2135 return bulkHandleSuper(node); 2135 return bulkHandleSuper(node, arg);
2136 } 2136 }
2137 2137
2138 @override 2138 @override
2139 R visitSuperNotEquals( 2139 R visitSuperNotEquals(
2140 Send node, 2140 Send node,
2141 FunctionElement function, 2141 FunctionElement function,
2142 Node argument, 2142 Node argument,
2143 A arg) { 2143 A arg) {
2144 return bulkHandleSuper(node); 2144 return bulkHandleSuper(node, arg);
2145 } 2145 }
2146 2146
2147 @override 2147 @override
2148 R visitSuperSetterSet( 2148 R visitSuperSetterSet(
2149 SendSet node, 2149 SendSet node,
2150 FunctionElement setter, 2150 FunctionElement setter,
2151 Node rhs, 2151 Node rhs,
2152 A arg) { 2152 A arg) {
2153 return bulkHandleSuper(node); 2153 return bulkHandleSuper(node, arg);
2154 } 2154 }
2155 2155
2156 @override 2156 @override
2157 R visitSuperUnary( 2157 R visitSuperUnary(
2158 Send node, 2158 Send node,
2159 UnaryOperator operator, 2159 UnaryOperator operator,
2160 FunctionElement function, 2160 FunctionElement function,
2161 A arg) { 2161 A arg) {
2162 return bulkHandleSuper(node); 2162 return bulkHandleSuper(node, arg);
2163 } 2163 }
2164 } 2164 }
2165 2165
2166 /// Visitor that implements [SemanticSendVisitor] by the use of `BulkX` mixins. 2166 /// Visitor that implements [SemanticSendVisitor] by the use of `BulkX` mixins.
2167 /// 2167 ///
2168 /// This class is useful in itself, but shows how to use the `BulkX` mixins and 2168 /// This class is useful in itself, but shows how to use the `BulkX` mixins and
2169 /// tests that the union of the `BulkX` mixins implement all `visit` and `error` 2169 /// tests that the union of the `BulkX` mixins implement all `visit` and `error`
2170 /// methods of [SemanticSendVisitor]. 2170 /// methods of [SemanticSendVisitor].
2171 class BulkVisitor<R, A> extends SemanticSendVisitor<R, A> 2171 class BulkVisitor<R, A> extends SemanticSendVisitor<R, A>
2172 with GetBulkMixin<R, A>, 2172 with GetBulkMixin<R, A>,
2173 SetBulkMixin<R, A>, 2173 SetBulkMixin<R, A>,
2174 ErrorBulkMixin<R, A>, 2174 ErrorBulkMixin<R, A>,
2175 InvokeBulkMixin<R, A>, 2175 InvokeBulkMixin<R, A>,
2176 IndexSetBulkMixin<R, A>, 2176 IndexSetBulkMixin<R, A>,
2177 CompoundBulkMixin<R, A>, 2177 CompoundBulkMixin<R, A>,
2178 UnaryBulkMixin<R, A>, 2178 UnaryBulkMixin<R, A>,
2179 BaseBulkMixin<R, A>, 2179 BaseBulkMixin<R, A>,
2180 BinaryBulkMixin<R, A>, 2180 BinaryBulkMixin<R, A>,
2181 PrefixBulkMixin<R, A>, 2181 PrefixBulkMixin<R, A>,
2182 PostfixBulkMixin<R, A> { 2182 PostfixBulkMixin<R, A> {
2183
2184 @override 2183 @override
2185 R apply(Node node, A arg) { 2184 R apply(Node node, A arg) {
2186 throw new UnimplementedError("BulkVisitor.apply unimplemented"); 2185 throw new UnimplementedError("BulkVisitor.apply unimplemented");
2187 } 2186 }
2188 2187
2189 @override 2188 @override
2190 R bulkHandleNode(Node node, String message) { 2189 R bulkHandleNode(Node node, String message, A arg) {
2191 throw new UnimplementedError("BulkVisitor.bulkHandleNode unimplemented"); 2190 throw new UnimplementedError("BulkVisitor.bulkHandleNode unimplemented");
2192 } 2191 }
2193 } 2192 }
2194 2193
2195 /// [SemanticSendVisitor] that visits subnodes. 2194 /// [SemanticSendVisitor] that visits subnodes.
2196 class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> { 2195 class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
2197 @override 2196 @override
2198 R apply(Node node, A arg) { 2197 R apply(Node node, A arg) {
2199 throw new UnimplementedError("TraversalMixin.apply unimplemented"); 2198 throw new UnimplementedError("TraversalMixin.apply unimplemented");
2200 } 2199 }
(...skipping 1768 matching lines...) Expand 10 before | Expand all | Expand 10 after
3969 return null; 3968 return null;
3970 } 3969 }
3971 3970
3972 @override 3971 @override
3973 R errorUnresolvedSuperIndexPostfix( 3972 R errorUnresolvedSuperIndexPostfix(
3974 Send node, 3973 Send node,
3975 Element function, 3974 Element function,
3976 Node index, 3975 Node index,
3977 IncDecOperator operator, 3976 IncDecOperator operator,
3978 A arg) { 3977 A arg) {
3979 // TODO: implement errorUnresolvedSuperIndexPostfix 3978 apply(index, arg);
3979 return null;
3980 } 3980 }
3981 3981
3982 @override 3982 @override
3983 R errorUnresolvedSuperIndexPrefix( 3983 R errorUnresolvedSuperIndexPrefix(
3984 Send node, 3984 Send node,
3985 Element function, 3985 Element function,
3986 Node index, 3986 Node index,
3987 IncDecOperator operator, 3987 IncDecOperator operator,
3988 A arg) { 3988 A arg) {
3989 // TODO: implement errorUnresolvedSuperIndexPrefix 3989 apply(index, arg);
3990 return null;
3990 } 3991 }
3991 3992
3992 @override 3993 @override
3993 R visitIndexPostfix( 3994 R visitIndexPostfix(
3994 Send node, 3995 Send node,
3995 Node receiver, 3996 Node receiver,
3996 Node index, 3997 Node index,
3997 IncDecOperator operator, 3998 IncDecOperator operator,
3998 A arg) { 3999 A arg) {
3999 // TODO: implement visitIndexPostfix 4000 apply(receiver, arg);
4001 apply(index, arg);
4002 return null;
4000 } 4003 }
4001 4004
4002 @override 4005 @override
4003 R visitIndexPrefix( 4006 R visitIndexPrefix(
4004 Send node, 4007 Send node,
4005 Node receiver, 4008 Node receiver,
4006 Node index, 4009 Node index,
4007 IncDecOperator operator, 4010 IncDecOperator operator,
4008 A arg) { 4011 A arg) {
4009 // TODO: implement visitIndexPrefix 4012 apply(receiver, arg);
4013 apply(index, arg);
4014 return null;
4010 } 4015 }
4011 4016
4012 @override 4017 @override
4013 R visitSuperIndexPostfix( 4018 R visitSuperIndexPostfix(
4014 Send node, 4019 Send node,
4015 FunctionElement indexFunction, 4020 FunctionElement indexFunction,
4016 FunctionElement indexSetFunction, 4021 FunctionElement indexSetFunction,
4017 Node index, 4022 Node index,
4018 IncDecOperator operator, 4023 IncDecOperator operator,
4019 A arg) { 4024 A arg) {
4020 // TODO: implement visitSuperIndexPostfix 4025 apply(index, arg);
4026 return null;
4021 } 4027 }
4022 4028
4023 @override 4029 @override
4024 R visitSuperIndexPrefix( 4030 R visitSuperIndexPrefix(
4025 Send node, 4031 Send node,
4026 FunctionElement indexFunction, 4032 FunctionElement indexFunction,
4027 FunctionElement indexSetFunction, 4033 FunctionElement indexSetFunction,
4028 Node index, 4034 Node index,
4029 IncDecOperator operator, 4035 IncDecOperator operator,
4030 A arg) { 4036 A arg) {
4031 // TODO: implement visitSuperIndexPrefix 4037 apply(index, arg);
4038 return null;
4032 } 4039 }
4033 } 4040 }
4034 4041
4035 /// AST visitor that visits all normal [Send] and [SendSet] nodes using the 4042 /// AST visitor that visits all normal [Send] and [SendSet] nodes using the
4036 /// [SemanticVisitor]. 4043 /// [SemanticVisitor].
4037 class TraversalVisitor<R, A> extends SemanticVisitor<R, A> 4044 class TraversalVisitor<R, A> extends SemanticVisitor<R, A>
4038 with TraversalMixin<R, A> { 4045 with TraversalMixin<R, A> {
4039 TraversalVisitor(TreeElements elements) : super(elements); 4046 TraversalVisitor(TreeElements elements) : super(elements);
4040 4047
4041 SemanticSendVisitor<R, A> get sendVisitor => this; 4048 SemanticSendVisitor<R, A> get sendVisitor => this;
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after
5203 FunctionElement indexFunction, 5210 FunctionElement indexFunction,
5204 FunctionElement indexSetFunction, 5211 FunctionElement indexSetFunction,
5205 Node index, 5212 Node index,
5206 IncDecOperator operator, 5213 IncDecOperator operator,
5207 A arg) { 5214 A arg) {
5208 return handleSuperIndexPostfixPrefix( 5215 return handleSuperIndexPostfixPrefix(
5209 node, indexFunction, indexSetFunction, 5216 node, indexFunction, indexSetFunction,
5210 index, operator, arg, isPrefix: true); 5217 index, operator, arg, isPrefix: true);
5211 } 5218 }
5212 } 5219 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698