OLD | NEW |
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 /// Computes measurements about sends in a function. | 5 /// Computes measurements about sends in a function. |
6 library compiler.src.info.send_info; | 6 library compiler.src.info.send_info; |
7 | 7 |
8 import 'package:dart2js_info/src/measurements.dart'; | 8 import 'package:dart2js_info/src/measurements.dart'; |
9 import 'package:dart2js_info/src/util.dart' show | 9 import 'package:dart2js_info/src/util.dart' show recursiveDiagnosticString; |
10 recursiveDiagnosticString; | |
11 | 10 |
12 import '../common.dart'; | 11 import '../common.dart'; |
13 import '../compiler.dart' show | 12 import '../compiler.dart' show Compiler; |
14 Compiler; | |
15 import '../dart_types.dart'; | 13 import '../dart_types.dart'; |
16 import '../closure.dart'; | 14 import '../closure.dart'; |
17 import '../elements/elements.dart'; | 15 import '../elements/elements.dart'; |
18 import '../elements/visitor.dart' show | 16 import '../elements/visitor.dart' show ElementVisitor; |
19 ElementVisitor; | |
20 import '../resolution/operators.dart'; | 17 import '../resolution/operators.dart'; |
21 import '../resolution/semantic_visitor.dart'; | 18 import '../resolution/semantic_visitor.dart'; |
22 import '../resolution/tree_elements.dart'; | 19 import '../resolution/tree_elements.dart'; |
23 import '../constants/expressions.dart'; | 20 import '../constants/expressions.dart'; |
24 import '../parser/partial_elements.dart' show | 21 import '../parser/partial_elements.dart' show PartialElement; |
25 PartialElement; | |
26 import '../tree/tree.dart'; | 22 import '../tree/tree.dart'; |
27 import '../universe/call_structure.dart' show | 23 import '../universe/call_structure.dart' show CallStructure; |
28 CallStructure; | 24 import '../universe/selector.dart' show Selector; |
29 import '../universe/selector.dart' show | |
30 Selector; | |
31 | 25 |
32 import 'analysis_result.dart'; | 26 import 'analysis_result.dart'; |
33 import 'naive_analysis_result.dart'; | 27 import 'naive_analysis_result.dart'; |
34 import 'trusted_types_analysis_result.dart'; | 28 import 'trusted_types_analysis_result.dart'; |
35 | 29 |
36 /// Collects a set of [Measurements] about send expressions in the function [f]. | 30 /// Collects a set of [Measurements] about send expressions in the function [f]. |
37 // TODO(sigmund): collect information on initializers too. | 31 // TODO(sigmund): collect information on initializers too. |
38 Measurements collectSendMeasurements(FunctionElement f, | 32 Measurements collectSendMeasurements(FunctionElement f, Compiler compiler) { |
39 Compiler compiler) { | |
40 DiagnosticReporter reporter = compiler.reporter; | 33 DiagnosticReporter reporter = compiler.reporter; |
41 return reporter.withCurrentElement(f, () { | 34 return reporter.withCurrentElement(f, () { |
42 // TODO(sigmund): enable for platform too. | 35 // TODO(sigmund): enable for platform too. |
43 if (f.library.isPlatformLibrary) return null; | 36 if (f.library.isPlatformLibrary) return null; |
44 var name = _qualifiedName(f); | 37 var name = _qualifiedName(f); |
45 if (!f.hasNode) { | 38 if (!f.hasNode) { |
46 if (f is PartialElement) return const Measurements.unreachableFunction(); | 39 if (f is PartialElement) return const Measurements.unreachableFunction(); |
47 assert (f is ConstructorElement && f.isSynthesized); | 40 assert(f is ConstructorElement && f.isSynthesized); |
48 // TODO(sigmund): measure synthethic forwarding sends, measure | 41 // TODO(sigmund): measure synthethic forwarding sends, measure |
49 // initializers | 42 // initializers |
50 return new Measurements.reachableFunction(); | 43 return new Measurements.reachableFunction(); |
51 } | 44 } |
52 if (!f.hasResolvedAst) { | 45 if (!f.hasResolvedAst) { |
53 _debug('no resolved ast ${f.runtimeType}'); | 46 _debug('no resolved ast ${f.runtimeType}'); |
54 return null; | 47 return null; |
55 } | 48 } |
56 var resolvedAst = f.resolvedAst; | 49 var resolvedAst = f.resolvedAst; |
57 if (resolvedAst.node == null) { | 50 if (resolvedAst.node == null) { |
58 _debug('no node ${f.runtimeType}'); | 51 _debug('no node ${f.runtimeType}'); |
59 return null; | 52 return null; |
60 } | 53 } |
61 var def = resolvedAst.elements.getFunctionDefinition(resolvedAst.node); | 54 var def = resolvedAst.elements.getFunctionDefinition(resolvedAst.node); |
62 if (def == null) { | 55 if (def == null) { |
63 assert (f is PartialElement); | 56 assert(f is PartialElement); |
64 return const Measurements.unreachableFunction(); | 57 return const Measurements.unreachableFunction(); |
65 } | 58 } |
66 | 59 |
67 var visitor = new _StatsTraversalVisitor( | 60 var visitor = new _StatsTraversalVisitor(compiler, resolvedAst.elements, |
68 compiler, resolvedAst.elements, | |
69 reporter.spanFromSpannable(resolvedAst.node).uri); | 61 reporter.spanFromSpannable(resolvedAst.node).uri); |
70 resolvedAst.node.accept(visitor); | 62 resolvedAst.node.accept(visitor); |
71 return visitor.measurements; | 63 return visitor.measurements; |
72 }); | 64 }); |
73 } | 65 } |
74 | 66 |
75 _qualifiedName(FunctionElement f) { | 67 _qualifiedName(FunctionElement f) { |
76 var cls = f.enclosingClass; | 68 var cls = f.enclosingClass; |
77 return (cls != null) ? '${cls.name}.${f.name}' : f.name; | 69 return (cls != null) ? '${cls.name}.${f.name}' : f.name; |
78 } | 70 } |
79 | 71 |
80 /// Visitor that categorizes data about an individual send. | 72 /// Visitor that categorizes data about an individual send. |
81 class _StatsVisitor<T> extends Visitor | 73 class _StatsVisitor<T> extends Visitor |
82 with SemanticSendResolvedMixin<dynamic, T> | 74 with SemanticSendResolvedMixin<dynamic, T> |
83 implements SemanticSendVisitor<dynamic, T> { | 75 implements SemanticSendVisitor<dynamic, T> { |
84 | |
85 // TODO(sigmund): consider passing in several AnalysisResults at once, so we | 76 // TODO(sigmund): consider passing in several AnalysisResults at once, so we |
86 // can compute the different metrics together. | 77 // can compute the different metrics together. |
87 /// Information we know about the program from static analysis. | 78 /// Information we know about the program from static analysis. |
88 final AnalysisResult info; | 79 final AnalysisResult info; |
89 | 80 |
90 /// Results from this function. | 81 /// Results from this function. |
91 final Measurements measurements; | 82 final Measurements measurements; |
92 | 83 |
93 final DiagnosticReporter reporter; | 84 final DiagnosticReporter reporter; |
94 final TreeElements elements; | 85 final TreeElements elements; |
95 | 86 |
96 SemanticSendVisitor<dynamic, T> get sendVisitor => this; | 87 SemanticSendVisitor<dynamic, T> get sendVisitor => this; |
97 | 88 |
98 _StatsVisitor(this.reporter, this.elements, this.info, Uri sourceUri) | 89 _StatsVisitor(this.reporter, this.elements, this.info, Uri sourceUri) |
99 : measurements = new Measurements.reachableFunction(sourceUri); | 90 : measurements = new Measurements.reachableFunction(sourceUri); |
100 | 91 |
101 visitNode(Node node) => throw "unhandled ${node.runtimeType}: $node"; | 92 visitNode(Node node) => throw "unhandled ${node.runtimeType}: $node"; |
102 apply(Node node, T arg) => throw "missing apply ${node.runtimeType}: $node"; | 93 apply(Node node, T arg) => throw "missing apply ${node.runtimeType}: $node"; |
103 internalError(Node node, String arg) => throw "internal error on $node"; | 94 internalError(Node node, String arg) => throw "internal error on $node"; |
104 | 95 |
105 visitSend(Send node) { | 96 visitSend(Send node) { |
106 _checkInvariant(node, 'before'); | 97 _checkInvariant(node, 'before'); |
107 var span = reporter.spanFromSpannable(node); | 98 var span = reporter.spanFromSpannable(node); |
108 measurements.record(Metric.send, span.begin, span.end); | 99 measurements.record(Metric.send, span.begin, span.end); |
109 if (node is SendSet) { | 100 if (node is SendSet) { |
110 if ((node.assignmentOperator != null && | 101 if ((node.assignmentOperator != null && |
111 node.assignmentOperator.source != '=') || | 102 node.assignmentOperator.source != '=') || |
112 node.isPrefix || | 103 node.isPrefix || |
113 node.isPostfix) { | 104 node.isPostfix) { |
114 assert(!node.isIfNullAssignment); | 105 assert(!node.isIfNullAssignment); |
115 // We count get and set separately in case one of them is defined by the | 106 // We count get and set separately in case one of them is defined by the |
116 // other could be a nSM error. | 107 // other could be a nSM error. |
117 measurements.record(Metric.send, span.begin, span.end); | 108 measurements.record(Metric.send, span.begin, span.end); |
118 measurements.record(Metric.send, span.begin, span.end); | 109 measurements.record(Metric.send, span.begin, span.end); |
119 } else if (node.isIfNullAssignment) { | 110 } else if (node.isIfNullAssignment) { |
120 measurements.record(Metric.send, span.begin, span.end); | 111 measurements.record(Metric.send, span.begin, span.end); |
121 } | 112 } |
122 } | 113 } |
123 super.visitSend(node); | 114 super.visitSend(node); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 var span = reporter.spanFromSpannable(node); | 208 var span = reporter.spanFromSpannable(node); |
218 measurements.record(Metric.polymorphicSend, span.begin, span.end); | 209 measurements.record(Metric.polymorphicSend, span.begin, span.end); |
219 measurements.record(Metric.multiNsmCallSend, span.begin, span.end); | 210 measurements.record(Metric.multiNsmCallSend, span.begin, span.end); |
220 } | 211 } |
221 | 212 |
222 handleSuper(Node node) { | 213 handleSuper(Node node) { |
223 var span = reporter.spanFromSpannable(node); | 214 var span = reporter.spanFromSpannable(node); |
224 measurements.record(Metric.monomorphicSend, span.begin, span.end); | 215 measurements.record(Metric.monomorphicSend, span.begin, span.end); |
225 measurements.record(Metric.superSend, span.begin, span.end); | 216 measurements.record(Metric.superSend, span.begin, span.end); |
226 } | 217 } |
| 218 |
227 handleTypeVariable(Node node) { | 219 handleTypeVariable(Node node) { |
228 var span = reporter.spanFromSpannable(node); | 220 var span = reporter.spanFromSpannable(node); |
229 measurements.record(Metric.monomorphicSend, span.begin, span.end); | 221 measurements.record(Metric.monomorphicSend, span.begin, span.end); |
230 measurements.record(Metric.typeVariableSend, span.begin, span.end); | 222 measurements.record(Metric.typeVariableSend, span.begin, span.end); |
231 } | 223 } |
| 224 |
232 handleStatic(Node node) { | 225 handleStatic(Node node) { |
233 var span = reporter.spanFromSpannable(node); | 226 var span = reporter.spanFromSpannable(node); |
234 measurements.record(Metric.monomorphicSend, span.begin, span.end); | 227 measurements.record(Metric.monomorphicSend, span.begin, span.end); |
235 measurements.record(Metric.staticSend, span.begin, span.end); | 228 measurements.record(Metric.staticSend, span.begin, span.end); |
236 } | 229 } |
237 | 230 |
238 handleNoSend(Node node) { | 231 handleNoSend(Node node) { |
239 measurements.popLast(Metric.send); | 232 measurements.popLast(Metric.send); |
240 } | 233 } |
241 | 234 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 } | 274 } |
282 } else { | 275 } else { |
283 handleDynamic(node); | 276 handleDynamic(node); |
284 } | 277 } |
285 return; | 278 return; |
286 } | 279 } |
287 | 280 |
288 Boolish usesInterceptor = selectorInfo.usesInterceptor; | 281 Boolish usesInterceptor = selectorInfo.usesInterceptor; |
289 if (hasSelector == Boolish.yes) { | 282 if (hasSelector == Boolish.yes) { |
290 if (selectorInfo.isAccurate && selectorInfo.possibleTargets == 1) { | 283 if (selectorInfo.isAccurate && selectorInfo.possibleTargets == 1) { |
291 assert (usesInterceptor != Boolish.maybe); | 284 assert(usesInterceptor != Boolish.maybe); |
292 if (usesInterceptor == Boolish.yes) { | 285 if (usesInterceptor == Boolish.yes) { |
293 handleSingleInterceptor(node); | 286 handleSingleInterceptor(node); |
294 } else { | 287 } else { |
295 handleSingleInstance(node); | 288 handleSingleInstance(node); |
296 } | 289 } |
297 } else { | 290 } else { |
298 if (usesInterceptor == Boolish.no) { | 291 if (usesInterceptor == Boolish.no) { |
299 handleVirtual(node); | 292 handleVirtual(node); |
300 } else if (usesInterceptor == Boolish.yes) { | 293 } else if (usesInterceptor == Boolish.yes) { |
301 handleMultiInterceptor(node); | 294 handleMultiInterceptor(node); |
(...skipping 21 matching lines...) Expand all Loading... |
323 void handleInvoke(Node node) { | 316 void handleInvoke(Node node) { |
324 handleDynamic(node); | 317 handleDynamic(node); |
325 } | 318 } |
326 | 319 |
327 void handleEquals(Node node) { | 320 void handleEquals(Node node) { |
328 handleDynamic(node); | 321 handleDynamic(node); |
329 } | 322 } |
330 | 323 |
331 // Constructors | 324 // Constructors |
332 | 325 |
333 void visitAbstractClassConstructorInvoke(NewExpression node, | 326 void visitAbstractClassConstructorInvoke( |
334 ConstructorElement element, InterfaceType type, NodeList arguments, | 327 NewExpression node, |
335 CallStructure callStructure, T arg) { | 328 ConstructorElement element, |
| 329 InterfaceType type, |
| 330 NodeList arguments, |
| 331 CallStructure callStructure, |
| 332 T arg) { |
336 handleConstructor(node); | 333 handleConstructor(node); |
337 } | 334 } |
338 | 335 |
339 void visitBoolFromEnvironmentConstructorInvoke(NewExpression node, | 336 void visitBoolFromEnvironmentConstructorInvoke(NewExpression node, |
340 BoolFromEnvironmentConstantExpression constant, T arg) { | 337 BoolFromEnvironmentConstantExpression constant, T arg) { |
341 handleConstructor(node); | 338 handleConstructor(node); |
342 } | 339 } |
343 | 340 |
344 void visitConstConstructorInvoke( | 341 void visitConstConstructorInvoke( |
345 NewExpression node, ConstructedConstantExpression constant, T arg) { | 342 NewExpression node, ConstructedConstantExpression constant, T arg) { |
346 handleConstructor(node); | 343 handleConstructor(node); |
347 } | 344 } |
348 | 345 |
349 void visitGenerativeConstructorInvoke(NewExpression node, | 346 void visitGenerativeConstructorInvoke( |
350 ConstructorElement constructor, InterfaceType type, NodeList arguments, | 347 NewExpression node, |
351 CallStructure callStructure, T arg) { | 348 ConstructorElement constructor, |
| 349 InterfaceType type, |
| 350 NodeList arguments, |
| 351 CallStructure callStructure, |
| 352 T arg) { |
352 handleConstructor(node); | 353 handleConstructor(node); |
353 } | 354 } |
354 | 355 |
355 void visitIntFromEnvironmentConstructorInvoke(NewExpression node, | 356 void visitIntFromEnvironmentConstructorInvoke(NewExpression node, |
356 IntFromEnvironmentConstantExpression constant, T arg) { | 357 IntFromEnvironmentConstantExpression constant, T arg) { |
357 handleConstructor(node); | 358 handleConstructor(node); |
358 } | 359 } |
359 | 360 |
360 void visitRedirectingFactoryConstructorInvoke(NewExpression node, | 361 void visitRedirectingFactoryConstructorInvoke( |
361 ConstructorElement constructor, InterfaceType type, | 362 NewExpression node, |
362 ConstructorElement effectiveTarget, InterfaceType effectiveTargetType, | 363 ConstructorElement constructor, |
363 NodeList arguments, CallStructure callStructure, T arg) { | 364 InterfaceType type, |
| 365 ConstructorElement effectiveTarget, |
| 366 InterfaceType effectiveTargetType, |
| 367 NodeList arguments, |
| 368 CallStructure callStructure, |
| 369 T arg) { |
364 handleConstructor(node); | 370 handleConstructor(node); |
365 } | 371 } |
366 | 372 |
367 void visitRedirectingGenerativeConstructorInvoke(NewExpression node, | 373 void visitRedirectingGenerativeConstructorInvoke( |
368 ConstructorElement constructor, InterfaceType type, NodeList arguments, | 374 NewExpression node, |
369 CallStructure callStructure, T arg) { | 375 ConstructorElement constructor, |
| 376 InterfaceType type, |
| 377 NodeList arguments, |
| 378 CallStructure callStructure, |
| 379 T arg) { |
370 handleConstructor(node); | 380 handleConstructor(node); |
371 } | 381 } |
372 | 382 |
373 void visitStringFromEnvironmentConstructorInvoke(NewExpression node, | 383 void visitStringFromEnvironmentConstructorInvoke(NewExpression node, |
374 StringFromEnvironmentConstantExpression constant, T arg) { | 384 StringFromEnvironmentConstantExpression constant, T arg) { |
375 handleConstructor(node); | 385 handleConstructor(node); |
376 } | 386 } |
377 | 387 |
378 // Dynamic sends | 388 // Dynamic sends |
379 | 389 |
380 | |
381 // TODO(sigmund): many many things to add: | 390 // TODO(sigmund): many many things to add: |
382 // -- support for operators, indexers, etc. | 391 // -- support for operators, indexers, etc. |
383 // -- logic about nullables | 392 // -- logic about nullables |
384 // -- int, JSArray | 393 // -- int, JSArray |
385 // -- all interceptors | 394 // -- all interceptors |
386 | 395 |
387 void visitBinary( | 396 void visitBinary( |
388 Send node, Node left, BinaryOperator operator, Node right, T arg) { | 397 Send node, Node left, BinaryOperator operator, Node right, T arg) { |
389 handleOperator(node); | 398 handleOperator(node); |
390 } | 399 } |
391 | 400 |
392 void visitCompoundIndexSet(SendSet node, Node receiver, Node index, | 401 void visitCompoundIndexSet(SendSet node, Node receiver, Node index, |
393 AssignmentOperator operator, Node rhs, T arg) { | 402 AssignmentOperator operator, Node rhs, T arg) { |
394 handleIndex(node); // t1 = receiver[index] | 403 handleIndex(node); // t1 = receiver[index] |
395 handleOperator(node); // t2 = t1 op rhs | 404 handleOperator(node); // t2 = t1 op rhs |
396 handleIndex(node); // receiver[index] = t2 | 405 handleIndex(node); // receiver[index] = t2 |
397 } | 406 } |
398 | 407 |
399 void visitDynamicPropertyCompound(Send node, Node receiver, | 408 void visitDynamicPropertyCompound(Send node, Node receiver, Name name, |
400 Name name, AssignmentOperator operator, Node rhs, T arg) { | 409 AssignmentOperator operator, Node rhs, T arg) { |
401 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 410 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
402 handleOperator(node); | 411 handleOperator(node); |
403 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 412 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
404 } | 413 } |
405 | 414 |
406 | 415 void visitDynamicPropertyGet(Send node, Node receiver, Name name, T arg) { |
407 void visitDynamicPropertyGet( | |
408 Send node, Node receiver, Name name, T arg) { | |
409 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 416 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
410 } | 417 } |
411 | 418 |
412 void visitDynamicPropertyInvoke( | 419 void visitDynamicPropertyInvoke( |
413 Send node, Node receiver, NodeList arguments, Selector selector, T arg) { | 420 Send node, Node receiver, NodeList arguments, Selector selector, T arg) { |
414 handleDynamicProperty(node, receiver, selector); | 421 handleDynamicProperty(node, receiver, selector); |
415 } | 422 } |
416 | 423 |
417 void visitDynamicPropertyPostfix(Send node, Node receiver, | 424 void visitDynamicPropertyPostfix( |
418 Name name, IncDecOperator operator, T arg) { | 425 Send node, Node receiver, Name name, IncDecOperator operator, T arg) { |
419 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 426 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
420 handleOperator(node); | 427 handleOperator(node); |
421 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 428 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
422 } | 429 } |
423 | 430 |
424 void visitDynamicPropertyPrefix(Send node, Node receiver, Name name, | 431 void visitDynamicPropertyPrefix( |
425 IncDecOperator operator, T arg) { | 432 Send node, Node receiver, Name name, IncDecOperator operator, T arg) { |
426 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 433 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
427 handleOperator(node); | 434 handleOperator(node); |
428 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 435 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
429 } | 436 } |
430 | 437 |
431 void visitDynamicPropertySet( | 438 void visitDynamicPropertySet( |
432 SendSet node, Node receiver, Name name, Node rhs, T arg) { | 439 SendSet node, Node receiver, Name name, Node rhs, T arg) { |
433 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 440 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
434 } | 441 } |
435 | 442 |
(...skipping 23 matching lines...) Expand all Loading... |
459 void visitIfNotNullDynamicPropertyGet( | 466 void visitIfNotNullDynamicPropertyGet( |
460 Send node, Node receiver, Name name, T arg) { | 467 Send node, Node receiver, Name name, T arg) { |
461 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 468 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
462 } | 469 } |
463 | 470 |
464 void visitIfNotNullDynamicPropertyInvoke( | 471 void visitIfNotNullDynamicPropertyInvoke( |
465 Send node, Node receiver, NodeList arguments, Selector selector, T arg) { | 472 Send node, Node receiver, NodeList arguments, Selector selector, T arg) { |
466 handleDynamicProperty(node, receiver, selector); | 473 handleDynamicProperty(node, receiver, selector); |
467 } | 474 } |
468 | 475 |
469 void visitIfNotNullDynamicPropertyPostfix(Send node, Node receiver, Name name, | 476 void visitIfNotNullDynamicPropertyPostfix( |
470 IncDecOperator operator, T arg) { | 477 Send node, Node receiver, Name name, IncDecOperator operator, T arg) { |
471 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 478 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
472 handleOperator(node); | 479 handleOperator(node); |
473 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 480 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
474 } | 481 } |
475 | 482 |
476 void visitIfNotNullDynamicPropertyPrefix(Send node, Node receiver, Name name, | 483 void visitIfNotNullDynamicPropertyPrefix( |
477 IncDecOperator operator, T arg) { | 484 Send node, Node receiver, Name name, IncDecOperator operator, T arg) { |
478 handleDynamicProperty(node, receiver, new Selector.getter(name)); | 485 handleDynamicProperty(node, receiver, new Selector.getter(name)); |
479 handleOperator(node); | 486 handleOperator(node); |
480 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 487 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
481 } | 488 } |
482 | 489 |
483 void visitIfNotNullDynamicPropertySet( | 490 void visitIfNotNullDynamicPropertySet( |
484 SendSet node, Node receiver, Name name, Node rhs, T arg) { | 491 SendSet node, Node receiver, Name name, Node rhs, T arg) { |
485 handleDynamicProperty(node, receiver, new Selector.setter(name)); | 492 handleDynamicProperty(node, receiver, new Selector.setter(name)); |
486 } | 493 } |
487 | 494 |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 handleSuper(node); | 649 handleSuper(node); |
643 } | 650 } |
644 | 651 |
645 void visitSuperFieldFieldPrefix(Send node, FieldElement readField, | 652 void visitSuperFieldFieldPrefix(Send node, FieldElement readField, |
646 FieldElement writtenField, IncDecOperator operator, T arg) { | 653 FieldElement writtenField, IncDecOperator operator, T arg) { |
647 handleSuper(node); | 654 handleSuper(node); |
648 handleOperator(node); | 655 handleOperator(node); |
649 handleSuper(node); | 656 handleSuper(node); |
650 } | 657 } |
651 | 658 |
652 void visitSuperFieldFieldSetIfNull( | 659 void visitSuperFieldFieldSetIfNull(Send node, FieldElement readField, |
653 Send node, FieldElement readField, FieldElement writtenField, Node rhs, | 660 FieldElement writtenField, Node rhs, T arg) { |
654 T arg) { | |
655 handleSuper(node); | 661 handleSuper(node); |
656 handleNSMSuper(node, readField.enclosingClass); | 662 handleNSMSuper(node, readField.enclosingClass); |
657 } | 663 } |
658 | 664 |
659 void visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, | 665 void visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, |
660 CallStructure callStructure, T arg) { | 666 CallStructure callStructure, T arg) { |
661 handleInvoke(node); | 667 handleInvoke(node); |
662 } | 668 } |
663 | 669 |
664 void visitSuperFieldPostfix( | 670 void visitSuperFieldPostfix( |
(...skipping 24 matching lines...) Expand all Loading... |
689 handleSuper(node); | 695 handleSuper(node); |
690 } | 696 } |
691 | 697 |
692 void visitSuperFieldSetterPrefix(Send node, FieldElement field, | 698 void visitSuperFieldSetterPrefix(Send node, FieldElement field, |
693 FunctionElement setter, IncDecOperator operator, T arg) { | 699 FunctionElement setter, IncDecOperator operator, T arg) { |
694 handleSuper(node); | 700 handleSuper(node); |
695 handleOperator(node); | 701 handleOperator(node); |
696 handleSuper(node); | 702 handleSuper(node); |
697 } | 703 } |
698 | 704 |
699 void visitSuperFieldSetterSetIfNull(Send node, FieldElement field, | 705 void visitSuperFieldSetterSetIfNull( |
700 FunctionElement setter, Node rhs, T arg) { | 706 Send node, FieldElement field, FunctionElement setter, Node rhs, T arg) { |
701 handleSuper(node); | 707 handleSuper(node); |
702 handleSuper(node); | 708 handleSuper(node); |
703 } | 709 } |
704 | 710 |
705 void visitSuperGetterFieldCompound(Send node, FunctionElement getter, | 711 void visitSuperGetterFieldCompound(Send node, FunctionElement getter, |
706 FieldElement field, AssignmentOperator operator, Node rhs, T arg) { | 712 FieldElement field, AssignmentOperator operator, Node rhs, T arg) { |
707 handleSuper(node); | 713 handleSuper(node); |
708 handleOperator(node); | 714 handleOperator(node); |
709 handleSuper(node); | 715 handleSuper(node); |
710 } | 716 } |
711 | 717 |
712 void visitSuperGetterFieldPostfix(Send node, FunctionElement getter, | 718 void visitSuperGetterFieldPostfix(Send node, FunctionElement getter, |
713 FieldElement field, IncDecOperator operator, T arg) { | 719 FieldElement field, IncDecOperator operator, T arg) { |
714 handleSuper(node); | 720 handleSuper(node); |
715 handleOperator(node); | 721 handleOperator(node); |
716 handleSuper(node); | 722 handleSuper(node); |
717 } | 723 } |
718 | 724 |
719 void visitSuperGetterFieldPrefix(Send node, FunctionElement getter, | 725 void visitSuperGetterFieldPrefix(Send node, FunctionElement getter, |
720 FieldElement field, IncDecOperator operator, T arg) { | 726 FieldElement field, IncDecOperator operator, T arg) { |
721 handleSuper(node); | 727 handleSuper(node); |
722 handleOperator(node); | 728 handleOperator(node); |
723 handleSuper(node); | 729 handleSuper(node); |
724 } | 730 } |
725 | 731 |
726 void visitSuperGetterFieldSetIfNull(Send node, FunctionElement getter, | 732 void visitSuperGetterFieldSetIfNull( |
727 FieldElement field, Node rhs, T arg) { | 733 Send node, FunctionElement getter, FieldElement field, Node rhs, T arg) { |
728 handleSuper(node); | 734 handleSuper(node); |
729 handleSuper(node); | 735 handleSuper(node); |
730 } | 736 } |
731 | 737 |
732 void visitSuperGetterInvoke(Send node, FunctionElement getter, | 738 void visitSuperGetterInvoke(Send node, FunctionElement getter, |
733 NodeList arguments, CallStructure callStructure, T arg) { | 739 NodeList arguments, CallStructure callStructure, T arg) { |
734 handleInvoke(node); | 740 handleInvoke(node); |
735 } | 741 } |
736 | 742 |
737 void visitSuperGetterSetterCompound(Send node, FunctionElement getter, | 743 void visitSuperGetterSetterCompound(Send node, FunctionElement getter, |
(...skipping 16 matching lines...) Expand all Loading... |
754 handleOperator(node); | 760 handleOperator(node); |
755 handleSuper(node); | 761 handleSuper(node); |
756 } | 762 } |
757 | 763 |
758 void visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter, | 764 void visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter, |
759 FunctionElement setter, Node rhs, T arg) { | 765 FunctionElement setter, Node rhs, T arg) { |
760 handleSuper(node); | 766 handleSuper(node); |
761 handleSuper(node); | 767 handleSuper(node); |
762 } | 768 } |
763 | 769 |
764 void visitSuperIndexPostfix(Send node, MethodElement indexFunction, | 770 void visitSuperIndexPostfix( |
765 MethodElement indexSetFunction, Node index, IncDecOperator operator, | 771 Send node, |
| 772 MethodElement indexFunction, |
| 773 MethodElement indexSetFunction, |
| 774 Node index, |
| 775 IncDecOperator operator, |
766 T arg) { | 776 T arg) { |
767 handleSuper(node); | 777 handleSuper(node); |
768 handleOperator(node); | 778 handleOperator(node); |
769 handleSuper(node); | 779 handleSuper(node); |
770 } | 780 } |
771 | 781 |
772 void visitSuperIndexPrefix(Send node, MethodElement indexFunction, | 782 void visitSuperIndexPrefix( |
773 MethodElement indexSetFunction, Node index, IncDecOperator operator, | 783 Send node, |
| 784 MethodElement indexFunction, |
| 785 MethodElement indexSetFunction, |
| 786 Node index, |
| 787 IncDecOperator operator, |
774 T arg) { | 788 T arg) { |
775 handleSuper(node); | 789 handleSuper(node); |
776 handleOperator(node); | 790 handleOperator(node); |
777 handleSuper(node); | 791 handleSuper(node); |
778 } | 792 } |
779 | 793 |
780 void visitSuperMethodSetterCompound(Send node, FunctionElement method, | 794 void visitSuperMethodSetterCompound(Send node, FunctionElement method, |
781 FunctionElement setter, AssignmentOperator operator, Node rhs, T arg) { | 795 FunctionElement setter, AssignmentOperator operator, Node rhs, T arg) { |
782 handleSuper(node); | 796 handleSuper(node); |
783 handleNSMSuper(node, method.enclosingClass); | 797 handleNSMSuper(node, method.enclosingClass); |
(...skipping 13 matching lines...) Expand all Loading... |
797 handleNSMSuper(node, method.enclosingClass); | 811 handleNSMSuper(node, method.enclosingClass); |
798 handleSuper(node); | 812 handleSuper(node); |
799 } | 813 } |
800 | 814 |
801 void visitSuperMethodSetterSetIfNull(Send node, FunctionElement method, | 815 void visitSuperMethodSetterSetIfNull(Send node, FunctionElement method, |
802 FunctionElement setter, Node rhs, T arg) { | 816 FunctionElement setter, Node rhs, T arg) { |
803 handleSuper(node); | 817 handleSuper(node); |
804 handleSuper(node); | 818 handleSuper(node); |
805 } | 819 } |
806 | 820 |
807 void visitThisPropertyCompound(Send node, Name name, | 821 void visitThisPropertyCompound( |
808 AssignmentOperator operator, Node rhs, T arg) { | 822 Send node, Name name, AssignmentOperator operator, Node rhs, T arg) { |
809 handleThisProperty(node, new Selector.getter(name)); | 823 handleThisProperty(node, new Selector.getter(name)); |
810 handleOperator(node); | 824 handleOperator(node); |
811 handleThisProperty(node, new Selector.setter(name)); | 825 handleThisProperty(node, new Selector.setter(name)); |
812 } | 826 } |
813 | 827 |
814 void visitThisPropertyInvoke( | 828 void visitThisPropertyInvoke( |
815 Send node, NodeList arguments, Selector selector, T arg) { | 829 Send node, NodeList arguments, Selector selector, T arg) { |
816 handleThisProperty(node, selector); | 830 handleThisProperty(node, selector); |
817 } | 831 } |
818 | 832 |
819 void visitThisPropertyPostfix(Send node, Name name, IncDecOperator operator, | 833 void visitThisPropertyPostfix( |
820 T arg) { | 834 Send node, Name name, IncDecOperator operator, T arg) { |
821 handleThisProperty(node, new Selector.getter(name)); | 835 handleThisProperty(node, new Selector.getter(name)); |
822 handleOperator(node); | 836 handleOperator(node); |
823 handleThisProperty(node, new Selector.setter(name)); | 837 handleThisProperty(node, new Selector.setter(name)); |
824 } | 838 } |
825 | 839 |
826 void visitThisPropertyPrefix(Send node, Name name, IncDecOperator operator, | 840 void visitThisPropertyPrefix( |
827 T arg) { | 841 Send node, Name name, IncDecOperator operator, T arg) { |
828 handleThisProperty(node, new Selector.getter(name)); | 842 handleThisProperty(node, new Selector.getter(name)); |
829 handleOperator(node); | 843 handleOperator(node); |
830 handleThisProperty(node, new Selector.setter(name)); | 844 handleThisProperty(node, new Selector.setter(name)); |
831 } | 845 } |
832 | 846 |
833 void visitTopLevelFieldCompound(Send node, FieldElement field, | 847 void visitTopLevelFieldCompound(Send node, FieldElement field, |
834 AssignmentOperator operator, Node rhs, T arg) { | 848 AssignmentOperator operator, Node rhs, T arg) { |
835 handleStatic(node); | 849 handleStatic(node); |
836 handleOperator(node); | 850 handleOperator(node); |
837 handleStatic(node); | 851 handleStatic(node); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 handleSuper(node); | 1004 handleSuper(node); |
991 } | 1005 } |
992 | 1006 |
993 void visitSuperUnary( | 1007 void visitSuperUnary( |
994 Send node, UnaryOperator operator, FunctionElement function, T arg) { | 1008 Send node, UnaryOperator operator, FunctionElement function, T arg) { |
995 handleSuper(node); | 1009 handleSuper(node); |
996 } | 1010 } |
997 | 1011 |
998 // Statically known "no such method" sends | 1012 // Statically known "no such method" sends |
999 | 1013 |
1000 void visitConstructorIncompatibleInvoke(NewExpression node, | 1014 void visitConstructorIncompatibleInvoke( |
1001 ConstructorElement constructor, InterfaceType type, NodeList arguments, | 1015 NewExpression node, |
1002 CallStructure callStructure, T arg) { | 1016 ConstructorElement constructor, |
| 1017 InterfaceType type, |
| 1018 NodeList arguments, |
| 1019 CallStructure callStructure, |
| 1020 T arg) { |
1003 handleNSMError(node); | 1021 handleNSMError(node); |
1004 } | 1022 } |
1005 | 1023 |
1006 void visitFinalLocalVariableCompound(Send node, LocalVariableElement variable, | 1024 void visitFinalLocalVariableCompound(Send node, LocalVariableElement variable, |
1007 AssignmentOperator operator, Node rhs, T arg) { | 1025 AssignmentOperator operator, Node rhs, T arg) { |
1008 handleLocal(node); | 1026 handleLocal(node); |
1009 handleOperator(node); | 1027 handleOperator(node); |
1010 handleNSMError(node); | 1028 handleNSMError(node); |
1011 } | 1029 } |
1012 | 1030 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 SendSet node, FieldElement field, Node rhs, T arg) { | 1110 SendSet node, FieldElement field, Node rhs, T arg) { |
1093 handleNSMError(node); | 1111 handleNSMError(node); |
1094 } | 1112 } |
1095 | 1113 |
1096 void visitFinalStaticFieldSetIfNull( | 1114 void visitFinalStaticFieldSetIfNull( |
1097 SendSet node, FieldElement field, Node rhs, T arg) { | 1115 SendSet node, FieldElement field, Node rhs, T arg) { |
1098 handleStatic(node); | 1116 handleStatic(node); |
1099 handleNSMError(node); | 1117 handleNSMError(node); |
1100 } | 1118 } |
1101 | 1119 |
1102 void visitFinalSuperFieldSetIfNull(Send node, FieldElement field, | 1120 void visitFinalSuperFieldSetIfNull( |
1103 Node rhs, T arg) { | 1121 Send node, FieldElement field, Node rhs, T arg) { |
1104 handleSuper(node); | 1122 handleSuper(node); |
1105 handleNSMSuper(node, field.enclosingClass); | 1123 handleNSMSuper(node, field.enclosingClass); |
1106 } | 1124 } |
1107 | 1125 |
1108 void visitFinalSuperFieldCompound(Send node, FieldElement field, | 1126 void visitFinalSuperFieldCompound(Send node, FieldElement field, |
1109 AssignmentOperator operator, Node rhs, T arg) { | 1127 AssignmentOperator operator, Node rhs, T arg) { |
1110 handleSuper(node); | 1128 handleSuper(node); |
1111 handleOperator(node); | 1129 handleOperator(node); |
1112 handleNSMSuper(node, field.enclosingClass); | 1130 handleNSMSuper(node, field.enclosingClass); |
1113 } | 1131 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 handleStatic(node); | 1186 handleStatic(node); |
1169 handleStatic(node); | 1187 handleStatic(node); |
1170 } | 1188 } |
1171 | 1189 |
1172 void visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method, | 1190 void visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method, |
1173 FunctionElement setter, Node rhs, T arg) { | 1191 FunctionElement setter, Node rhs, T arg) { |
1174 handleStatic(node); | 1192 handleStatic(node); |
1175 handleStatic(node); | 1193 handleStatic(node); |
1176 } | 1194 } |
1177 | 1195 |
1178 void visitTopLevelMethodSetIfNull(Send node, FunctionElement method, | 1196 void visitTopLevelMethodSetIfNull( |
1179 Node rhs, T arg) { | 1197 Send node, FunctionElement method, Node rhs, T arg) { |
1180 handleStatic(node); | 1198 handleStatic(node); |
1181 handleNSMError(node); | 1199 handleNSMError(node); |
1182 } | 1200 } |
1183 | 1201 |
1184 void visitLocalFunctionIncompatibleInvoke(Send node, | 1202 void visitLocalFunctionIncompatibleInvoke( |
1185 LocalFunctionElement function, NodeList arguments, | 1203 Send node, |
1186 CallStructure callStructure, T arg) { | 1204 LocalFunctionElement function, |
| 1205 NodeList arguments, |
| 1206 CallStructure callStructure, |
| 1207 T arg) { |
1187 handleNSMError(node); | 1208 handleNSMError(node); |
1188 } | 1209 } |
1189 | 1210 |
1190 void visitLocalFunctionCompound(Send node, LocalFunctionElement function, | 1211 void visitLocalFunctionCompound(Send node, LocalFunctionElement function, |
1191 AssignmentOperator operator, Node rhs, T arg) { | 1212 AssignmentOperator operator, Node rhs, T arg) { |
1192 handleLocal(node); | 1213 handleLocal(node); |
1193 handleNSMError(node); | 1214 handleNSMError(node); |
1194 handleNoSend(node); | 1215 handleNoSend(node); |
1195 } | 1216 } |
1196 | 1217 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1320 | 1341 |
1321 void visitSuperSetterGet(Send node, FunctionElement setter, T arg) { | 1342 void visitSuperSetterGet(Send node, FunctionElement setter, T arg) { |
1322 handleNSMSuper(node, setter.enclosingClass); | 1343 handleNSMSuper(node, setter.enclosingClass); |
1323 } | 1344 } |
1324 | 1345 |
1325 void visitSuperSetterInvoke(Send node, FunctionElement setter, | 1346 void visitSuperSetterInvoke(Send node, FunctionElement setter, |
1326 NodeList arguments, CallStructure callStructure, T arg) { | 1347 NodeList arguments, CallStructure callStructure, T arg) { |
1327 handleNSMSuper(node, setter.enclosingClass); | 1348 handleNSMSuper(node, setter.enclosingClass); |
1328 } | 1349 } |
1329 | 1350 |
1330 void visitTopLevelFunctionIncompatibleInvoke(Send node, | 1351 void visitTopLevelFunctionIncompatibleInvoke( |
1331 MethodElement function, NodeList arguments, CallStructure callStructure, | 1352 Send node, |
| 1353 MethodElement function, |
| 1354 NodeList arguments, |
| 1355 CallStructure callStructure, |
1332 T arg) { | 1356 T arg) { |
1333 handleNSMError(node); | 1357 handleNSMError(node); |
1334 } | 1358 } |
1335 | 1359 |
1336 void visitTopLevelFunctionSet( | 1360 void visitTopLevelFunctionSet( |
1337 Send node, MethodElement function, Node rhs, T arg) { | 1361 Send node, MethodElement function, Node rhs, T arg) { |
1338 handleNSMError(node); | 1362 handleNSMError(node); |
1339 } | 1363 } |
1340 | 1364 |
1341 void visitTopLevelGetterSet( | 1365 void visitTopLevelGetterSet( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1387 | 1411 |
1388 void visitTopLevelSetterGet(Send node, FunctionElement setter, T arg) { | 1412 void visitTopLevelSetterGet(Send node, FunctionElement setter, T arg) { |
1389 handleNSMError(node); | 1413 handleNSMError(node); |
1390 } | 1414 } |
1391 | 1415 |
1392 void visitTopLevelSetterInvoke(Send node, FunctionElement setter, | 1416 void visitTopLevelSetterInvoke(Send node, FunctionElement setter, |
1393 NodeList arguments, CallStructure callStructure, T arg) { | 1417 NodeList arguments, CallStructure callStructure, T arg) { |
1394 handleNSMError(node); | 1418 handleNSMError(node); |
1395 } | 1419 } |
1396 | 1420 |
1397 void visitTypeVariableTypeLiteralCompound(Send node, | 1421 void visitTypeVariableTypeLiteralCompound( |
1398 TypeVariableElement element, AssignmentOperator operator, Node rhs, | 1422 Send node, |
| 1423 TypeVariableElement element, |
| 1424 AssignmentOperator operator, |
| 1425 Node rhs, |
1399 T arg) { | 1426 T arg) { |
1400 handleTypeVariable(node); | 1427 handleTypeVariable(node); |
1401 handleNSMError(node); // operator on a method closure yields nSM | 1428 handleNSMError(node); // operator on a method closure yields nSM |
1402 handleNoSend(node); // setter is not invoked, don't count it. | 1429 handleNoSend(node); // setter is not invoked, don't count it. |
1403 } | 1430 } |
1404 | 1431 |
1405 void visitTypeVariableTypeLiteralGet( | 1432 void visitTypeVariableTypeLiteralGet( |
1406 Send node, TypeVariableElement element, T arg) { | 1433 Send node, TypeVariableElement element, T arg) { |
1407 handleTypeVariable(node); | 1434 handleTypeVariable(node); |
1408 } | 1435 } |
1409 | 1436 |
1410 void visitTypeVariableTypeLiteralInvoke(Send node, | 1437 void visitTypeVariableTypeLiteralInvoke( |
1411 TypeVariableElement element, NodeList arguments, | 1438 Send node, |
1412 CallStructure callStructure, T arg) { | 1439 TypeVariableElement element, |
| 1440 NodeList arguments, |
| 1441 CallStructure callStructure, |
| 1442 T arg) { |
1413 handleNSMError(node); | 1443 handleNSMError(node); |
1414 } | 1444 } |
1415 | 1445 |
1416 void visitTypeVariableTypeLiteralPostfix( | 1446 void visitTypeVariableTypeLiteralPostfix( |
1417 Send node, TypeVariableElement element, IncDecOperator operator, T arg) { | 1447 Send node, TypeVariableElement element, IncDecOperator operator, T arg) { |
1418 handleTypeVariable(node); | 1448 handleTypeVariable(node); |
1419 handleNSMError(node); | 1449 handleNSMError(node); |
1420 handleNoSend(node); | 1450 handleNoSend(node); |
1421 } | 1451 } |
1422 | 1452 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 SendSet node, ConstantExpression constant, Node rhs, T arg) { | 1503 SendSet node, ConstantExpression constant, Node rhs, T arg) { |
1474 handleNSMError(node); | 1504 handleNSMError(node); |
1475 } | 1505 } |
1476 | 1506 |
1477 void visitTypedefTypeLiteralSetIfNull( | 1507 void visitTypedefTypeLiteralSetIfNull( |
1478 SendSet node, ConstantExpression constant, Node rhs, T arg) { | 1508 SendSet node, ConstantExpression constant, Node rhs, T arg) { |
1479 handleStatic(node); | 1509 handleStatic(node); |
1480 handleNSMError(node); | 1510 handleNSMError(node); |
1481 } | 1511 } |
1482 | 1512 |
1483 void visitUnresolvedClassConstructorInvoke(NewExpression node, | 1513 void visitUnresolvedClassConstructorInvoke( |
1484 Element element, DartType type, NodeList arguments, Selector selector, | 1514 NewExpression node, |
| 1515 Element element, |
| 1516 DartType type, |
| 1517 NodeList arguments, |
| 1518 Selector selector, |
1485 T arg) { | 1519 T arg) { |
1486 handleNSMError(node); | 1520 handleNSMError(node); |
1487 } | 1521 } |
1488 | 1522 |
1489 void visitUnresolvedCompound(Send node, Element element, | 1523 void visitUnresolvedCompound(Send node, Element element, |
1490 AssignmentOperator operator, Node rhs, T arg) { | 1524 AssignmentOperator operator, Node rhs, T arg) { |
1491 handleNSMError(node); | 1525 handleNSMError(node); |
1492 handleNoSend(node); | 1526 handleNoSend(node); |
1493 handleNoSend(node); | 1527 handleNoSend(node); |
1494 } | 1528 } |
(...skipping 19 matching lines...) Expand all Loading... |
1514 handleNoSend(node); | 1548 handleNoSend(node); |
1515 } | 1549 } |
1516 | 1550 |
1517 void visitUnresolvedPrefix( | 1551 void visitUnresolvedPrefix( |
1518 Send node, Element element, IncDecOperator operator, T arg) { | 1552 Send node, Element element, IncDecOperator operator, T arg) { |
1519 handleNSMError(node); | 1553 handleNSMError(node); |
1520 handleNoSend(node); | 1554 handleNoSend(node); |
1521 handleNoSend(node); | 1555 handleNoSend(node); |
1522 } | 1556 } |
1523 | 1557 |
1524 void visitUnresolvedRedirectingFactoryConstructorInvoke(NewExpression node, | 1558 void visitUnresolvedRedirectingFactoryConstructorInvoke( |
1525 ConstructorElement constructor, InterfaceType type, NodeList arguments, | 1559 NewExpression node, |
1526 CallStructure callStructure, T arg) { | 1560 ConstructorElement constructor, |
| 1561 InterfaceType type, |
| 1562 NodeList arguments, |
| 1563 CallStructure callStructure, |
| 1564 T arg) { |
1527 handleNSMError(node); | 1565 handleNSMError(node); |
1528 } | 1566 } |
1529 | 1567 |
1530 void visitUnresolvedSet(Send node, Element element, Node rhs, T arg) { | 1568 void visitUnresolvedSet(Send node, Element element, Node rhs, T arg) { |
1531 handleNSMError(node); | 1569 handleNSMError(node); |
1532 } | 1570 } |
1533 | 1571 |
1534 void visitUnresolvedSetIfNull(Send node, Element element, Node rhs, T arg) { | 1572 void visitUnresolvedSetIfNull(Send node, Element element, Node rhs, T arg) { |
1535 handleNSMError(node); | 1573 handleNSMError(node); |
1536 handleNoSend(node); | 1574 handleNoSend(node); |
(...skipping 13 matching lines...) Expand all Loading... |
1550 handleNoSend(node); | 1588 handleNoSend(node); |
1551 } | 1589 } |
1552 | 1590 |
1553 void visitUnresolvedStaticGetterPrefix(Send node, Element element, | 1591 void visitUnresolvedStaticGetterPrefix(Send node, Element element, |
1554 MethodElement setter, IncDecOperator operator, T arg) { | 1592 MethodElement setter, IncDecOperator operator, T arg) { |
1555 handleNSMError(node); | 1593 handleNSMError(node); |
1556 handleNoSend(node); | 1594 handleNoSend(node); |
1557 handleNoSend(node); | 1595 handleNoSend(node); |
1558 } | 1596 } |
1559 | 1597 |
1560 void visitUnresolvedStaticGetterSetIfNull(Send node, Element element, | 1598 void visitUnresolvedStaticGetterSetIfNull( |
1561 MethodElement setter, Node rhs, T arg) { | 1599 Send node, Element element, MethodElement setter, Node rhs, T arg) { |
1562 handleNSMError(node); | 1600 handleNSMError(node); |
1563 handleNoSend(node); | 1601 handleNoSend(node); |
1564 } | 1602 } |
1565 | 1603 |
1566 void visitUnresolvedStaticSetterCompound(Send node, MethodElement getter, | 1604 void visitUnresolvedStaticSetterCompound(Send node, MethodElement getter, |
1567 Element element, AssignmentOperator operator, Node rhs, T arg) { | 1605 Element element, AssignmentOperator operator, Node rhs, T arg) { |
1568 handleNSMError(node); | 1606 handleNSMError(node); |
1569 handleNoSend(node); | 1607 handleNoSend(node); |
1570 handleNoSend(node); | 1608 handleNoSend(node); |
1571 } | 1609 } |
1572 | 1610 |
1573 void visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter, | 1611 void visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter, |
1574 Element element, IncDecOperator operator, T arg) { | 1612 Element element, IncDecOperator operator, T arg) { |
1575 handleNSMError(node); | 1613 handleNSMError(node); |
1576 handleNoSend(node); | 1614 handleNoSend(node); |
1577 handleNoSend(node); | 1615 handleNoSend(node); |
1578 } | 1616 } |
1579 | 1617 |
1580 void visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter, | 1618 void visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter, |
1581 Element element, IncDecOperator operator, T arg) { | 1619 Element element, IncDecOperator operator, T arg) { |
1582 handleNSMError(node); | 1620 handleNSMError(node); |
1583 handleNoSend(node); | 1621 handleNoSend(node); |
1584 handleNoSend(node); | 1622 handleNoSend(node); |
1585 } | 1623 } |
1586 | 1624 |
1587 void visitUnresolvedStaticSetterSetIfNull(Send node, MethodElement getter, | 1625 void visitUnresolvedStaticSetterSetIfNull( |
1588 Element element, Node rhs, T arg) { | 1626 Send node, MethodElement getter, Element element, Node rhs, T arg) { |
1589 handleNSMError(node); | 1627 handleNSMError(node); |
1590 handleNoSend(node); | 1628 handleNoSend(node); |
1591 } | 1629 } |
1592 | 1630 |
1593 void visitUnresolvedSuperBinary(Send node, Element element, | 1631 void visitUnresolvedSuperBinary(Send node, Element element, |
1594 BinaryOperator operator, Node argument, T arg) { | 1632 BinaryOperator operator, Node argument, T arg) { |
1595 handleNSMSuper(node, element.enclosingClass); | 1633 handleNSMSuper(node, element.enclosingClass); |
1596 } | 1634 } |
1597 | 1635 |
1598 void visitUnresolvedSuperCompound(Send node, Element element, | 1636 void visitUnresolvedSuperCompound(Send node, Element element, |
(...skipping 26 matching lines...) Expand all Loading... |
1625 handleNoSend(node); | 1663 handleNoSend(node); |
1626 } | 1664 } |
1627 | 1665 |
1628 void visitUnresolvedSuperGetterCompound(Send node, Element element, | 1666 void visitUnresolvedSuperGetterCompound(Send node, Element element, |
1629 MethodElement setter, AssignmentOperator operator, Node rhs, T arg) { | 1667 MethodElement setter, AssignmentOperator operator, Node rhs, T arg) { |
1630 handleNSMSuper(node, element.enclosingClass); | 1668 handleNSMSuper(node, element.enclosingClass); |
1631 handleOperator(node); | 1669 handleOperator(node); |
1632 handleSuper(node); | 1670 handleSuper(node); |
1633 } | 1671 } |
1634 | 1672 |
1635 void visitUnresolvedSuperGetterCompoundIndexSet(Send node, Element element, | 1673 void visitUnresolvedSuperGetterCompoundIndexSet( |
1636 MethodElement setter, Node index, AssignmentOperator operator, Node rhs, | 1674 Send node, |
| 1675 Element element, |
| 1676 MethodElement setter, |
| 1677 Node index, |
| 1678 AssignmentOperator operator, |
| 1679 Node rhs, |
1637 T arg) { | 1680 T arg) { |
1638 handleNSMSuper(node, element.enclosingClass); | 1681 handleNSMSuper(node, element.enclosingClass); |
1639 handleOperator(node); | 1682 handleOperator(node); |
1640 handleSuper(node); | 1683 handleSuper(node); |
1641 } | 1684 } |
1642 | 1685 |
1643 void visitUnresolvedSuperGetterIndexPostfix(Send node, Element element, | 1686 void visitUnresolvedSuperGetterIndexPostfix(Send node, Element element, |
1644 MethodElement setter, Node index, IncDecOperator operator, T arg) { | 1687 MethodElement setter, Node index, IncDecOperator operator, T arg) { |
1645 handleNSMSuper(node, element.enclosingClass); | 1688 handleNSMSuper(node, element.enclosingClass); |
1646 handleOperator(node); | 1689 handleOperator(node); |
(...skipping 14 matching lines...) Expand all Loading... |
1661 handleSuper(node); | 1704 handleSuper(node); |
1662 } | 1705 } |
1663 | 1706 |
1664 void visitUnresolvedSuperGetterPrefix(Send node, Element element, | 1707 void visitUnresolvedSuperGetterPrefix(Send node, Element element, |
1665 MethodElement setter, IncDecOperator operator, T arg) { | 1708 MethodElement setter, IncDecOperator operator, T arg) { |
1666 handleNSMSuper(node, element.enclosingClass); | 1709 handleNSMSuper(node, element.enclosingClass); |
1667 handleOperator(node); | 1710 handleOperator(node); |
1668 handleSuper(node); | 1711 handleSuper(node); |
1669 } | 1712 } |
1670 | 1713 |
1671 void visitUnresolvedSuperGetterSetIfNull(Send node, Element element, | 1714 void visitUnresolvedSuperGetterSetIfNull( |
1672 MethodElement setter, Node rhs, T arg) { | 1715 Send node, Element element, MethodElement setter, Node rhs, T arg) { |
1673 handleNSMSuper(node, element.enclosingClass); | 1716 handleNSMSuper(node, element.enclosingClass); |
1674 handleSuper(node); | 1717 handleSuper(node); |
1675 } | 1718 } |
1676 | 1719 |
1677 void visitUnresolvedSuperIndex( | 1720 void visitUnresolvedSuperIndex( |
1678 Send node, Element element, Node index, T arg) { | 1721 Send node, Element element, Node index, T arg) { |
1679 handleNSMSuper(node, element.enclosingClass); | 1722 handleNSMSuper(node, element.enclosingClass); |
1680 } | 1723 } |
1681 | 1724 |
1682 void visitUnresolvedSuperIndexPostfix( | 1725 void visitUnresolvedSuperIndexPostfix( |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1717 handleNSMSuper(node, element.enclosingClass); | 1760 handleNSMSuper(node, element.enclosingClass); |
1718 } | 1761 } |
1719 | 1762 |
1720 void visitUnresolvedSuperSetterCompound(Send node, MethodElement getter, | 1763 void visitUnresolvedSuperSetterCompound(Send node, MethodElement getter, |
1721 Element element, AssignmentOperator operator, Node rhs, T arg) { | 1764 Element element, AssignmentOperator operator, Node rhs, T arg) { |
1722 handleSuper(node); | 1765 handleSuper(node); |
1723 handleOperator(node); | 1766 handleOperator(node); |
1724 handleNSMSuper(node, element.enclosingClass); | 1767 handleNSMSuper(node, element.enclosingClass); |
1725 } | 1768 } |
1726 | 1769 |
1727 void visitUnresolvedSuperSetterCompoundIndexSet(Send node, | 1770 void visitUnresolvedSuperSetterCompoundIndexSet( |
1728 MethodElement getter, Element element, Node index, | 1771 Send node, |
1729 AssignmentOperator operator, Node rhs, T arg) { | 1772 MethodElement getter, |
| 1773 Element element, |
| 1774 Node index, |
| 1775 AssignmentOperator operator, |
| 1776 Node rhs, |
| 1777 T arg) { |
1730 handleSuper(node); | 1778 handleSuper(node); |
1731 handleOperator(node); | 1779 handleOperator(node); |
1732 handleNSMSuper(node, element.enclosingClass); | 1780 handleNSMSuper(node, element.enclosingClass); |
1733 } | 1781 } |
1734 | 1782 |
1735 void visitUnresolvedSuperSetterIndexPostfix(Send node, | 1783 void visitUnresolvedSuperSetterIndexPostfix( |
1736 MethodElement indexFunction, Element element, Node index, | 1784 Send node, |
1737 IncDecOperator operator, T arg) { | 1785 MethodElement indexFunction, |
| 1786 Element element, |
| 1787 Node index, |
| 1788 IncDecOperator operator, |
| 1789 T arg) { |
1738 handleSuper(node); | 1790 handleSuper(node); |
1739 handleOperator(node); | 1791 handleOperator(node); |
1740 handleNSMSuper(node, element.enclosingClass); | 1792 handleNSMSuper(node, element.enclosingClass); |
1741 } | 1793 } |
1742 | 1794 |
1743 void visitUnresolvedSuperSetterIndexPrefix(Send node, | 1795 void visitUnresolvedSuperSetterIndexPrefix( |
1744 MethodElement indexFunction, Element element, Node index, | 1796 Send node, |
1745 IncDecOperator operator, T arg) { | 1797 MethodElement indexFunction, |
| 1798 Element element, |
| 1799 Node index, |
| 1800 IncDecOperator operator, |
| 1801 T arg) { |
1746 handleSuper(node); | 1802 handleSuper(node); |
1747 handleOperator(node); | 1803 handleOperator(node); |
1748 handleNSMSuper(node, element.enclosingClass); | 1804 handleNSMSuper(node, element.enclosingClass); |
1749 } | 1805 } |
1750 | 1806 |
1751 void visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter, | 1807 void visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter, |
1752 Element element, IncDecOperator operator, T arg) { | 1808 Element element, IncDecOperator operator, T arg) { |
1753 handleSuper(node); | 1809 handleSuper(node); |
1754 handleOperator(node); | 1810 handleOperator(node); |
1755 handleNSMSuper(node, element.enclosingClass); | 1811 handleNSMSuper(node, element.enclosingClass); |
1756 } | 1812 } |
1757 | 1813 |
1758 void visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter, | 1814 void visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter, |
1759 Element element, IncDecOperator operator, T arg) { | 1815 Element element, IncDecOperator operator, T arg) { |
1760 handleSuper(node); | 1816 handleSuper(node); |
1761 handleOperator(node); | 1817 handleOperator(node); |
1762 handleNSMSuper(node, element.enclosingClass); | 1818 handleNSMSuper(node, element.enclosingClass); |
1763 } | 1819 } |
1764 | 1820 |
1765 void visitUnresolvedSuperSetterSetIfNull(Send node, MethodElement getter, | 1821 void visitUnresolvedSuperSetterSetIfNull( |
1766 Element element, Node rhs, T arg) { | 1822 Send node, MethodElement getter, Element element, Node rhs, T arg) { |
1767 handleSuper(node); | 1823 handleSuper(node); |
1768 handleNSMSuper(node, element.enclosingClass); | 1824 handleNSMSuper(node, element.enclosingClass); |
1769 } | 1825 } |
1770 | 1826 |
1771 void visitUnresolvedSuperUnary( | 1827 void visitUnresolvedSuperUnary( |
1772 Send node, UnaryOperator operator, Element element, T arg) { | 1828 Send node, UnaryOperator operator, Element element, T arg) { |
1773 handleNSMSuper(node, element.enclosingClass); | 1829 handleNSMSuper(node, element.enclosingClass); |
1774 } | 1830 } |
1775 | 1831 |
1776 void visitUnresolvedTopLevelGetterCompound(Send node, Element element, | 1832 void visitUnresolvedTopLevelGetterCompound(Send node, Element element, |
(...skipping 10 matching lines...) Expand all Loading... |
1787 handleNoSend(node); | 1843 handleNoSend(node); |
1788 } | 1844 } |
1789 | 1845 |
1790 void visitUnresolvedTopLevelGetterPrefix(Send node, Element element, | 1846 void visitUnresolvedTopLevelGetterPrefix(Send node, Element element, |
1791 MethodElement setter, IncDecOperator operator, T arg) { | 1847 MethodElement setter, IncDecOperator operator, T arg) { |
1792 handleNSMError(node); | 1848 handleNSMError(node); |
1793 handleNoSend(node); | 1849 handleNoSend(node); |
1794 handleNoSend(node); | 1850 handleNoSend(node); |
1795 } | 1851 } |
1796 | 1852 |
1797 void visitUnresolvedTopLevelGetterSetIfNull(Send node, Element element, | 1853 void visitUnresolvedTopLevelGetterSetIfNull( |
1798 MethodElement setter, Node rhs, T arg) { | 1854 Send node, Element element, MethodElement setter, Node rhs, T arg) { |
1799 handleNSMError(node); | 1855 handleNSMError(node); |
1800 handleNoSend(node); | 1856 handleNoSend(node); |
1801 } | 1857 } |
1802 | 1858 |
1803 void visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter, | 1859 void visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter, |
1804 Element element, AssignmentOperator operator, Node rhs, T arg) { | 1860 Element element, AssignmentOperator operator, Node rhs, T arg) { |
1805 handleNSMError(node); | 1861 handleNSMError(node); |
1806 handleNoSend(node); | 1862 handleNoSend(node); |
1807 handleNoSend(node); | 1863 handleNoSend(node); |
1808 } | 1864 } |
1809 | 1865 |
1810 void visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter, | 1866 void visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter, |
1811 Element element, IncDecOperator operator, T arg) { | 1867 Element element, IncDecOperator operator, T arg) { |
1812 handleNSMError(node); | 1868 handleNSMError(node); |
1813 handleNoSend(node); | 1869 handleNoSend(node); |
1814 handleNoSend(node); | 1870 handleNoSend(node); |
1815 } | 1871 } |
1816 | 1872 |
1817 void visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter, | 1873 void visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter, |
1818 Element element, IncDecOperator operator, T arg) { | 1874 Element element, IncDecOperator operator, T arg) { |
1819 handleNSMError(node); | 1875 handleNSMError(node); |
1820 handleNoSend(node); | 1876 handleNoSend(node); |
1821 handleNoSend(node); | 1877 handleNoSend(node); |
1822 } | 1878 } |
1823 | 1879 |
1824 void visitUnresolvedTopLevelSetterSetIfNull(Send node, MethodElement getter, | 1880 void visitUnresolvedTopLevelSetterSetIfNull( |
1825 Element element, Node rhs, T arg) { | 1881 Send node, MethodElement getter, Element element, Node rhs, T arg) { |
1826 handleNSMError(node); | 1882 handleNSMError(node); |
1827 handleNoSend(node); | 1883 handleNoSend(node); |
1828 } | 1884 } |
1829 | 1885 |
1830 // Static | 1886 // Static |
1831 | 1887 |
1832 void visitConstantGet(Send node, ConstantExpression constant, T arg) { | 1888 void visitConstantGet(Send node, ConstantExpression constant, T arg) { |
1833 handleStatic(node); | 1889 handleStatic(node); |
1834 } | 1890 } |
1835 | 1891 |
1836 void visitConstantInvoke(Send node, ConstantExpression constant, | 1892 void visitConstantInvoke(Send node, ConstantExpression constant, |
1837 NodeList arguments, CallStructure callStreucture, T arg) { | 1893 NodeList arguments, CallStructure callStreucture, T arg) { |
1838 handleStatic(node); | 1894 handleStatic(node); |
1839 } | 1895 } |
1840 | 1896 |
1841 void visitFactoryConstructorInvoke(NewExpression node, | 1897 void visitFactoryConstructorInvoke( |
1842 ConstructorElement constructor, InterfaceType type, NodeList arguments, | 1898 NewExpression node, |
1843 CallStructure callStructure, T arg) { | 1899 ConstructorElement constructor, |
| 1900 InterfaceType type, |
| 1901 NodeList arguments, |
| 1902 CallStructure callStructure, |
| 1903 T arg) { |
1844 handleStatic(node); | 1904 handleStatic(node); |
1845 } | 1905 } |
1846 | 1906 |
1847 void visitStaticFieldGet(Send node, FieldElement field, T arg) { | 1907 void visitStaticFieldGet(Send node, FieldElement field, T arg) { |
1848 handleStatic(node); | 1908 handleStatic(node); |
1849 } | 1909 } |
1850 | 1910 |
1851 void visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, T arg) { | 1911 void visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, T arg) { |
1852 handleStatic(node); | 1912 handleStatic(node); |
1853 } | 1913 } |
(...skipping 20 matching lines...) Expand all Loading... |
1874 void visitStaticGetterSet( | 1934 void visitStaticGetterSet( |
1875 SendSet node, FunctionElement getter, Node rhs, T arg) { | 1935 SendSet node, FunctionElement getter, Node rhs, T arg) { |
1876 handleStatic(node); | 1936 handleStatic(node); |
1877 } | 1937 } |
1878 | 1938 |
1879 void visitStaticSetterSet( | 1939 void visitStaticSetterSet( |
1880 SendSet node, FunctionElement setter, Node rhs, T arg) { | 1940 SendSet node, FunctionElement setter, Node rhs, T arg) { |
1881 handleStatic(node); | 1941 handleStatic(node); |
1882 } | 1942 } |
1883 | 1943 |
1884 void visitStaticGetterSetterSetIfNull( | 1944 void visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter, |
1885 Send node, | 1945 FunctionElement setter, Node rhs, T arg) { |
1886 FunctionElement getter, | |
1887 FunctionElement setter, | |
1888 Node rhs, | |
1889 T arg) { | |
1890 handleStatic(node); | 1946 handleStatic(node); |
1891 handleStatic(node); | 1947 handleStatic(node); |
1892 } | 1948 } |
1893 | 1949 |
1894 void visitStaticMethodSetterSetIfNull( | 1950 void visitStaticMethodSetterSetIfNull( |
1895 Send node, | 1951 Send node, MethodElement method, MethodElement setter, Node rhs, T arg) { |
1896 MethodElement method, | |
1897 MethodElement setter, | |
1898 Node rhs, | |
1899 T arg) { | |
1900 handleStatic(node); | 1952 handleStatic(node); |
1901 handleStatic(node); | 1953 handleStatic(node); |
1902 } | 1954 } |
1903 | 1955 |
1904 void visitStaticMethodSetIfNull( | 1956 void visitStaticMethodSetIfNull( |
1905 Send node, | 1957 Send node, FunctionElement method, Node rhs, T arg) { |
1906 FunctionElement method, | |
1907 Node rhs, | |
1908 T arg) { | |
1909 handleStatic(node); | 1958 handleStatic(node); |
1910 handleNSMError(node); | 1959 handleNSMError(node); |
1911 } | 1960 } |
1912 | 1961 |
1913 void visitTopLevelFieldGet(Send node, FieldElement field, T arg) { | 1962 void visitTopLevelFieldGet(Send node, FieldElement field, T arg) { |
1914 handleStatic(node); | 1963 handleStatic(node); |
1915 } | 1964 } |
1916 | 1965 |
1917 void visitTopLevelFieldSet( | 1966 void visitTopLevelFieldSet( |
1918 SendSet node, FieldElement field, Node rhs, T arg) { | 1967 SendSet node, FieldElement field, Node rhs, T arg) { |
(...skipping 19 matching lines...) Expand all Loading... |
1938 handleStatic(node); | 1987 handleStatic(node); |
1939 } | 1988 } |
1940 | 1989 |
1941 void visitTopLevelSetterSet( | 1990 void visitTopLevelSetterSet( |
1942 SendSet node, FunctionElement setter, Node rhs, T arg) { | 1991 SendSet node, FunctionElement setter, Node rhs, T arg) { |
1943 handleStatic(node); | 1992 handleStatic(node); |
1944 } | 1993 } |
1945 | 1994 |
1946 // Virtual | 1995 // Virtual |
1947 | 1996 |
1948 void visitSuperCompoundIndexSet(SendSet node, MethodElement getter, | 1997 void visitSuperCompoundIndexSet( |
1949 MethodElement setter, Node index, AssignmentOperator operator, Node rhs, | 1998 SendSet node, |
| 1999 MethodElement getter, |
| 2000 MethodElement setter, |
| 2001 Node index, |
| 2002 AssignmentOperator operator, |
| 2003 Node rhs, |
1950 T arg) { | 2004 T arg) { |
1951 handleSuper(node); | 2005 handleSuper(node); |
1952 handleOperator(node); | 2006 handleOperator(node); |
1953 handleSuper(node); | 2007 handleSuper(node); |
1954 } | 2008 } |
1955 | 2009 |
1956 void visitThisGet(Identifier node, T arg) { | 2010 void visitThisGet(Identifier node, T arg) { |
1957 handleLocal(node); // TODO(sigmund): should we add a metric for "this"? | 2011 handleLocal(node); // TODO(sigmund): should we add a metric for "this"? |
1958 } | 2012 } |
1959 | 2013 |
(...skipping 26 matching lines...) Expand all Loading... |
1986 void errorUndefinedBinaryExpression( | 2040 void errorUndefinedBinaryExpression( |
1987 Send node, Node left, Operator operator, Node right, T arg) { | 2041 Send node, Node left, Operator operator, Node right, T arg) { |
1988 handleNoSend(node); | 2042 handleNoSend(node); |
1989 } | 2043 } |
1990 | 2044 |
1991 void errorUndefinedUnaryExpression( | 2045 void errorUndefinedUnaryExpression( |
1992 Send node, Operator operator, Node expression, T arg) { | 2046 Send node, Operator operator, Node expression, T arg) { |
1993 handleNoSend(node); | 2047 handleNoSend(node); |
1994 } | 2048 } |
1995 | 2049 |
1996 void errorInvalidGet( | 2050 void errorInvalidGet(Send node, ErroneousElement error, T arg) { |
1997 Send node, | |
1998 ErroneousElement error, | |
1999 T arg) { | |
2000 handleNoSend(node); | 2051 handleNoSend(node); |
2001 } | 2052 } |
2002 | 2053 |
2003 void errorInvalidInvoke( | 2054 void errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments, |
2004 Send node, | 2055 Selector selector, T arg) { |
2005 ErroneousElement error, | |
2006 NodeList arguments, | |
2007 Selector selector, | |
2008 T arg) { | |
2009 handleNoSend(node); | 2056 handleNoSend(node); |
2010 } | 2057 } |
2011 | 2058 |
2012 void errorInvalidSet( | 2059 void errorInvalidSet(Send node, ErroneousElement error, Node rhs, T arg) { |
2013 Send node, | |
2014 ErroneousElement error, | |
2015 Node rhs, | |
2016 T arg) { | |
2017 handleNoSend(node); | 2060 handleNoSend(node); |
2018 } | 2061 } |
2019 | 2062 |
2020 void errorInvalidSetIfNull( | 2063 void errorInvalidSetIfNull( |
2021 Send node, ErroneousElement error, Node rhs, T arg) { | 2064 Send node, ErroneousElement error, Node rhs, T arg) { |
2022 handleNoSend(node); | 2065 handleNoSend(node); |
2023 handleNoSend(node); | 2066 handleNoSend(node); |
2024 } | 2067 } |
2025 | 2068 |
2026 | |
2027 void errorInvalidPrefix( | 2069 void errorInvalidPrefix( |
2028 Send node, | 2070 Send node, ErroneousElement error, IncDecOperator operator, T arg) { |
2029 ErroneousElement error, | |
2030 IncDecOperator operator, | |
2031 T arg) { | |
2032 handleNoSend(node); | 2071 handleNoSend(node); |
2033 } | 2072 } |
2034 | 2073 |
2035 void errorInvalidPostfix( | 2074 void errorInvalidPostfix( |
2036 Send node, | 2075 Send node, ErroneousElement error, IncDecOperator operator, T arg) { |
2037 ErroneousElement error, | |
2038 IncDecOperator operator, | |
2039 T arg) { | |
2040 handleNoSend(node); | 2076 handleNoSend(node); |
2041 } | 2077 } |
2042 | 2078 |
2043 void errorInvalidCompound( | 2079 void errorInvalidCompound(Send node, ErroneousElement error, |
2044 Send node, | 2080 AssignmentOperator operator, Node rhs, T arg) { |
2045 ErroneousElement error, | |
2046 AssignmentOperator operator, | |
2047 Node rhs, | |
2048 T arg) { | |
2049 handleNoSend(node); | 2081 handleNoSend(node); |
2050 } | 2082 } |
2051 | 2083 |
2052 void errorInvalidUnary( | 2084 void errorInvalidUnary( |
2053 Send node, | 2085 Send node, UnaryOperator operator, ErroneousElement error, T arg) { |
2054 UnaryOperator operator, | |
2055 ErroneousElement error, | |
2056 T arg) { | |
2057 handleNoSend(node); | 2086 handleNoSend(node); |
2058 } | 2087 } |
2059 | 2088 |
2060 void errorInvalidEquals( | 2089 void errorInvalidEquals( |
2061 Send node, | 2090 Send node, ErroneousElement error, Node right, T arg) { |
2062 ErroneousElement error, | |
2063 Node right, | |
2064 T arg) { | |
2065 handleNoSend(node); | 2091 handleNoSend(node); |
2066 } | 2092 } |
2067 | 2093 |
2068 void errorInvalidNotEquals( | 2094 void errorInvalidNotEquals( |
2069 Send node, | 2095 Send node, ErroneousElement error, Node right, T arg) { |
2070 ErroneousElement error, | |
2071 Node right, | |
2072 T arg) { | |
2073 handleNoSend(node); | 2096 handleNoSend(node); |
2074 } | 2097 } |
2075 | 2098 |
2076 void errorInvalidBinary( | 2099 void errorInvalidBinary(Send node, ErroneousElement error, |
2077 Send node, | 2100 BinaryOperator operator, Node right, T arg) { |
2078 ErroneousElement error, | |
2079 BinaryOperator operator, | |
2080 Node right, | |
2081 T arg) { | |
2082 handleNoSend(node); | 2101 handleNoSend(node); |
2083 } | 2102 } |
2084 | 2103 |
2085 void errorInvalidIndex( | 2104 void errorInvalidIndex(Send node, ErroneousElement error, Node index, T arg) { |
2086 Send node, | |
2087 ErroneousElement error, | |
2088 Node index, | |
2089 T arg) { | |
2090 handleNoSend(node); | 2105 handleNoSend(node); |
2091 } | 2106 } |
2092 | 2107 |
2093 void errorInvalidIndexSet( | 2108 void errorInvalidIndexSet( |
2094 Send node, | 2109 Send node, ErroneousElement error, Node index, Node rhs, T arg) { |
2095 ErroneousElement error, | |
2096 Node index, | |
2097 Node rhs, | |
2098 T arg) { | |
2099 handleNoSend(node); | 2110 handleNoSend(node); |
2100 } | 2111 } |
2101 | 2112 |
2102 void errorInvalidCompoundIndexSet( | 2113 void errorInvalidCompoundIndexSet(Send node, ErroneousElement error, |
2103 Send node, | 2114 Node index, AssignmentOperator operator, Node rhs, T arg) { |
2104 ErroneousElement error, | |
2105 Node index, | |
2106 AssignmentOperator operator, | |
2107 Node rhs, | |
2108 T arg) { | |
2109 handleNoSend(node); | 2115 handleNoSend(node); |
2110 handleNoSend(node); | 2116 handleNoSend(node); |
2111 handleNoSend(node); | 2117 handleNoSend(node); |
2112 } | 2118 } |
2113 | 2119 |
2114 void errorInvalidIndexPrefix( | 2120 void errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index, |
2115 Send node, | 2121 IncDecOperator operator, T arg) { |
2116 ErroneousElement error, | |
2117 Node index, | |
2118 IncDecOperator operator, | |
2119 T arg) { | |
2120 handleNoSend(node); | 2122 handleNoSend(node); |
2121 handleNoSend(node); | 2123 handleNoSend(node); |
2122 } | 2124 } |
2123 | 2125 |
2124 void errorInvalidIndexPostfix( | 2126 void errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index, |
2125 Send node, | 2127 IncDecOperator operator, T arg) { |
2126 ErroneousElement error, | |
2127 Node index, | |
2128 IncDecOperator operator, | |
2129 T arg) { | |
2130 handleNoSend(node); | 2128 handleNoSend(node); |
2131 handleNoSend(node); | 2129 handleNoSend(node); |
2132 } | 2130 } |
2133 | 2131 |
2134 void previsitDeferredAccess( | 2132 void previsitDeferredAccess(Send node, PrefixElement prefix, T arg) {} |
2135 Send node, | |
2136 PrefixElement prefix, | |
2137 T arg) { | |
2138 } | |
2139 | |
2140 | 2133 |
2141 void visitAs(Send node, Node expression, DartType type, T arg) { | 2134 void visitAs(Send node, Node expression, DartType type, T arg) { |
2142 handleNoSend(node); | 2135 handleNoSend(node); |
2143 } | 2136 } |
2144 | 2137 |
2145 void visitClassTypeLiteralCompound(Send node, ConstantExpression constant, | 2138 void visitClassTypeLiteralCompound(Send node, ConstantExpression constant, |
2146 AssignmentOperator operator, Node rhs, T arg) { | 2139 AssignmentOperator operator, Node rhs, T arg) { |
2147 handleStatic(node); | 2140 handleStatic(node); |
2148 handleNSMError(node); | 2141 handleNSMError(node); |
2149 handleNoSend(node); | 2142 handleNoSend(node); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2219 handleNSMError(node); | 2212 handleNSMError(node); |
2220 } | 2213 } |
2221 | 2214 |
2222 void visitDynamicTypeLiteralSetIfNull( | 2215 void visitDynamicTypeLiteralSetIfNull( |
2223 SendSet node, ConstantExpression constant, Node rhs, T arg) { | 2216 SendSet node, ConstantExpression constant, Node rhs, T arg) { |
2224 handleStatic(node); | 2217 handleStatic(node); |
2225 handleNSMError(node); | 2218 handleNSMError(node); |
2226 } | 2219 } |
2227 | 2220 |
2228 @override | 2221 @override |
2229 errorInvalidIndexSetIfNull(SendSet node, ErroneousElement error, Node index, | 2222 errorInvalidIndexSetIfNull( |
2230 Node rhs, T arg) { | 2223 SendSet node, ErroneousElement error, Node index, Node rhs, T arg) { |
2231 handleNoSend(node); | 2224 handleNoSend(node); |
2232 } | 2225 } |
2233 | 2226 |
2234 @override | 2227 @override |
2235 visitIndexSetIfNull(SendSet node, Node receiver, Node index, Node rhs, | 2228 visitIndexSetIfNull( |
2236 T arg) { | 2229 SendSet node, Node receiver, Node index, Node rhs, T arg) { |
2237 handleIndex(node); // t1 = receiver[index] | 2230 handleIndex(node); // t1 = receiver[index] |
2238 handleIndex(node); // receiver[index] = t2 | 2231 handleIndex(node); // receiver[index] = t2 |
2239 } | 2232 } |
2240 | 2233 |
2241 @override | 2234 @override |
2242 visitSuperIndexSetIfNull(SendSet node, MethodElement getter, | 2235 visitSuperIndexSetIfNull(SendSet node, MethodElement getter, |
2243 MethodElement setter, Node index, Node rhs, T arg) { | 2236 MethodElement setter, Node index, Node rhs, T arg) { |
2244 handleSuper(node); // t1 = super[index] | 2237 handleSuper(node); // t1 = super[index] |
2245 handleSuper(node); // super[index] = t2 | 2238 handleSuper(node); // super[index] = t2 |
2246 } | 2239 } |
2247 | 2240 |
2248 @override | 2241 @override |
2249 visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element, | 2242 visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element, |
2250 MethodElement setter, Node index, Node rhs, T arg) { | 2243 MethodElement setter, Node index, Node rhs, T arg) { |
2251 handleNSMSuper(node, element.enclosingClass); | 2244 handleNSMSuper(node, element.enclosingClass); |
2252 handleNSMSuper(node, element.enclosingClass); | 2245 handleNSMSuper(node, element.enclosingClass); |
2253 } | 2246 } |
2254 | 2247 |
2255 @override | 2248 @override |
2256 visitUnresolvedSuperIndexSetIfNull(Send node, Element element, Node index, | 2249 visitUnresolvedSuperIndexSetIfNull( |
2257 Node rhs, T arg) { | 2250 Send node, Element element, Node index, Node rhs, T arg) { |
2258 handleNSMSuper(node, element.enclosingClass); | 2251 handleNSMSuper(node, element.enclosingClass); |
2259 handleNSMSuper(node, element.enclosingClass); | 2252 handleNSMSuper(node, element.enclosingClass); |
2260 } | 2253 } |
2261 | 2254 |
2262 @override | 2255 @override |
2263 visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter, | 2256 visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter, |
2264 Element element, Node index, Node rhs, T arg) { | 2257 Element element, Node index, Node rhs, T arg) { |
2265 handleSuper(node); // t1 = super[index] | 2258 handleSuper(node); // t1 = super[index] |
2266 handleNSMSuper(node, element.enclosingClass); | 2259 handleNSMSuper(node, element.enclosingClass); |
2267 } | 2260 } |
(...skipping 21 matching lines...) Expand all Loading... |
2289 void visitNot(Send node, Node expression, T arg) { | 2282 void visitNot(Send node, Node expression, T arg) { |
2290 handleNoSend(node); | 2283 handleNoSend(node); |
2291 } | 2284 } |
2292 | 2285 |
2293 String last; | 2286 String last; |
2294 _checkInvariant(node, String msg) { | 2287 _checkInvariant(node, String msg) { |
2295 msg = '$msg ${recursiveDiagnosticString(measurements, Metric.send)}'; | 2288 msg = '$msg ${recursiveDiagnosticString(measurements, Metric.send)}'; |
2296 if (!measurements.checkInvariant(Metric.send) || | 2289 if (!measurements.checkInvariant(Metric.send) || |
2297 !measurements.checkInvariant(Metric.monomorphicSend) || | 2290 !measurements.checkInvariant(Metric.monomorphicSend) || |
2298 !measurements.checkInvariant(Metric.polymorphicSend)) { | 2291 !measurements.checkInvariant(Metric.polymorphicSend)) { |
2299 reporter.reportErrorMessage(node, | 2292 reporter.reportErrorMessage(node, MessageKind.GENERIC, |
2300 MessageKind.GENERIC, {'text': 'bad\n-- $msg\nlast:\n-- $last\n'}); | 2293 {'text': 'bad\n-- $msg\nlast:\n-- $last\n'}); |
2301 last = msg; | 2294 last = msg; |
2302 } else { | 2295 } else { |
2303 last = msg; | 2296 last = msg; |
2304 } | 2297 } |
2305 } | 2298 } |
2306 } | 2299 } |
2307 | 2300 |
2308 /// Visitor that collects statistics for a single function. | 2301 /// Visitor that collects statistics for a single function. |
2309 class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T> | 2302 class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T> |
2310 implements SemanticSendVisitor<dynamic, T> { | 2303 implements SemanticSendVisitor<dynamic, T> { |
2311 final DiagnosticReporter reporter; | 2304 final DiagnosticReporter reporter; |
2312 final _StatsVisitor statsVisitor; | 2305 final _StatsVisitor statsVisitor; |
2313 Measurements get measurements => statsVisitor.measurements; | 2306 Measurements get measurements => statsVisitor.measurements; |
2314 _StatsTraversalVisitor( | 2307 _StatsTraversalVisitor( |
2315 Compiler compiler, TreeElements elements, Uri sourceUri) | 2308 Compiler compiler, TreeElements elements, Uri sourceUri) |
2316 : reporter = compiler.reporter, | 2309 : reporter = compiler.reporter, |
2317 statsVisitor = new _StatsVisitor(compiler.reporter, elements, | 2310 statsVisitor = new _StatsVisitor( |
2318 // TODO(sigmund): accept a list of analyses, so we can compare them | 2311 compiler.reporter, |
2319 // together. | 2312 elements, |
2320 true | 2313 // TODO(sigmund): accept a list of analyses, so we can compare t
hem |
2321 ? new TrustTypesAnalysisResult(elements, compiler.world) | 2314 // together. |
2322 : new NaiveAnalysisResult(), | 2315 true |
| 2316 ? new TrustTypesAnalysisResult(elements, compiler.world) |
| 2317 : new NaiveAnalysisResult(), |
2323 sourceUri), | 2318 sourceUri), |
2324 super(elements); | 2319 super(elements); |
2325 | 2320 |
2326 void visitSend(Send node) { | 2321 void visitSend(Send node) { |
2327 try { | 2322 try { |
2328 node.accept(statsVisitor); | 2323 node.accept(statsVisitor); |
2329 } catch (e, t) { | 2324 } catch (e, t) { |
2330 reporter.reportErrorMessage( | 2325 reporter |
2331 node, MessageKind.GENERIC, {'text': '$e\n$t'}); | 2326 .reportErrorMessage(node, MessageKind.GENERIC, {'text': '$e\n$t'}); |
2332 } | 2327 } |
2333 super.visitSend(node); | 2328 super.visitSend(node); |
2334 } | 2329 } |
2335 | 2330 |
2336 void visitNewExpression(NewExpression node) { | 2331 void visitNewExpression(NewExpression node) { |
2337 try { | 2332 try { |
2338 node.accept(statsVisitor); | 2333 node.accept(statsVisitor); |
2339 } catch (e, t) { | 2334 } catch (e, t) { |
2340 reporter.reportErrorMessage( | 2335 reporter |
2341 node, MessageKind.GENERIC, {'text': '$e\n$t'}); | 2336 .reportErrorMessage(node, MessageKind.GENERIC, {'text': '$e\n$t'}); |
2342 } | 2337 } |
2343 super.visitNewExpression(node); | 2338 super.visitNewExpression(node); |
2344 } | 2339 } |
2345 } | 2340 } |
2346 | 2341 |
2347 /// Helper to visit elements recursively | 2342 /// Helper to visit elements recursively |
2348 // TODO(sigmund): maybe generalize and move to elements/visitor.dart? | 2343 // TODO(sigmund): maybe generalize and move to elements/visitor.dart? |
2349 abstract class RecursiveElementVisitor<R, A> extends ElementVisitor<R, A> { | 2344 abstract class RecursiveElementVisitor<R, A> extends ElementVisitor<R, A> { |
2350 | |
2351 @override | 2345 @override |
2352 R visitWarnOnUseElement(WarnOnUseElement e, A arg) => | 2346 R visitWarnOnUseElement(WarnOnUseElement e, A arg) => |
2353 e.wrappedElement.accept(this, arg); | 2347 e.wrappedElement.accept(this, arg); |
2354 | 2348 |
2355 R visitScopeContainerElement(ScopeContainerElement e, A arg) { | 2349 R visitScopeContainerElement(ScopeContainerElement e, A arg) { |
2356 e.forEachLocalMember((l) => l.accept(this, arg)); | 2350 e.forEachLocalMember((l) => l.accept(this, arg)); |
2357 return null; | 2351 return null; |
2358 } | 2352 } |
2359 | 2353 |
2360 @override | 2354 @override |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2421 @override | 2415 @override |
2422 R visitClosureFieldElement(ClosureFieldElement e, A arg) { | 2416 R visitClosureFieldElement(ClosureFieldElement e, A arg) { |
2423 return visitVariableElement(e, arg); | 2417 return visitVariableElement(e, arg); |
2424 } | 2418 } |
2425 } | 2419 } |
2426 | 2420 |
2427 // TODO(sigmund): get rid of debug messages. | 2421 // TODO(sigmund): get rid of debug messages. |
2428 _debug(String message) { | 2422 _debug(String message) { |
2429 print('[33mdebug:[0m $message'); | 2423 print('[33mdebug:[0m $message'); |
2430 } | 2424 } |
OLD | NEW |