| 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 | 
|---|