mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 23:16:55 +00:00
Small cleanup
Change-Id: I368fbaa3bac5a5a47c374f26998cce8ad8b265a6 Reviewed-on: https://dart-review.googlesource.com/55890 Reviewed-by: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
parent
9f6e8a3a96
commit
f1f660fe1e
|
@ -1412,8 +1412,6 @@ abstract class ElementEnvironment {
|
||||||
ClassEntity cls, List<DartType> typeArguments);
|
ClassEntity cls, List<DartType> typeArguments);
|
||||||
|
|
||||||
/// Returns the `dynamic` type.
|
/// Returns the `dynamic` type.
|
||||||
// TODO(johnniwinther): Remove this when `ResolutionDynamicType` is no longer
|
|
||||||
// needed.
|
|
||||||
DartType get dynamicType;
|
DartType get dynamicType;
|
||||||
|
|
||||||
/// Returns the 'raw type' of [cls]. That is, the instantiation of [cls]
|
/// Returns the 'raw type' of [cls]. That is, the instantiation of [cls]
|
||||||
|
|
|
@ -32,7 +32,7 @@ import 'library_loader.dart' show LibraryLoaderTask, LoadedLibraries;
|
||||||
import 'null_compiler_output.dart' show NullCompilerOutput, NullSink;
|
import 'null_compiler_output.dart' show NullCompilerOutput, NullSink;
|
||||||
import 'options.dart' show CompilerOptions, DiagnosticOptions;
|
import 'options.dart' show CompilerOptions, DiagnosticOptions;
|
||||||
import 'ssa/nodes.dart' show HInstruction;
|
import 'ssa/nodes.dart' show HInstruction;
|
||||||
import 'package:front_end/src/fasta/scanner.dart' show StringToken, Token;
|
import 'package:front_end/src/fasta/scanner.dart' show StringToken;
|
||||||
import 'types/types.dart' show GlobalTypeInferenceTask;
|
import 'types/types.dart' show GlobalTypeInferenceTask;
|
||||||
import 'universe/selector.dart' show Selector;
|
import 'universe/selector.dart' show Selector;
|
||||||
import 'universe/world_builder.dart'
|
import 'universe/world_builder.dart'
|
||||||
|
@ -861,12 +861,6 @@ class CompilerDiagnosticReporter extends DiagnosticReporter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(johnniwinther): Move this to the parser listeners.
|
|
||||||
@override
|
|
||||||
SourceSpan spanFromToken(Token token) {
|
|
||||||
throw 'No error location.';
|
|
||||||
}
|
|
||||||
|
|
||||||
internalError(Spannable spannable, reason) {
|
internalError(Spannable spannable, reason) {
|
||||||
String message = tryToString(reason);
|
String message = tryToString(reason);
|
||||||
reportDiagnosticInternal(
|
reportDiagnosticInternal(
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
library dart2js.diagnostic_listener;
|
library dart2js.diagnostic_listener;
|
||||||
|
|
||||||
import 'package:front_end/src/fasta/scanner.dart' show Token;
|
|
||||||
import '../elements/entities.dart';
|
import '../elements/entities.dart';
|
||||||
import '../options.dart' show DiagnosticOptions;
|
import '../options.dart' show DiagnosticOptions;
|
||||||
import 'messages.dart';
|
import 'messages.dart';
|
||||||
|
@ -26,12 +25,6 @@ abstract class DiagnosticReporter {
|
||||||
/// tokens can be found within the tokens of the current element.
|
/// tokens can be found within the tokens of the current element.
|
||||||
SourceSpan spanFromSpannable(Spannable node);
|
SourceSpan spanFromSpannable(Spannable node);
|
||||||
|
|
||||||
/// Creates a [SourceSpan] for [token] in scope of the current element.
|
|
||||||
///
|
|
||||||
/// In checked mode we assert that the token can be found within the tokens
|
|
||||||
/// of the current element.
|
|
||||||
SourceSpan spanFromToken(Token token);
|
|
||||||
|
|
||||||
void reportErrorMessage(Spannable spannable, MessageKind messageKind,
|
void reportErrorMessage(Spannable spannable, MessageKind messageKind,
|
||||||
[Map arguments = const {}]) {
|
[Map arguments = const {}]) {
|
||||||
reportError(createMessage(spannable, messageKind, arguments));
|
reportError(createMessage(spannable, messageKind, arguments));
|
||||||
|
|
|
@ -322,197 +322,3 @@ class _IfNullOperator extends BinaryOperator {
|
||||||
|
|
||||||
String get selectorName => '??';
|
String get selectorName => '??';
|
||||||
}
|
}
|
||||||
|
|
||||||
enum AssignmentOperatorKind {
|
|
||||||
ASSIGN,
|
|
||||||
IF_NULL,
|
|
||||||
ADD,
|
|
||||||
SUB,
|
|
||||||
MUL,
|
|
||||||
DIV,
|
|
||||||
IDIV,
|
|
||||||
MOD,
|
|
||||||
SHL,
|
|
||||||
SHR,
|
|
||||||
AND,
|
|
||||||
OR,
|
|
||||||
XOR,
|
|
||||||
}
|
|
||||||
|
|
||||||
class AssignmentOperator {
|
|
||||||
final AssignmentOperatorKind kind;
|
|
||||||
final BinaryOperator binaryOperator;
|
|
||||||
final String name;
|
|
||||||
final bool isUserDefinable;
|
|
||||||
|
|
||||||
const AssignmentOperator._(this.kind, this.name, this.binaryOperator,
|
|
||||||
{this.isUserDefinable: true});
|
|
||||||
|
|
||||||
String get selectorName {
|
|
||||||
return binaryOperator != null ? binaryOperator.selectorName : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String toString() => name;
|
|
||||||
|
|
||||||
/// The = operator.
|
|
||||||
static const AssignmentOperator ASSIGN = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.ASSIGN, '=', null,
|
|
||||||
isUserDefinable: false);
|
|
||||||
|
|
||||||
/// The ??= operator.
|
|
||||||
static const AssignmentOperator IF_NULL = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.IF_NULL, '??=', BinaryOperator.IF_NULL,
|
|
||||||
isUserDefinable: false);
|
|
||||||
|
|
||||||
/// The += assignment operator.
|
|
||||||
static const AssignmentOperator ADD = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.ADD, '+=', BinaryOperator.ADD);
|
|
||||||
|
|
||||||
/// The -= assignment operator.
|
|
||||||
static const AssignmentOperator SUB = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.SUB, '-=', BinaryOperator.SUB);
|
|
||||||
|
|
||||||
/// The *= assignment operator.
|
|
||||||
static const AssignmentOperator MUL = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.MUL, '*=', BinaryOperator.MUL);
|
|
||||||
|
|
||||||
/// The /= assignment operator.
|
|
||||||
static const AssignmentOperator DIV = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.DIV, '/=', BinaryOperator.DIV);
|
|
||||||
|
|
||||||
/// The ~/= assignment operator.
|
|
||||||
static const AssignmentOperator IDIV = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.IDIV, '~/=', BinaryOperator.IDIV);
|
|
||||||
|
|
||||||
/// The %= assignment operator.
|
|
||||||
static const AssignmentOperator MOD = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.MOD, '%=', BinaryOperator.MOD);
|
|
||||||
|
|
||||||
/// The <<= assignment operator.
|
|
||||||
static const AssignmentOperator SHL = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.SHL, '<<=', BinaryOperator.SHL);
|
|
||||||
|
|
||||||
/// The >>= assignment operator.
|
|
||||||
static const AssignmentOperator SHR = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.SHR, '>>=', BinaryOperator.SHR);
|
|
||||||
|
|
||||||
/// The &= assignment operator.
|
|
||||||
static const AssignmentOperator AND = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.AND, '&=', BinaryOperator.AND);
|
|
||||||
|
|
||||||
/// The |= assignment operator.
|
|
||||||
static const AssignmentOperator OR = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.OR, '|=', BinaryOperator.OR);
|
|
||||||
|
|
||||||
/// The ^= assignment operator.
|
|
||||||
static const AssignmentOperator XOR = const AssignmentOperator._(
|
|
||||||
AssignmentOperatorKind.XOR, '^=', BinaryOperator.XOR);
|
|
||||||
|
|
||||||
static AssignmentOperator parse(String value) {
|
|
||||||
switch (value) {
|
|
||||||
case '=':
|
|
||||||
return ASSIGN;
|
|
||||||
case '??=':
|
|
||||||
return IF_NULL;
|
|
||||||
case '*=':
|
|
||||||
return MUL;
|
|
||||||
case '/=':
|
|
||||||
return DIV;
|
|
||||||
case '%=':
|
|
||||||
return MOD;
|
|
||||||
case '~/=':
|
|
||||||
return IDIV;
|
|
||||||
case '+=':
|
|
||||||
return ADD;
|
|
||||||
case '-=':
|
|
||||||
return SUB;
|
|
||||||
case '<<=':
|
|
||||||
return SHL;
|
|
||||||
case '>>=':
|
|
||||||
return SHR;
|
|
||||||
case '&=':
|
|
||||||
return AND;
|
|
||||||
case '^=':
|
|
||||||
return XOR;
|
|
||||||
case '|=':
|
|
||||||
return OR;
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignore: MISSING_RETURN
|
|
||||||
static AssignmentOperator fromKind(AssignmentOperatorKind kind) {
|
|
||||||
switch (kind) {
|
|
||||||
case AssignmentOperatorKind.ASSIGN:
|
|
||||||
return ASSIGN;
|
|
||||||
case AssignmentOperatorKind.IF_NULL:
|
|
||||||
return IF_NULL;
|
|
||||||
case AssignmentOperatorKind.ADD:
|
|
||||||
return ADD;
|
|
||||||
case AssignmentOperatorKind.SUB:
|
|
||||||
return SUB;
|
|
||||||
case AssignmentOperatorKind.MUL:
|
|
||||||
return MUL;
|
|
||||||
case AssignmentOperatorKind.DIV:
|
|
||||||
return DIV;
|
|
||||||
case AssignmentOperatorKind.IDIV:
|
|
||||||
return IDIV;
|
|
||||||
case AssignmentOperatorKind.MOD:
|
|
||||||
return MOD;
|
|
||||||
case AssignmentOperatorKind.SHL:
|
|
||||||
return SHL;
|
|
||||||
case AssignmentOperatorKind.SHR:
|
|
||||||
return SHR;
|
|
||||||
case AssignmentOperatorKind.AND:
|
|
||||||
return AND;
|
|
||||||
case AssignmentOperatorKind.OR:
|
|
||||||
return OR;
|
|
||||||
case AssignmentOperatorKind.XOR:
|
|
||||||
return XOR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum IncDecOperatorKind { INC, DEC }
|
|
||||||
|
|
||||||
class IncDecOperator {
|
|
||||||
final IncDecOperatorKind kind;
|
|
||||||
final String name;
|
|
||||||
final BinaryOperator binaryOperator;
|
|
||||||
|
|
||||||
const IncDecOperator._(this.kind, this.name, this.binaryOperator);
|
|
||||||
|
|
||||||
String get selectorName => binaryOperator.selectorName;
|
|
||||||
|
|
||||||
String toString() => name;
|
|
||||||
|
|
||||||
/// The prefix/postfix ++ operator.
|
|
||||||
static const IncDecOperator INC =
|
|
||||||
const IncDecOperator._(IncDecOperatorKind.INC, '++', BinaryOperator.ADD);
|
|
||||||
|
|
||||||
/// The prefix/postfix -- operator.
|
|
||||||
static const IncDecOperator DEC =
|
|
||||||
const IncDecOperator._(IncDecOperatorKind.DEC, '--', BinaryOperator.SUB);
|
|
||||||
|
|
||||||
static IncDecOperator parse(String value) {
|
|
||||||
switch (value) {
|
|
||||||
case '++':
|
|
||||||
return INC;
|
|
||||||
case '--':
|
|
||||||
return DEC;
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignore: MISSING_RETURN
|
|
||||||
static IncDecOperator fromKind(IncDecOperatorKind kind) {
|
|
||||||
switch (kind) {
|
|
||||||
case IncDecOperatorKind.INC:
|
|
||||||
return INC;
|
|
||||||
case IncDecOperatorKind.DEC:
|
|
||||||
return DEC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,345 +0,0 @@
|
||||||
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
/// Source information strategy that concurrently builds sourcemaps for each of
|
|
||||||
/// child strategies.
|
|
||||||
|
|
||||||
library dart2js.dual_source_information;
|
|
||||||
|
|
||||||
import '../common.dart';
|
|
||||||
import '../elements/entities.dart';
|
|
||||||
import '../js/js_source_mapping.dart';
|
|
||||||
import '../js/js.dart' as js;
|
|
||||||
import '../universe/call_structure.dart';
|
|
||||||
import 'code_output.dart' show BufferedCodeOutput;
|
|
||||||
import 'source_information.dart';
|
|
||||||
|
|
||||||
class MultiSourceInformationStrategy<T>
|
|
||||||
implements JavaScriptSourceInformationStrategy<T> {
|
|
||||||
final List<JavaScriptSourceInformationStrategy<T>> strategies;
|
|
||||||
|
|
||||||
const MultiSourceInformationStrategy(this.strategies);
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformationBuilder<T> createBuilderForContext(MemberEntity member) {
|
|
||||||
return new MultiSourceInformationBuilder<T>(
|
|
||||||
strategies.map((s) => s.createBuilderForContext(member)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void onComplete() {
|
|
||||||
strategies.forEach((s) => s.onComplete());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildSourceMappedMarker() {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
strategies.map((s) => s.buildSourceMappedMarker()).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformationProcessor createProcessor(
|
|
||||||
SourceMapperProvider sourceMapperProvider,
|
|
||||||
SourceInformationReader reader) {
|
|
||||||
return new MultiSourceInformationProcessor(
|
|
||||||
new List<SourceInformationProcessor>.generate(strategies.length,
|
|
||||||
(int index) {
|
|
||||||
return strategies[index].createProcessor(sourceMapperProvider,
|
|
||||||
new MultiSourceInformationReader(reader, index));
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MultiSourceInformationProcessor implements SourceInformationProcessor {
|
|
||||||
final List<SourceInformationProcessor> processors;
|
|
||||||
|
|
||||||
MultiSourceInformationProcessor(this.processors);
|
|
||||||
|
|
||||||
@override
|
|
||||||
void onStartPosition(js.Node node, int startPosition) {
|
|
||||||
processors.forEach((p) => p.onStartPosition(node, startPosition));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void onPositions(
|
|
||||||
js.Node node, int startPosition, int endPosition, int closingPosition) {
|
|
||||||
processors.forEach((p) =>
|
|
||||||
p.onPositions(node, startPosition, endPosition, closingPosition));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void process(js.Node node, BufferedCodeOutput code) {
|
|
||||||
processors.forEach((p) => p.process(node, code));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MultiSourceInformationBuilder<T> implements SourceInformationBuilder<T> {
|
|
||||||
final List<SourceInformationBuilder<T>> builders;
|
|
||||||
|
|
||||||
MultiSourceInformationBuilder(this.builders);
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformationBuilder forContext(MemberEntity member) {
|
|
||||||
return new MultiSourceInformationBuilder(
|
|
||||||
builders.map((b) => b.forContext(member)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildSwitchCase(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildSwitchCase(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildSwitch(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildSwitch(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildAs(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildAs(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildIs(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildIs(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildTry(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildTry(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildCatch(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildCatch(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildBinary(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildBinary(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildUnary(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildUnary(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildIndexSet(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildIndexSet(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildIndex(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildIndex(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildForInSet(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildForInSet(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildForInCurrent(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildForInCurrent(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildForInMoveNext(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildForInMoveNext(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildForInIterator(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildForInIterator(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildStringInterpolation(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildStringInterpolation(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildForeignCode(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildForeignCode(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildVariableDeclaration() {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildVariableDeclaration()).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildAwait(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildAwait(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildYield(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildYield(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildAsyncBody() {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildAsyncBody()).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildAsyncExit() {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildAsyncExit()).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildAssignment(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildAssignment(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildThrow(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildThrow(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildNew(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildNew(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildIf(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildIf(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildCall(T receiver, T call) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildCall(receiver, call)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildGet(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildGet(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildLoop(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildLoop(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildImplicitReturn(MemberEntity element) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildImplicitReturn(element)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildReturn(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildReturn(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildCreate(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildCreate(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildListLiteral(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildListLiteral(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildGeneric(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildGeneric(node)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildDeclaration(MemberEntity member) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildDeclaration(member)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildStub(
|
|
||||||
FunctionEntity function, CallStructure callStructure) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildStub(function, callStructure)).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation buildGoto(T node) {
|
|
||||||
return new MultiSourceInformation(
|
|
||||||
builders.map((b) => b.buildGoto(node)).toList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MultiSourceInformation implements SourceInformation {
|
|
||||||
final List<SourceInformation> infos;
|
|
||||||
|
|
||||||
MultiSourceInformation(this.infos);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get shortText => infos.first?.shortText;
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<SourceLocation> get sourceLocations => infos.first?.sourceLocations;
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceLocation get endPosition => infos.first?.endPosition;
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceLocation get innerPosition => infos.first?.innerPosition;
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceLocation get startPosition => infos.first?.startPosition;
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceSpan get sourceSpan => infos.first?.sourceSpan;
|
|
||||||
|
|
||||||
String toString() => '$infos';
|
|
||||||
}
|
|
||||||
|
|
||||||
class MultiSourceInformationReader implements SourceInformationReader {
|
|
||||||
final SourceInformationReader reader;
|
|
||||||
final int index;
|
|
||||||
|
|
||||||
MultiSourceInformationReader(this.reader, this.index);
|
|
||||||
|
|
||||||
@override
|
|
||||||
SourceInformation getSourceInformation(js.Node node) {
|
|
||||||
MultiSourceInformation sourceInformation =
|
|
||||||
reader.getSourceInformation(node);
|
|
||||||
if (sourceInformation == null) return null;
|
|
||||||
return sourceInformation.infos[index];
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -10,7 +10,6 @@ import 'package:compiler/src/diagnostics/source_span.dart';
|
||||||
import 'package:compiler/src/diagnostics/spannable.dart';
|
import 'package:compiler/src/diagnostics/spannable.dart';
|
||||||
import 'package:compiler/src/elements/entities.dart';
|
import 'package:compiler/src/elements/entities.dart';
|
||||||
import 'package:compiler/src/options.dart';
|
import 'package:compiler/src/options.dart';
|
||||||
import 'package:front_end/src/fasta/scanner.dart';
|
|
||||||
|
|
||||||
abstract class DiagnosticReporterWrapper extends DiagnosticReporter {
|
abstract class DiagnosticReporterWrapper extends DiagnosticReporter {
|
||||||
DiagnosticReporter get reporter;
|
DiagnosticReporter get reporter;
|
||||||
|
@ -63,9 +62,6 @@ abstract class DiagnosticReporterWrapper extends DiagnosticReporter {
|
||||||
return reporter.spanFromSpannable(node);
|
return reporter.spanFromSpannable(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
SourceSpan spanFromToken(Token token) => reporter.spanFromToken(token);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
withCurrentElement(Entity element, f()) {
|
withCurrentElement(Entity element, f()) {
|
||||||
return reporter.withCurrentElement(element, f);
|
return reporter.withCurrentElement(element, f);
|
||||||
|
|
Loading…
Reference in a new issue