| Index: pkg/compiler/lib/src/common/resolution.dart
|
| diff --git a/pkg/compiler/lib/src/common/resolution.dart b/pkg/compiler/lib/src/common/resolution.dart
|
| index 841e77cc6849f89595f94935144678683285dcfb..42f7b32bc57ec55f8954c29b5386a2acf8350267 100644
|
| --- a/pkg/compiler/lib/src/common/resolution.dart
|
| +++ b/pkg/compiler/lib/src/common/resolution.dart
|
| @@ -10,7 +10,7 @@ import '../compiler.dart' show Compiler;
|
| import '../constants/expressions.dart' show ConstantExpression;
|
| import '../constants/values.dart' show ConstantValue;
|
| import '../core_types.dart' show CoreClasses, CoreTypes;
|
| -import '../dart_types.dart' show DartType, InterfaceType, Types;
|
| +import '../dart_types.dart' show DartType, Types;
|
| import '../elements/elements.dart'
|
| show
|
| AstElement,
|
| @@ -36,6 +36,7 @@ import '../resolution/resolution.dart';
|
| import '../tree/tree.dart' show Send, TypeAnnotation;
|
| import '../universe/call_structure.dart' show CallStructure;
|
| import '../universe/world_impact.dart' show WorldImpact;
|
| +import '../universe/feature.dart';
|
| import 'backend_api.dart';
|
| import 'work.dart' show ItemCompilationContext, WorkItem;
|
|
|
| @@ -69,132 +70,6 @@ class ResolutionImpact extends WorldImpact {
|
| Iterable<dynamic> get nativeData => const <dynamic>[];
|
| }
|
|
|
| -/// A language feature seen during resolution.
|
| -// TODO(johnniwinther): Should mirror usage be part of this?
|
| -enum Feature {
|
| - /// Invocation of a generative construction on an abstract class.
|
| - ABSTRACT_CLASS_INSTANTIATION,
|
| -
|
| - /// An assert statement with no message.
|
| - ASSERT,
|
| -
|
| - /// An assert statement with a message.
|
| - ASSERT_WITH_MESSAGE,
|
| -
|
| - /// A method with an `async` body modifier.
|
| - ASYNC,
|
| -
|
| - /// An asynchronous for in statement like `await for (var e in i) {}`.
|
| - ASYNC_FOR_IN,
|
| -
|
| - /// A method with an `async*` body modifier.
|
| - ASYNC_STAR,
|
| -
|
| - /// A catch statement.
|
| - CATCH_STATEMENT,
|
| -
|
| - /// A compile time error.
|
| - COMPILE_TIME_ERROR,
|
| -
|
| - /// A fall through in a switch case.
|
| - FALL_THROUGH_ERROR,
|
| -
|
| - /// A ++/-- operation.
|
| - INC_DEC_OPERATION,
|
| -
|
| - /// A field whose initialization is not a constant.
|
| - LAZY_FIELD,
|
| -
|
| - /// A catch clause with a variable for the stack trace.
|
| - STACK_TRACE_IN_CATCH,
|
| -
|
| - /// String interpolation.
|
| - STRING_INTERPOLATION,
|
| -
|
| - /// String juxtaposition.
|
| - STRING_JUXTAPOSITION,
|
| -
|
| - /// An implicit call to `super.noSuchMethod`, like calling an unresolved
|
| - /// super method.
|
| - SUPER_NO_SUCH_METHOD,
|
| -
|
| - /// A redirection to the `Symbol` constructor.
|
| - SYMBOL_CONSTRUCTOR,
|
| -
|
| - /// An synchronous for in statement, like `for (var e in i) {}`.
|
| - SYNC_FOR_IN,
|
| -
|
| - /// A method with a `sync*` body modifier.
|
| - SYNC_STAR,
|
| -
|
| - /// A throw expression.
|
| - THROW_EXPRESSION,
|
| -
|
| - /// An implicit throw of a `NoSuchMethodError`, like calling an unresolved
|
| - /// static method.
|
| - THROW_NO_SUCH_METHOD,
|
| -
|
| - /// An implicit throw of a runtime error, like
|
| - THROW_RUNTIME_ERROR,
|
| -
|
| - /// The need for a type variable bound check, like instantiation of a generic
|
| - /// type whose type variable have non-trivial bounds.
|
| - TYPE_VARIABLE_BOUNDS_CHECK,
|
| -}
|
| -
|
| -/// A use of a map literal seen during resolution.
|
| -class MapLiteralUse {
|
| - final InterfaceType type;
|
| - final bool isConstant;
|
| - final bool isEmpty;
|
| -
|
| - MapLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
|
| -
|
| - int get hashCode {
|
| - return type.hashCode * 13 +
|
| - isConstant.hashCode * 17 +
|
| - isEmpty.hashCode * 19;
|
| - }
|
| -
|
| - bool operator ==(other) {
|
| - if (identical(this, other)) return true;
|
| - if (other is! MapLiteralUse) return false;
|
| - return type == other.type &&
|
| - isConstant == other.isConstant &&
|
| - isEmpty == other.isEmpty;
|
| - }
|
| -
|
| - String toString() {
|
| - return 'MapLiteralUse($type,isConstant:$isConstant,isEmpty:$isEmpty)';
|
| - }
|
| -}
|
| -
|
| -/// A use of a list literal seen during resolution.
|
| -class ListLiteralUse {
|
| - final InterfaceType type;
|
| - final bool isConstant;
|
| - final bool isEmpty;
|
| -
|
| - ListLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
|
| -
|
| - int get hashCode {
|
| - return type.hashCode * 13 +
|
| - isConstant.hashCode * 17 +
|
| - isEmpty.hashCode * 19;
|
| - }
|
| -
|
| - bool operator ==(other) {
|
| - if (identical(this, other)) return true;
|
| - if (other is! ListLiteralUse) return false;
|
| - return type == other.type &&
|
| - isConstant == other.isConstant &&
|
| - isEmpty == other.isEmpty;
|
| - }
|
| -
|
| - String toString() {
|
| - return 'ListLiteralUse($type,isConstant:$isConstant,isEmpty:$isEmpty)';
|
| - }
|
| -}
|
|
|
| /// Interface for the accessing the front-end analysis.
|
| // TODO(johnniwinther): Find a better name for this.
|
|
|