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 515aa683796accc14c017d23e3fce24a6e30e294..d48603dc9a22c8c29145e944ee8cd6dbb3b1d352 100644 |
--- a/pkg/compiler/lib/src/common/resolution.dart |
+++ b/pkg/compiler/lib/src/common/resolution.dart |
@@ -6,27 +6,35 @@ library dart2js.common.resolution; |
import '../common.dart'; |
import '../compiler.dart' show Compiler; |
+import '../compile_time_constants.dart'; |
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 '../elements/elements.dart' |
show |
AstElement, |
ClassElement, |
+ ConstructorElement, |
Element, |
ExecutableElement, |
FunctionElement, |
FunctionSignature, |
LibraryElement, |
MetadataAnnotation, |
+ MethodElement, |
ResolvedAst, |
TypedefElement; |
import '../enqueue.dart' show ResolutionEnqueuer; |
-import '../options.dart' show ParserOptions; |
+import '../id_generator.dart'; |
+import '../mirrors_used.dart'; |
+import '../options.dart' show CompilerOptions, ParserOptions; |
import '../parser/element_listener.dart' show ScannerOptions; |
import '../parser/parser_task.dart'; |
import '../patch_parser.dart'; |
-import '../tree/tree.dart' show TypeAnnotation; |
+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 'backend_api.dart'; |
import 'work.dart' show ItemCompilationContext, WorkItem; |
@@ -55,9 +63,8 @@ class ResolutionImpact extends WorldImpact { |
Iterable<MapLiteralUse> get mapLiterals => const <MapLiteralUse>[]; |
Iterable<ListLiteralUse> get listLiterals => const <ListLiteralUse>[]; |
Iterable<String> get constSymbolNames => const <String>[]; |
- Iterable<ConstantExpression> get constantLiterals { |
- return const <ConstantExpression>[]; |
- } |
+ Iterable<ConstantExpression> get constantLiterals => |
+ const <ConstantExpression>[]; |
Iterable<dynamic> get nativeData => const <dynamic>[]; |
} |
@@ -206,6 +213,32 @@ abstract class Target { |
/// Resolve target specific information for [element] and register it with |
/// [registry]. |
void resolveNativeElement(Element element, NativeRegistry registry) {} |
+ |
+ /// Processes [element] for resolution and returns the [MethodElement] that |
+ /// defines the implementation of [element]. |
+ MethodElement resolveExternalFunction(MethodElement element) => element; |
+ |
+ /// Called when resolving a call to a foreign function. If a non-null value |
+ /// is returned, this is stored as native data for [node] in the resolved |
+ /// AST. |
+ dynamic resolveForeignCall(Send node, Element element, |
+ CallStructure callStructure, ForeignResolver resolver) { |
+ return null; |
+ } |
+ |
+ /// Returns the default superclass for the given [element] in this target. |
+ ClassElement defaultSuperclass(ClassElement element); |
+ |
+ /// Returns `true` if [element] is a native element, that is, that the |
+ /// corresponding entity already exists in the target language. |
+ bool isNative(Element element) => false; |
+ |
+ /// Returns `true` if [element] is a foreign element, that is, that the |
+ /// backend has specialized handling for the element. |
+ bool isForeign(Element element) => false; |
+ |
+ /// Returns `true` if this target supports async/await. |
+ bool get supportsAsyncAwait => true; |
} |
// TODO(johnniwinther): Rename to `Resolver` or `ResolverContext`. |
@@ -216,6 +249,24 @@ abstract class Resolution implements Frontend { |
CoreTypes get coreTypes; |
Types get types; |
Target get target; |
+ ResolverTask get resolver; |
+ ResolutionEnqueuer get enqueuer; |
+ CompilerOptions get options; |
+ IdGenerator get idGenerator; |
+ ConstantEnvironment get constants; |
+ MirrorUsageAnalyzerTask get mirrorUsageAnalyzerTask; |
+ |
+ // TODO(het): Move all elements into common/elements.dart |
+ LibraryElement get coreLibrary; |
+ FunctionElement get identicalFunction; |
+ ClassElement get mirrorSystemClass; |
+ FunctionElement get mirrorSystemGetNameFunction; |
+ ConstructorElement get mirrorsUsedConstructor; |
+ ConstructorElement get symbolConstructor; |
+ |
+ // TODO(het): This is only referenced in a test... |
+ /// The constant for the [proxy] variable defined in dart:core. |
+ ConstantValue get proxyConstant; |
/// If set to `true` resolution caches will not be cleared. Use this only for |
/// testing. |
@@ -237,6 +288,14 @@ abstract class Resolution implements Frontend { |
/// Resolve [element] if it has not already been resolved. |
void ensureResolved(Element element); |
+ /// Called whenever a class has been resolved. |
+ void onClassResolved(ClassElement element); |
+ |
+ /// Registers that [element] has a compile time error. |
+ /// |
+ /// The error itself is given in [message]. |
+ void registerCompileTimeError(Element element, DiagnosticMessage message); |
+ |
ResolutionWorkItem createWorkItem( |
Element element, ItemCompilationContext compilationContext); |
@@ -274,6 +333,10 @@ abstract class Resolution implements Frontend { |
void emptyCache(); |
void forgetElement(Element element); |
+ |
+ /// Returns `true` if [value] is the top-level [proxy] annotation from the |
+ /// core library. |
+ bool isProxyConstant(ConstantValue value); |
} |
/// A container of commonly used dependencies for tasks that involve parsing. |