| 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 0beba58416d30bebb4079550204210515bc21c93..02991421ca3aa8dc7bc75abb44b590753ee7c295 100644
|
| --- a/pkg/compiler/lib/src/info/send_info.dart
|
| +++ b/pkg/compiler/lib/src/info/send_info.dart
|
| @@ -9,6 +9,7 @@ import 'dart:convert';
|
| import 'package:dart2js_info/src/measurements.dart';
|
| import 'package:dart2js_info/src/util.dart' show recursiveDiagnosticString;
|
|
|
| +import '../diagnostics/diagnostic_listener.dart' show DiagnosticReporter;
|
| import '../diagnostics/messages.dart' show MessageKind;
|
| import '../compiler.dart' show Compiler;
|
| import '../common/tasks.dart' show CompilerTask;
|
| @@ -32,8 +33,10 @@ 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) {
|
| - return compiler.withCurrentElement(f, () {
|
| +Measurements collectSendMeasurements(FunctionElement f,
|
| + Compiler compiler) {
|
| + DiagnosticReporter reporter = compiler.reporter;
|
| + return reporter.withCurrentElement(f, () {
|
| // TODO(sigmund): enable for platform too.
|
| if (f.library.isPlatformLibrary) return null;
|
| var name = _qualifiedName(f);
|
| @@ -61,7 +64,7 @@ Measurements collectSendMeasurements(FunctionElement f, Compiler compiler) {
|
|
|
| var visitor = new _StatsTraversalVisitor(
|
| compiler, resolvedAst.elements,
|
| - compiler.spanFromNode(resolvedAst.node).uri);
|
| + reporter.spanFromSpannable(resolvedAst.node).uri);
|
| resolvedAst.node.accept(visitor);
|
| return visitor.measurements;
|
| });
|
| @@ -85,12 +88,12 @@ class _StatsVisitor<T> extends Visitor
|
| /// Results from this function.
|
| final Measurements measurements;
|
|
|
| - final Compiler compiler;
|
| + final DiagnosticReporter reporter;
|
| final TreeElements elements;
|
|
|
| SemanticSendVisitor<dynamic, T> get sendVisitor => this;
|
|
|
| - _StatsVisitor(this.compiler, this.elements, this.info, Uri sourceUri)
|
| + _StatsVisitor(this.reporter, this.elements, this.info, Uri sourceUri)
|
| : measurements = new Measurements.reachableFunction(sourceUri);
|
|
|
| visitNode(Node node) => throw "unhandled ${node.runtimeType}: $node";
|
| @@ -99,7 +102,7 @@ class _StatsVisitor<T> extends Visitor
|
|
|
| visitSend(Send node) {
|
| _checkInvariant(node, 'before');
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.send, span.begin, span.end);
|
| if (node is SendSet) {
|
| if ((node.assignmentOperator != null &&
|
| @@ -121,7 +124,7 @@ class _StatsVisitor<T> extends Visitor
|
|
|
| visitNewExpression(NewExpression node) {
|
| _checkInvariant(node, 'before');
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.send, span.begin, span.end);
|
| super.visitNewExpression(node);
|
| _checkInvariant(node, 'after ');
|
| @@ -131,7 +134,7 @@ class _StatsVisitor<T> extends Visitor
|
| ///
|
| /// See [Metric.send] for a full categorization of sends.
|
| handleLocal(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.localSend, span.begin, span.end);
|
| }
|
| @@ -142,7 +145,7 @@ class _StatsVisitor<T> extends Visitor
|
| ///
|
| /// See [Metric.send] for a full categorization of sends.
|
| handleSingleInstance(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.instanceSend, span.begin, span.end);
|
| }
|
| @@ -154,7 +157,7 @@ class _StatsVisitor<T> extends Visitor
|
| ///
|
| /// See [Metric.send] for a full categorization of sends.
|
| handleSingleInterceptor(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.interceptorSend, span.begin, span.end);
|
| }
|
| @@ -163,37 +166,37 @@ class _StatsVisitor<T> extends Visitor
|
| ///
|
| /// See [Metric.send] for a full categorization of sends.
|
| handleMultiInterceptor(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.polymorphicSend, span.begin, span.end);
|
| measurements.record(Metric.multiInterceptorSend, span.begin, span.end);
|
| }
|
|
|
| handleConstructor(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.constructorSend, span.begin, span.end);
|
| }
|
|
|
| handleDynamic(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.polymorphicSend, span.begin, span.end);
|
| measurements.record(Metric.dynamicSend, span.begin, span.end);
|
| }
|
|
|
| handleVirtual(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.polymorphicSend, span.begin, span.end);
|
| measurements.record(Metric.virtualSend, span.begin, span.end);
|
| }
|
|
|
| handleNSMError(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.nsmErrorSend, span.begin, span.end);
|
| }
|
|
|
| handleNSMSingle(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.singleNsmCallSend, span.begin, span.end);
|
| }
|
| @@ -209,23 +212,23 @@ class _StatsVisitor<T> extends Visitor
|
| }
|
|
|
| handleNSMAny(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.polymorphicSend, span.begin, span.end);
|
| measurements.record(Metric.multiNsmCallSend, span.begin, span.end);
|
| }
|
|
|
| handleSuper(Node node) {
|
| - var span = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.superSend, span.begin, span.end);
|
| }
|
| handleTypeVariable(Node node) {
|
| - var span = compiler.spanFromNode(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 = compiler.spanFromNode(node);
|
| + var span = reporter.spanFromSpannable(node);
|
| measurements.record(Metric.monomorphicSend, span.begin, span.end);
|
| measurements.record(Metric.staticSend, span.begin, span.end);
|
| }
|
| @@ -2246,7 +2249,7 @@ class _StatsVisitor<T> extends Visitor
|
| if (!measurements.checkInvariant(Metric.send) ||
|
| !measurements.checkInvariant(Metric.monomorphicSend) ||
|
| !measurements.checkInvariant(Metric.polymorphicSend)) {
|
| - compiler.reportErrorMessage(node,
|
| + reporter.reportErrorMessage(node,
|
| MessageKind.GENERIC, {'text': 'bad\n-- $msg\nlast:\n-- $last\n'});
|
| last = msg;
|
| } else {
|
| @@ -2258,13 +2261,13 @@ class _StatsVisitor<T> extends Visitor
|
| /// Visitor that collects statistics for a single function.
|
| class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| implements SemanticSendVisitor<dynamic, T> {
|
| - final Compiler compiler;
|
| + final DiagnosticReporter reporter;
|
| final _StatsVisitor statsVisitor;
|
| Measurements get measurements => statsVisitor.measurements;
|
| _StatsTraversalVisitor(
|
| Compiler compiler, TreeElements elements, Uri sourceUri)
|
| - : compiler = compiler,
|
| - statsVisitor = new _StatsVisitor(compiler, elements,
|
| + : reporter = compiler.reporter,
|
| + statsVisitor = new _StatsVisitor(compiler.reporter, elements,
|
| // TODO(sigmund): accept a list of analyses, so we can compare them
|
| // together.
|
| true
|
| @@ -2277,7 +2280,7 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| try {
|
| node.accept(statsVisitor);
|
| } catch (e, t) {
|
| - compiler.reportErrorMessage(
|
| + reporter.reportErrorMessage(
|
| node, MessageKind.GENERIC, {'text': '$e\n$t'});
|
| }
|
| super.visitSend(node);
|
| @@ -2287,7 +2290,7 @@ class _StatsTraversalVisitor<T> extends TraversalVisitor<dynamic, T>
|
| try {
|
| node.accept(statsVisitor);
|
| } catch (e, t) {
|
| - compiler.reportErrorMessage(
|
| + reporter.reportErrorMessage(
|
| node, MessageKind.GENERIC, {'text': '$e\n$t'});
|
| }
|
| super.visitNewExpression(node);
|
|
|