| Index: pkg/compiler/lib/src/info/send_info.dart
|
| diff --git a/pkg/compiler/lib/src/info/send_info.dart b/pkg/compiler/lib/src/info/send_info.dart
|
| index 0985360bdb1369a3b29490a5170fadf04b4f6531..b0f5f1e82b746c20a346b9edc2f16092d5f95182 100644
|
| --- a/pkg/compiler/lib/src/info/send_info.dart
|
| +++ b/pkg/compiler/lib/src/info/send_info.dart
|
| @@ -6,28 +6,22 @@
|
| library compiler.src.info.send_info;
|
|
|
| import 'package:dart2js_info/src/measurements.dart';
|
| -import 'package:dart2js_info/src/util.dart' show
|
| - recursiveDiagnosticString;
|
| +import 'package:dart2js_info/src/util.dart' show recursiveDiagnosticString;
|
|
|
| import '../common.dart';
|
| -import '../compiler.dart' show
|
| - Compiler;
|
| +import '../compiler.dart' show Compiler;
|
| import '../dart_types.dart';
|
| import '../closure.dart';
|
| import '../elements/elements.dart';
|
| -import '../elements/visitor.dart' show
|
| - ElementVisitor;
|
| +import '../elements/visitor.dart' show ElementVisitor;
|
| import '../resolution/operators.dart';
|
| import '../resolution/semantic_visitor.dart';
|
| import '../resolution/tree_elements.dart';
|
| import '../constants/expressions.dart';
|
| -import '../parser/partial_elements.dart' show
|
| - PartialElement;
|
| +import '../parser/partial_elements.dart' show PartialElement;
|
| import '../tree/tree.dart';
|
| -import '../universe/call_structure.dart' show
|
| - CallStructure;
|
| -import '../universe/selector.dart' show
|
| - Selector;
|
| +import '../universe/call_structure.dart' show CallStructure;
|
| +import '../universe/selector.dart' show Selector;
|
|
|
| import 'analysis_result.dart';
|
| import 'naive_analysis_result.dart';
|
| @@ -35,8 +29,7 @@ import 'trusted_types_analysis_result.dart';
|
|
|
| /// Collects a set of [Measurements] about send expressions in the function [f].
|
| // TODO(sigmund): collect information on initializers too.
|
| -Measurements collectSendMeasurements(FunctionElement f,
|
| - Compiler compiler) {
|
| +Measurements collectSendMeasurements(FunctionElement f, Compiler compiler) {
|
| DiagnosticReporter reporter = compiler.reporter;
|
| return reporter.withCurrentElement(f, () {
|
| // TODO(sigmund): enable for platform too.
|
| @@ -44,7 +37,7 @@ Measurements collectSendMeasurements(FunctionElement f,
|
| var name = _qualifiedName(f);
|
| if (!f.hasNode) {
|
| if (f is PartialElement) return const Measurements.unreachableFunction();
|
| - assert (f is ConstructorElement && f.isSynthesized);
|
| + assert(f is ConstructorElement && f.isSynthesized);
|
| // TODO(sigmund): measure synthethic forwarding sends, measure
|
| // initializers
|
| return new Measurements.reachableFunction();
|
| @@ -60,12 +53,11 @@ Measurements collectSendMeasurements(FunctionElement f,
|
| }
|
| var def = resolvedAst.elements.getFunctionDefinition(resolvedAst.node);
|
| if (def == null) {
|
| - assert (f is PartialElement);
|
| + assert(f is PartialElement);
|
| return const Measurements.unreachableFunction();
|
| }
|
|
|
| - var visitor = new _StatsTraversalVisitor(
|
| - compiler, resolvedAst.elements,
|
| + var visitor = new _StatsTraversalVisitor(compiler, resolvedAst.elements,
|
| reporter.spanFromSpannable(resolvedAst.node).uri);
|
| resolvedAst.node.accept(visitor);
|
| return visitor.measurements;
|
| @@ -81,7 +73,6 @@ _qualifiedName(FunctionElement f) {
|
| class _StatsVisitor<T> extends Visitor
|
| with SemanticSendResolvedMixin<dynamic, T>
|
| implements SemanticSendVisitor<dynamic, T> {
|
| -
|
| // TODO(sigmund): consider passing in several AnalysisResults at once, so we
|
| // can compute the different metrics together.
|
| /// Information we know about the program from static analysis.
|
| @@ -108,9 +99,9 @@ class _StatsVisitor<T> extends Visitor
|
| measurements.record(Metric.send, span.begin, span.end);
|
| if (node is SendSet) {
|
| if ((node.assignmentOperator != null &&
|
| - node.assignmentOperator.source != '=') ||
|
| - node.isPrefix ||
|
| - node.isPostfix) {
|
| + node.assignmentOperator.source != '=') ||
|
| + node.isPrefix ||
|
| + node.isPostfix) {
|
| assert(!node.isIfNullAssignment);
|
| // We count get and set separately in case one of them is defined by the
|
| // other could be a nSM error.
|
| @@ -224,11 +215,13 @@ class _StatsVisitor<T> extends Visitor
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.superSend, span.begin, span.end);
|
| }
|
| +
|
| handleTypeVariable(Node node) {
|
| var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.typeVariableSend, span.begin, span.end);
|
| }
|
| +
|
| handleStatic(Node node) {
|
| var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| @@ -288,7 +281,7 @@ class _StatsVisitor<T> extends Visitor
|
| Boolish usesInterceptor = selectorInfo.usesInterceptor;
|
| if (hasSelector == Boolish.yes) {
|
| if (selectorInfo.isAccurate && selectorInfo.possibleTargets == 1) {
|
| - assert (usesInterceptor != Boolish.maybe);
|
| + assert(usesInterceptor != Boolish.maybe);
|
| if (usesInterceptor == Boolish.yes) {
|
| handleSingleInterceptor(node);
|
| } else {
|
| @@ -330,9 +323,13 @@ class _StatsVisitor<T> extends Visitor
|
|
|
| // Constructors
|
|
|
| - void visitAbstractClassConstructorInvoke(NewExpression node,
|
| - ConstructorElement element, InterfaceType type, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitAbstractClassConstructorInvoke(
|
| + NewExpression node,
|
| + ConstructorElement element,
|
| + InterfaceType type,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleConstructor(node);
|
| }
|
|
|
| @@ -346,9 +343,13 @@ class _StatsVisitor<T> extends Visitor
|
| handleConstructor(node);
|
| }
|
|
|
| - void visitGenerativeConstructorInvoke(NewExpression node,
|
| - ConstructorElement constructor, InterfaceType type, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitGenerativeConstructorInvoke(
|
| + NewExpression node,
|
| + ConstructorElement constructor,
|
| + InterfaceType type,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleConstructor(node);
|
| }
|
|
|
| @@ -357,16 +358,25 @@ class _StatsVisitor<T> extends Visitor
|
| handleConstructor(node);
|
| }
|
|
|
| - void visitRedirectingFactoryConstructorInvoke(NewExpression node,
|
| - ConstructorElement constructor, InterfaceType type,
|
| - ConstructorElement effectiveTarget, InterfaceType effectiveTargetType,
|
| - NodeList arguments, CallStructure callStructure, T arg) {
|
| + void visitRedirectingFactoryConstructorInvoke(
|
| + NewExpression node,
|
| + ConstructorElement constructor,
|
| + InterfaceType type,
|
| + ConstructorElement effectiveTarget,
|
| + InterfaceType effectiveTargetType,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleConstructor(node);
|
| }
|
|
|
| - void visitRedirectingGenerativeConstructorInvoke(NewExpression node,
|
| - ConstructorElement constructor, InterfaceType type, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitRedirectingGenerativeConstructorInvoke(
|
| + NewExpression node,
|
| + ConstructorElement constructor,
|
| + InterfaceType type,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleConstructor(node);
|
| }
|
|
|
| @@ -377,7 +387,6 @@ class _StatsVisitor<T> extends Visitor
|
|
|
| // Dynamic sends
|
|
|
| -
|
| // TODO(sigmund): many many things to add:
|
| // -- support for operators, indexers, etc.
|
| // -- logic about nullables
|
| @@ -396,16 +405,14 @@ class _StatsVisitor<T> extends Visitor
|
| handleIndex(node); // receiver[index] = t2
|
| }
|
|
|
| - void visitDynamicPropertyCompound(Send node, Node receiver,
|
| - Name name, AssignmentOperator operator, Node rhs, T arg) {
|
| + void visitDynamicPropertyCompound(Send node, Node receiver, Name name,
|
| + AssignmentOperator operator, Node rhs, T arg) {
|
| handleDynamicProperty(node, receiver, new Selector.getter(name));
|
| handleOperator(node);
|
| handleDynamicProperty(node, receiver, new Selector.setter(name));
|
| }
|
|
|
| -
|
| - void visitDynamicPropertyGet(
|
| - Send node, Node receiver, Name name, T arg) {
|
| + void visitDynamicPropertyGet(Send node, Node receiver, Name name, T arg) {
|
| handleDynamicProperty(node, receiver, new Selector.getter(name));
|
| }
|
|
|
| @@ -414,15 +421,15 @@ class _StatsVisitor<T> extends Visitor
|
| handleDynamicProperty(node, receiver, selector);
|
| }
|
|
|
| - void visitDynamicPropertyPostfix(Send node, Node receiver,
|
| - Name name, IncDecOperator operator, T arg) {
|
| + void visitDynamicPropertyPostfix(
|
| + Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
|
| handleDynamicProperty(node, receiver, new Selector.getter(name));
|
| handleOperator(node);
|
| handleDynamicProperty(node, receiver, new Selector.setter(name));
|
| }
|
|
|
| - void visitDynamicPropertyPrefix(Send node, Node receiver, Name name,
|
| - IncDecOperator operator, T arg) {
|
| + void visitDynamicPropertyPrefix(
|
| + Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
|
| handleDynamicProperty(node, receiver, new Selector.getter(name));
|
| handleOperator(node);
|
| handleDynamicProperty(node, receiver, new Selector.setter(name));
|
| @@ -466,15 +473,15 @@ class _StatsVisitor<T> extends Visitor
|
| handleDynamicProperty(node, receiver, selector);
|
| }
|
|
|
| - void visitIfNotNullDynamicPropertyPostfix(Send node, Node receiver, Name name,
|
| - IncDecOperator operator, T arg) {
|
| + void visitIfNotNullDynamicPropertyPostfix(
|
| + Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
|
| handleDynamicProperty(node, receiver, new Selector.getter(name));
|
| handleOperator(node);
|
| handleDynamicProperty(node, receiver, new Selector.setter(name));
|
| }
|
|
|
| - void visitIfNotNullDynamicPropertyPrefix(Send node, Node receiver, Name name,
|
| - IncDecOperator operator, T arg) {
|
| + void visitIfNotNullDynamicPropertyPrefix(
|
| + Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
|
| handleDynamicProperty(node, receiver, new Selector.getter(name));
|
| handleOperator(node);
|
| handleDynamicProperty(node, receiver, new Selector.setter(name));
|
| @@ -649,9 +656,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitSuperFieldFieldSetIfNull(
|
| - Send node, FieldElement readField, FieldElement writtenField, Node rhs,
|
| - T arg) {
|
| + void visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
|
| + FieldElement writtenField, Node rhs, T arg) {
|
| handleSuper(node);
|
| handleNSMSuper(node, readField.enclosingClass);
|
| }
|
| @@ -696,8 +702,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitSuperFieldSetterSetIfNull(Send node, FieldElement field,
|
| - FunctionElement setter, Node rhs, T arg) {
|
| + void visitSuperFieldSetterSetIfNull(
|
| + Send node, FieldElement field, FunctionElement setter, Node rhs, T arg) {
|
| handleSuper(node);
|
| handleSuper(node);
|
| }
|
| @@ -723,8 +729,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitSuperGetterFieldSetIfNull(Send node, FunctionElement getter,
|
| - FieldElement field, Node rhs, T arg) {
|
| + void visitSuperGetterFieldSetIfNull(
|
| + Send node, FunctionElement getter, FieldElement field, Node rhs, T arg) {
|
| handleSuper(node);
|
| handleSuper(node);
|
| }
|
| @@ -761,16 +767,24 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitSuperIndexPostfix(Send node, MethodElement indexFunction,
|
| - MethodElement indexSetFunction, Node index, IncDecOperator operator,
|
| + void visitSuperIndexPostfix(
|
| + Send node,
|
| + MethodElement indexFunction,
|
| + MethodElement indexSetFunction,
|
| + Node index,
|
| + IncDecOperator operator,
|
| T arg) {
|
| handleSuper(node);
|
| handleOperator(node);
|
| handleSuper(node);
|
| }
|
|
|
| - void visitSuperIndexPrefix(Send node, MethodElement indexFunction,
|
| - MethodElement indexSetFunction, Node index, IncDecOperator operator,
|
| + void visitSuperIndexPrefix(
|
| + Send node,
|
| + MethodElement indexFunction,
|
| + MethodElement indexSetFunction,
|
| + Node index,
|
| + IncDecOperator operator,
|
| T arg) {
|
| handleSuper(node);
|
| handleOperator(node);
|
| @@ -804,8 +818,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitThisPropertyCompound(Send node, Name name,
|
| - AssignmentOperator operator, Node rhs, T arg) {
|
| + void visitThisPropertyCompound(
|
| + Send node, Name name, AssignmentOperator operator, Node rhs, T arg) {
|
| handleThisProperty(node, new Selector.getter(name));
|
| handleOperator(node);
|
| handleThisProperty(node, new Selector.setter(name));
|
| @@ -816,15 +830,15 @@ class _StatsVisitor<T> extends Visitor
|
| handleThisProperty(node, selector);
|
| }
|
|
|
| - void visitThisPropertyPostfix(Send node, Name name, IncDecOperator operator,
|
| - T arg) {
|
| + void visitThisPropertyPostfix(
|
| + Send node, Name name, IncDecOperator operator, T arg) {
|
| handleThisProperty(node, new Selector.getter(name));
|
| handleOperator(node);
|
| handleThisProperty(node, new Selector.setter(name));
|
| }
|
|
|
| - void visitThisPropertyPrefix(Send node, Name name, IncDecOperator operator,
|
| - T arg) {
|
| + void visitThisPropertyPrefix(
|
| + Send node, Name name, IncDecOperator operator, T arg) {
|
| handleThisProperty(node, new Selector.getter(name));
|
| handleOperator(node);
|
| handleThisProperty(node, new Selector.setter(name));
|
| @@ -997,9 +1011,13 @@ class _StatsVisitor<T> extends Visitor
|
|
|
| // Statically known "no such method" sends
|
|
|
| - void visitConstructorIncompatibleInvoke(NewExpression node,
|
| - ConstructorElement constructor, InterfaceType type, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitConstructorIncompatibleInvoke(
|
| + NewExpression node,
|
| + ConstructorElement constructor,
|
| + InterfaceType type,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleNSMError(node);
|
| }
|
|
|
| @@ -1099,8 +1117,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleNSMError(node);
|
| }
|
|
|
| - void visitFinalSuperFieldSetIfNull(Send node, FieldElement field,
|
| - Node rhs, T arg) {
|
| + void visitFinalSuperFieldSetIfNull(
|
| + Send node, FieldElement field, Node rhs, T arg) {
|
| handleSuper(node);
|
| handleNSMSuper(node, field.enclosingClass);
|
| }
|
| @@ -1175,15 +1193,18 @@ class _StatsVisitor<T> extends Visitor
|
| handleStatic(node);
|
| }
|
|
|
| - void visitTopLevelMethodSetIfNull(Send node, FunctionElement method,
|
| - Node rhs, T arg) {
|
| + void visitTopLevelMethodSetIfNull(
|
| + Send node, FunctionElement method, Node rhs, T arg) {
|
| handleStatic(node);
|
| handleNSMError(node);
|
| }
|
|
|
| - void visitLocalFunctionIncompatibleInvoke(Send node,
|
| - LocalFunctionElement function, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitLocalFunctionIncompatibleInvoke(
|
| + Send node,
|
| + LocalFunctionElement function,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleNSMError(node);
|
| }
|
|
|
| @@ -1327,8 +1348,11 @@ class _StatsVisitor<T> extends Visitor
|
| handleNSMSuper(node, setter.enclosingClass);
|
| }
|
|
|
| - void visitTopLevelFunctionIncompatibleInvoke(Send node,
|
| - MethodElement function, NodeList arguments, CallStructure callStructure,
|
| + void visitTopLevelFunctionIncompatibleInvoke(
|
| + Send node,
|
| + MethodElement function,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| T arg) {
|
| handleNSMError(node);
|
| }
|
| @@ -1394,8 +1418,11 @@ class _StatsVisitor<T> extends Visitor
|
| handleNSMError(node);
|
| }
|
|
|
| - void visitTypeVariableTypeLiteralCompound(Send node,
|
| - TypeVariableElement element, AssignmentOperator operator, Node rhs,
|
| + void visitTypeVariableTypeLiteralCompound(
|
| + Send node,
|
| + TypeVariableElement element,
|
| + AssignmentOperator operator,
|
| + Node rhs,
|
| T arg) {
|
| handleTypeVariable(node);
|
| handleNSMError(node); // operator on a method closure yields nSM
|
| @@ -1407,9 +1434,12 @@ class _StatsVisitor<T> extends Visitor
|
| handleTypeVariable(node);
|
| }
|
|
|
| - void visitTypeVariableTypeLiteralInvoke(Send node,
|
| - TypeVariableElement element, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitTypeVariableTypeLiteralInvoke(
|
| + Send node,
|
| + TypeVariableElement element,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleNSMError(node);
|
| }
|
|
|
| @@ -1480,8 +1510,12 @@ class _StatsVisitor<T> extends Visitor
|
| handleNSMError(node);
|
| }
|
|
|
| - void visitUnresolvedClassConstructorInvoke(NewExpression node,
|
| - Element element, DartType type, NodeList arguments, Selector selector,
|
| + void visitUnresolvedClassConstructorInvoke(
|
| + NewExpression node,
|
| + Element element,
|
| + DartType type,
|
| + NodeList arguments,
|
| + Selector selector,
|
| T arg) {
|
| handleNSMError(node);
|
| }
|
| @@ -1521,9 +1555,13 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| - void visitUnresolvedRedirectingFactoryConstructorInvoke(NewExpression node,
|
| - ConstructorElement constructor, InterfaceType type, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitUnresolvedRedirectingFactoryConstructorInvoke(
|
| + NewExpression node,
|
| + ConstructorElement constructor,
|
| + InterfaceType type,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleNSMError(node);
|
| }
|
|
|
| @@ -1557,8 +1595,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| - void visitUnresolvedStaticGetterSetIfNull(Send node, Element element,
|
| - MethodElement setter, Node rhs, T arg) {
|
| + void visitUnresolvedStaticGetterSetIfNull(
|
| + Send node, Element element, MethodElement setter, Node rhs, T arg) {
|
| handleNSMError(node);
|
| handleNoSend(node);
|
| }
|
| @@ -1584,8 +1622,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| - void visitUnresolvedStaticSetterSetIfNull(Send node, MethodElement getter,
|
| - Element element, Node rhs, T arg) {
|
| + void visitUnresolvedStaticSetterSetIfNull(
|
| + Send node, MethodElement getter, Element element, Node rhs, T arg) {
|
| handleNSMError(node);
|
| handleNoSend(node);
|
| }
|
| @@ -1632,8 +1670,13 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitUnresolvedSuperGetterCompoundIndexSet(Send node, Element element,
|
| - MethodElement setter, Node index, AssignmentOperator operator, Node rhs,
|
| + void visitUnresolvedSuperGetterCompoundIndexSet(
|
| + Send node,
|
| + Element element,
|
| + MethodElement setter,
|
| + Node index,
|
| + AssignmentOperator operator,
|
| + Node rhs,
|
| T arg) {
|
| handleNSMSuper(node, element.enclosingClass);
|
| handleOperator(node);
|
| @@ -1668,8 +1711,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleSuper(node);
|
| }
|
|
|
| - void visitUnresolvedSuperGetterSetIfNull(Send node, Element element,
|
| - MethodElement setter, Node rhs, T arg) {
|
| + void visitUnresolvedSuperGetterSetIfNull(
|
| + Send node, Element element, MethodElement setter, Node rhs, T arg) {
|
| handleNSMSuper(node, element.enclosingClass);
|
| handleSuper(node);
|
| }
|
| @@ -1724,25 +1767,38 @@ class _StatsVisitor<T> extends Visitor
|
| handleNSMSuper(node, element.enclosingClass);
|
| }
|
|
|
| - void visitUnresolvedSuperSetterCompoundIndexSet(Send node,
|
| - MethodElement getter, Element element, Node index,
|
| - AssignmentOperator operator, Node rhs, T arg) {
|
| + void visitUnresolvedSuperSetterCompoundIndexSet(
|
| + Send node,
|
| + MethodElement getter,
|
| + Element element,
|
| + Node index,
|
| + AssignmentOperator operator,
|
| + Node rhs,
|
| + T arg) {
|
| handleSuper(node);
|
| handleOperator(node);
|
| handleNSMSuper(node, element.enclosingClass);
|
| }
|
|
|
| - void visitUnresolvedSuperSetterIndexPostfix(Send node,
|
| - MethodElement indexFunction, Element element, Node index,
|
| - IncDecOperator operator, T arg) {
|
| + void visitUnresolvedSuperSetterIndexPostfix(
|
| + Send node,
|
| + MethodElement indexFunction,
|
| + Element element,
|
| + Node index,
|
| + IncDecOperator operator,
|
| + T arg) {
|
| handleSuper(node);
|
| handleOperator(node);
|
| handleNSMSuper(node, element.enclosingClass);
|
| }
|
|
|
| - void visitUnresolvedSuperSetterIndexPrefix(Send node,
|
| - MethodElement indexFunction, Element element, Node index,
|
| - IncDecOperator operator, T arg) {
|
| + void visitUnresolvedSuperSetterIndexPrefix(
|
| + Send node,
|
| + MethodElement indexFunction,
|
| + Element element,
|
| + Node index,
|
| + IncDecOperator operator,
|
| + T arg) {
|
| handleSuper(node);
|
| handleOperator(node);
|
| handleNSMSuper(node, element.enclosingClass);
|
| @@ -1762,8 +1818,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleNSMSuper(node, element.enclosingClass);
|
| }
|
|
|
| - void visitUnresolvedSuperSetterSetIfNull(Send node, MethodElement getter,
|
| - Element element, Node rhs, T arg) {
|
| + void visitUnresolvedSuperSetterSetIfNull(
|
| + Send node, MethodElement getter, Element element, Node rhs, T arg) {
|
| handleSuper(node);
|
| handleNSMSuper(node, element.enclosingClass);
|
| }
|
| @@ -1794,8 +1850,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| - void visitUnresolvedTopLevelGetterSetIfNull(Send node, Element element,
|
| - MethodElement setter, Node rhs, T arg) {
|
| + void visitUnresolvedTopLevelGetterSetIfNull(
|
| + Send node, Element element, MethodElement setter, Node rhs, T arg) {
|
| handleNSMError(node);
|
| handleNoSend(node);
|
| }
|
| @@ -1821,8 +1877,8 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| - void visitUnresolvedTopLevelSetterSetIfNull(Send node, MethodElement getter,
|
| - Element element, Node rhs, T arg) {
|
| + void visitUnresolvedTopLevelSetterSetIfNull(
|
| + Send node, MethodElement getter, Element element, Node rhs, T arg) {
|
| handleNSMError(node);
|
| handleNoSend(node);
|
| }
|
| @@ -1838,9 +1894,13 @@ class _StatsVisitor<T> extends Visitor
|
| handleStatic(node);
|
| }
|
|
|
| - void visitFactoryConstructorInvoke(NewExpression node,
|
| - ConstructorElement constructor, InterfaceType type, NodeList arguments,
|
| - CallStructure callStructure, T arg) {
|
| + void visitFactoryConstructorInvoke(
|
| + NewExpression node,
|
| + ConstructorElement constructor,
|
| + InterfaceType type,
|
| + NodeList arguments,
|
| + CallStructure callStructure,
|
| + T arg) {
|
| handleStatic(node);
|
| }
|
|
|
| @@ -1881,31 +1941,20 @@ class _StatsVisitor<T> extends Visitor
|
| handleStatic(node);
|
| }
|
|
|
| - void visitStaticGetterSetterSetIfNull(
|
| - Send node,
|
| - FunctionElement getter,
|
| - FunctionElement setter,
|
| - Node rhs,
|
| - T arg) {
|
| + void visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
|
| + FunctionElement setter, Node rhs, T arg) {
|
| handleStatic(node);
|
| handleStatic(node);
|
| }
|
|
|
| void visitStaticMethodSetterSetIfNull(
|
| - Send node,
|
| - MethodElement method,
|
| - MethodElement setter,
|
| - Node rhs,
|
| - T arg) {
|
| + Send node, MethodElement method, MethodElement setter, Node rhs, T arg) {
|
| handleStatic(node);
|
| handleStatic(node);
|
| }
|
|
|
| void visitStaticMethodSetIfNull(
|
| - Send node,
|
| - FunctionElement method,
|
| - Node rhs,
|
| - T arg) {
|
| + Send node, FunctionElement method, Node rhs, T arg) {
|
| handleStatic(node);
|
| handleNSMError(node);
|
| }
|
| @@ -1945,8 +1994,13 @@ class _StatsVisitor<T> extends Visitor
|
|
|
| // Virtual
|
|
|
| - void visitSuperCompoundIndexSet(SendSet node, MethodElement getter,
|
| - MethodElement setter, Node index, AssignmentOperator operator, Node rhs,
|
| + void visitSuperCompoundIndexSet(
|
| + SendSet node,
|
| + MethodElement getter,
|
| + MethodElement setter,
|
| + Node index,
|
| + AssignmentOperator operator,
|
| + Node rhs,
|
| T arg) {
|
| handleSuper(node);
|
| handleOperator(node);
|
| @@ -1993,27 +2047,16 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidGet(
|
| - Send node,
|
| - ErroneousElement error,
|
| - T arg) {
|
| + void errorInvalidGet(Send node, ErroneousElement error, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidInvoke(
|
| - Send node,
|
| - ErroneousElement error,
|
| - NodeList arguments,
|
| - Selector selector,
|
| - T arg) {
|
| + void errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
|
| + Selector selector, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidSet(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node rhs,
|
| - T arg) {
|
| + void errorInvalidSet(Send node, ErroneousElement error, Node rhs, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| @@ -2023,120 +2066,70 @@ class _StatsVisitor<T> extends Visitor
|
| handleNoSend(node);
|
| }
|
|
|
| -
|
| void errorInvalidPrefix(
|
| - Send node,
|
| - ErroneousElement error,
|
| - IncDecOperator operator,
|
| - T arg) {
|
| + Send node, ErroneousElement error, IncDecOperator operator, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| void errorInvalidPostfix(
|
| - Send node,
|
| - ErroneousElement error,
|
| - IncDecOperator operator,
|
| - T arg) {
|
| + Send node, ErroneousElement error, IncDecOperator operator, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidCompound(
|
| - Send node,
|
| - ErroneousElement error,
|
| - AssignmentOperator operator,
|
| - Node rhs,
|
| - T arg) {
|
| + void errorInvalidCompound(Send node, ErroneousElement error,
|
| + AssignmentOperator operator, Node rhs, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| void errorInvalidUnary(
|
| - Send node,
|
| - UnaryOperator operator,
|
| - ErroneousElement error,
|
| - T arg) {
|
| + Send node, UnaryOperator operator, ErroneousElement error, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| void errorInvalidEquals(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node right,
|
| - T arg) {
|
| + Send node, ErroneousElement error, Node right, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| void errorInvalidNotEquals(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node right,
|
| - T arg) {
|
| + Send node, ErroneousElement error, Node right, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidBinary(
|
| - Send node,
|
| - ErroneousElement error,
|
| - BinaryOperator operator,
|
| - Node right,
|
| - T arg) {
|
| + void errorInvalidBinary(Send node, ErroneousElement error,
|
| + BinaryOperator operator, Node right, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidIndex(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node index,
|
| - T arg) {
|
| + void errorInvalidIndex(Send node, ErroneousElement error, Node index, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| void errorInvalidIndexSet(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node index,
|
| - Node rhs,
|
| - T arg) {
|
| + Send node, ErroneousElement error, Node index, Node rhs, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidCompoundIndexSet(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node index,
|
| - AssignmentOperator operator,
|
| - Node rhs,
|
| - T arg) {
|
| + void errorInvalidCompoundIndexSet(Send node, ErroneousElement error,
|
| + Node index, AssignmentOperator operator, Node rhs, T arg) {
|
| handleNoSend(node);
|
| handleNoSend(node);
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidIndexPrefix(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node index,
|
| - IncDecOperator operator,
|
| - T arg) {
|
| + void errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
|
| + IncDecOperator operator, T arg) {
|
| handleNoSend(node);
|
| handleNoSend(node);
|
| }
|
|
|
| - void errorInvalidIndexPostfix(
|
| - Send node,
|
| - ErroneousElement error,
|
| - Node index,
|
| - IncDecOperator operator,
|
| - T arg) {
|
| + void errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
|
| + IncDecOperator operator, T arg) {
|
| handleNoSend(node);
|
| handleNoSend(node);
|
| }
|
|
|
| - void previsitDeferredAccess(
|
| - Send node,
|
| - PrefixElement prefix,
|
| - T arg) {
|
| - }
|
| -
|
| + void previsitDeferredAccess(Send node, PrefixElement prefix, T arg) {}
|
|
|
| void visitAs(Send node, Node expression, DartType type, T arg) {
|
| handleNoSend(node);
|
| @@ -2226,14 +2219,14 @@ class _StatsVisitor<T> extends Visitor
|
| }
|
|
|
| @override
|
| - errorInvalidIndexSetIfNull(SendSet node, ErroneousElement error, Node index,
|
| - Node rhs, T arg) {
|
| + errorInvalidIndexSetIfNull(
|
| + SendSet node, ErroneousElement error, Node index, Node rhs, T arg) {
|
| handleNoSend(node);
|
| }
|
|
|
| @override
|
| - visitIndexSetIfNull(SendSet node, Node receiver, Node index, Node rhs,
|
| - T arg) {
|
| + visitIndexSetIfNull(
|
| + SendSet node, Node receiver, Node index, Node rhs, T arg) {
|
| handleIndex(node); // t1 = receiver[index]
|
| handleIndex(node); // receiver[index] = t2
|
| }
|
| @@ -2253,8 +2246,8 @@ class _StatsVisitor<T> extends Visitor
|
| }
|
|
|
| @override
|
| - visitUnresolvedSuperIndexSetIfNull(Send node, Element element, Node index,
|
| - Node rhs, T arg) {
|
| + visitUnresolvedSuperIndexSetIfNull(
|
| + Send node, Element element, Node index, Node rhs, T arg) {
|
| handleNSMSuper(node, element.enclosingClass);
|
| handleNSMSuper(node, element.enclosingClass);
|
| }
|
| @@ -2296,8 +2289,8 @@ class _StatsVisitor<T> extends Visitor
|
| if (!measurements.checkInvariant(Metric.send) ||
|
| !measurements.checkInvariant(Metric.monomorphicSend) ||
|
| !measurements.checkInvariant(Metric.polymorphicSend)) {
|
| - reporter.reportErrorMessage(node,
|
| - MessageKind.GENERIC, {'text': 'bad\n-- $msg\nlast:\n-- $last\n'});
|
| + reporter.reportErrorMessage(node, MessageKind.GENERIC,
|
| + {'text': 'bad\n-- $msg\nlast:\n-- $last\n'});
|
| last = msg;
|
| } else {
|
| last = msg;
|
| @@ -2314,12 +2307,14 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| _StatsTraversalVisitor(
|
| Compiler compiler, TreeElements elements, Uri sourceUri)
|
| : reporter = compiler.reporter,
|
| - statsVisitor = new _StatsVisitor(compiler.reporter, elements,
|
| - // TODO(sigmund): accept a list of analyses, so we can compare them
|
| - // together.
|
| - true
|
| - ? new TrustTypesAnalysisResult(elements, compiler.world)
|
| - : new NaiveAnalysisResult(),
|
| + statsVisitor = new _StatsVisitor(
|
| + compiler.reporter,
|
| + elements,
|
| + // TODO(sigmund): accept a list of analyses, so we can compare them
|
| + // together.
|
| + true
|
| + ? new TrustTypesAnalysisResult(elements, compiler.world)
|
| + : new NaiveAnalysisResult(),
|
| sourceUri),
|
| super(elements);
|
|
|
| @@ -2327,8 +2322,8 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| try {
|
| node.accept(statsVisitor);
|
| } catch (e, t) {
|
| - reporter.reportErrorMessage(
|
| - node, MessageKind.GENERIC, {'text': '$e\n$t'});
|
| + reporter
|
| + .reportErrorMessage(node, MessageKind.GENERIC, {'text': '$e\n$t'});
|
| }
|
| super.visitSend(node);
|
| }
|
| @@ -2337,8 +2332,8 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| try {
|
| node.accept(statsVisitor);
|
| } catch (e, t) {
|
| - reporter.reportErrorMessage(
|
| - node, MessageKind.GENERIC, {'text': '$e\n$t'});
|
| + reporter
|
| + .reportErrorMessage(node, MessageKind.GENERIC, {'text': '$e\n$t'});
|
| }
|
| super.visitNewExpression(node);
|
| }
|
| @@ -2347,7 +2342,6 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| /// Helper to visit elements recursively
|
| // TODO(sigmund): maybe generalize and move to elements/visitor.dart?
|
| abstract class RecursiveElementVisitor<R, A> extends ElementVisitor<R, A> {
|
| -
|
| @override
|
| R visitWarnOnUseElement(WarnOnUseElement e, A arg) =>
|
| e.wrappedElement.accept(this, arg);
|
|
|