Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1257)

Unified Diff: pkg/compiler/lib/src/compiler.dart

Issue 1383503002: Add Resolution and Parsing interfaces for computeType, ensureResolved and parseNode. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Add TODOs. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/compile_time_constants.dart ('k') | pkg/compiler/lib/src/constant_system_dart.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/compiler.dart
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 86a87f3cee323aeca919a52111c4a870640218fa..e86525645936626a22a5f13056b979eb549c82dc 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -24,6 +24,8 @@ import 'common/names.dart' show
import 'common/registry.dart' show
Registry;
import 'common/resolution.dart' show
+ Parsing,
+ Resolution,
ResolutionWorkItem;
import 'common/tasks.dart' show
CompilerTask,
@@ -120,7 +122,8 @@ import 'tokens/token_constants.dart' as Tokens show
import 'tokens/token_map.dart' show
TokenMap;
import 'tree/tree.dart' show
- Node;
+ Node,
+ TypeAnnotation;
import 'typechecker.dart' show
TypeCheckerTask;
import 'types/types.dart' as ti;
@@ -143,6 +146,8 @@ abstract class Compiler extends DiagnosticListener {
World world;
Types types;
_CompilerCoreTypes _coreTypes;
+ _CompilerResolution _resolution;
+ _CompilerParsing _parsing;
final CacheStrategy cacheStrategy;
@@ -315,6 +320,8 @@ abstract class Compiler extends DiagnosticListener {
ClassElement get streamClass => _coreTypes.streamClass;
CoreTypes get coreTypes => _coreTypes;
+ Resolution get resolution => _resolution;
+ Parsing get parsing => _parsing;
ClassElement typedDataClass;
@@ -544,7 +551,9 @@ abstract class Compiler extends DiagnosticListener {
world = new World(this);
// TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and
// make its field final.
- _coreTypes = new _CompilerCoreTypes(this);
+ _parsing = new _CompilerParsing(this);
+ _resolution = new _CompilerResolution(this);
+ _coreTypes = new _CompilerCoreTypes(_resolution);
types = new Types(this);
tracer = new Tracer(this, this.outputProvider);
@@ -888,7 +897,7 @@ abstract class Compiler extends DiagnosticListener {
}
}
- functionClass.ensureResolved(this);
+ functionClass.ensureResolved(resolution);
functionApplyMethod = functionClass.lookupLocalMember('apply');
if (preserveComments) {
@@ -1063,7 +1072,7 @@ abstract class Compiler extends DiagnosticListener {
mainFunction = backend.helperForBadMain();
} else {
mainFunction = main;
- mainFunction.computeType(this);
+ mainFunction.computeType(resolution);
FunctionSignature parameters = mainFunction.functionSignature;
if (parameters.requiredParameterCount > 2) {
int index = 0;
@@ -1240,7 +1249,7 @@ abstract class Compiler extends DiagnosticListener {
void fullyEnqueueTopLevelElement(Element element, Enqueuer world) {
if (element.isClass) {
ClassElement cls = element;
- cls.ensureResolved(this);
+ cls.ensureResolved(resolution);
cls.forEachLocalMember(enqueuer.resolution.addToWorkList);
backend.registerInstantiatedType(
cls.rawType, world, globalDependencies);
@@ -1256,7 +1265,7 @@ abstract class Compiler extends DiagnosticListener {
for (LibraryElement library in libraryLoader.libraries) {
if (library.metadata != null) {
for (MetadataAnnotation metadata in library.metadata) {
- metadata.ensureResolved(this);
+ metadata.ensureResolved(resolution);
}
}
}
@@ -1277,13 +1286,13 @@ abstract class Compiler extends DiagnosticListener {
world.nativeEnqueuer.processNativeClasses(libraryLoader.libraries);
if (main != null && !main.isErroneous) {
FunctionElement mainMethod = main;
- mainMethod.computeType(this);
+ mainMethod.computeType(resolution);
if (mainMethod.functionSignature.parameterCount != 0) {
// The first argument could be a list of strings.
- backend.listImplementation.ensureResolved(this);
+ backend.listImplementation.ensureResolved(resolution);
backend.registerInstantiatedType(
backend.listImplementation.rawType, world, globalDependencies);
- backend.stringImplementation.ensureResolved(this);
+ backend.stringImplementation.ensureResolved(resolution);
backend.registerInstantiatedType(
backend.stringImplementation.rawType, world, globalDependencies);
@@ -1753,7 +1762,7 @@ class SuppressionInfo {
}
class _CompilerCoreTypes implements CoreTypes {
- final Compiler compiler;
+ final Resolution resolution;
ClassElement objectClass;
ClassElement boolClass;
@@ -1773,29 +1782,29 @@ class _CompilerCoreTypes implements CoreTypes {
ClassElement streamClass;
ClassElement resourceClass;
- _CompilerCoreTypes(this.compiler);
+ _CompilerCoreTypes(this.resolution);
@override
- InterfaceType get objectType => objectClass.computeType(compiler);
+ InterfaceType get objectType => objectClass.computeType(resolution);
@override
- InterfaceType get boolType => boolClass.computeType(compiler);
+ InterfaceType get boolType => boolClass.computeType(resolution);
@override
- InterfaceType get doubleType => doubleClass.computeType(compiler);
+ InterfaceType get doubleType => doubleClass.computeType(resolution);
@override
- InterfaceType get functionType => functionClass.computeType(compiler);
+ InterfaceType get functionType => functionClass.computeType(resolution);
@override
- InterfaceType get intType => intClass.computeType(compiler);
+ InterfaceType get intType => intClass.computeType(resolution);
@override
- InterfaceType get resourceType => resourceClass.computeType(compiler);
+ InterfaceType get resourceType => resourceClass.computeType(resolution);
@override
InterfaceType listType([DartType elementType]) {
- InterfaceType type = listClass.computeType(compiler);
+ InterfaceType type = listClass.computeType(resolution);
if (elementType == null) {
return listClass.rawType;
}
@@ -1805,7 +1814,7 @@ class _CompilerCoreTypes implements CoreTypes {
@override
InterfaceType mapType([DartType keyType,
DartType valueType]) {
- InterfaceType type = mapClass.computeType(compiler);
+ InterfaceType type = mapClass.computeType(resolution);
if (keyType == null && valueType == null) {
return mapClass.rawType;
} else if (keyType == null) {
@@ -1817,23 +1826,23 @@ class _CompilerCoreTypes implements CoreTypes {
}
@override
- InterfaceType get nullType => nullClass.computeType(compiler);
+ InterfaceType get nullType => nullClass.computeType(resolution);
@override
- InterfaceType get numType => numClass.computeType(compiler);
+ InterfaceType get numType => numClass.computeType(resolution);
@override
- InterfaceType get stringType => stringClass.computeType(compiler);
+ InterfaceType get stringType => stringClass.computeType(resolution);
@override
- InterfaceType get symbolType => symbolClass.computeType(compiler);
+ InterfaceType get symbolType => symbolClass.computeType(resolution);
@override
- InterfaceType get typeType => typeClass.computeType(compiler);
+ InterfaceType get typeType => typeClass.computeType(resolution);
@override
InterfaceType iterableType([DartType elementType]) {
- InterfaceType type = iterableClass.computeType(compiler);
+ InterfaceType type = iterableClass.computeType(resolution);
if (elementType == null) {
return iterableClass.rawType;
}
@@ -1842,7 +1851,7 @@ class _CompilerCoreTypes implements CoreTypes {
@override
InterfaceType futureType([DartType elementType]) {
- InterfaceType type = futureClass.computeType(compiler);
+ InterfaceType type = futureClass.computeType(resolution);
if (elementType == null) {
return futureClass.rawType;
}
@@ -1851,10 +1860,79 @@ class _CompilerCoreTypes implements CoreTypes {
@override
InterfaceType streamType([DartType elementType]) {
- InterfaceType type = streamClass.computeType(compiler);
+ InterfaceType type = streamClass.computeType(resolution);
if (elementType == null) {
return streamClass.rawType;
}
return type.createInstantiation([elementType]);
}
}
+
+// TODO(johnniwinther): Move [ResolverTask] here.
+class _CompilerResolution implements Resolution {
+ final Compiler compiler;
+
+ _CompilerResolution(this.compiler);
+
+ @override
+ DiagnosticListener get listener => compiler;
+
+ @override
+ Parsing get parsing => compiler.parsing;
+
+ @override
+ CoreTypes get coreTypes => compiler.coreTypes;
+
+ @override
+ void registerClass(ClassElement cls) {
+ compiler.world.registerClass(cls);
+ }
+
+ @override
+ void resolveClass(ClassElement cls) {
+ compiler.resolver.resolveClass(cls);
+ }
+
+ @override
+ void resolveTypedef(TypedefElement typdef) {
+ compiler.resolver.resolve(typdef);
+ }
+
+ @override
+ void resolveMetadataAnnotation(MetadataAnnotation metadataAnnotation) {
+ compiler.resolver.resolveMetadataAnnotation(metadataAnnotation);
+ }
+
+ @override
+ FunctionSignature resolveSignature(FunctionElement function) {
+ return compiler.resolver.resolveSignature(function);
+ }
+
+ @override
+ DartType resolveTypeAnnotation(Element element, TypeAnnotation node) {
+ return compiler.resolver.resolveTypeAnnotation(element, node);
+ }
+}
+
+// TODO(johnniwinther): Move [ParserTask], [PatchParserTask], [DietParserTask]
+// and [ScannerTask] here.
+class _CompilerParsing implements Parsing {
+ final Compiler compiler;
+
+ _CompilerParsing(this.compiler);
+
+ @override
+ DiagnosticListener get listener => compiler;
+
+ @override
+ measure(f()) => compiler.parser.measure(f);
+
+ @override
+ void parsePatchClass(ClassElement cls) {
+ compiler.patchParser.measure(() {
+ if (cls.isPatch) {
+ compiler.patchParser.parsePatchClassNode(cls);
+ }
+ });
+ }
+}
« no previous file with comments | « pkg/compiler/lib/src/compile_time_constants.dart ('k') | pkg/compiler/lib/src/constant_system_dart.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698