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

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

Issue 2123073003: remove dependency on compiler from resolution (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix tests Created 4 years, 5 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
Index: pkg/compiler/lib/src/resolution/members.dart
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index b12218b4d36c3fb4beef0174e23c25706a35707f..311a795ef54fffd05c465cb059925049b66dfa7d 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -6,8 +6,8 @@ library dart2js.resolution.members;
import '../common.dart';
import '../common/names.dart' show Selectors;
-import '../common/resolution.dart' show Feature;
-import '../compiler.dart' show Compiler;
+import '../common/resolution.dart' show Feature, Resolution;
+import '../compile_time_constants.dart';
import '../constants/constructors.dart'
show RedirectingFactoryConstantConstructor;
import '../constants/expressions.dart';
@@ -27,6 +27,7 @@ import '../elements/modelx.dart'
ParameterElementX,
VariableElementX,
VariableList;
+import '../options.dart';
import '../tokens/token.dart' show isUserDefinableOperator;
import '../tree/tree.dart';
import '../universe/call_structure.dart' show CallStructure;
@@ -142,7 +143,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
r')$');
ResolverVisitor(
- Compiler compiler, Element element, ResolutionRegistry registry,
+ Resolution resolution, Element element, ResolutionRegistry registry,
{Scope scope, bool useEnclosingScope: false})
: this.enclosingElement = element,
// When the element is a field, we are actually resolving its
@@ -159,7 +160,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
: element.buildScope()),
// The type annotations on a typedef do not imply type checks.
// TODO(karlklose): clean this up (dartbug.com/8870).
- inCheckContext = compiler.options.enableTypeAssertions &&
+ inCheckContext = resolution.options.enableTypeAssertions &&
!element.isLibrary &&
!element.isTypedef &&
!element.enclosingElement.isTypedef,
@@ -167,11 +168,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
constantState = element.isConst
? ConstantState.CONSTANT
: ConstantState.NON_CONSTANT,
- super(compiler, registry);
+ super(resolution, registry);
- CoreClasses get coreClasses => compiler.coreClasses;
-
- CoreTypes get coreTypes => compiler.coreTypes;
+ CoreClasses get coreClasses => resolution.coreClasses;
+ CoreTypes get coreTypes => resolution.coreTypes;
+ ConstantEnvironment get constants => resolution.constants;
+ ResolverTask get resolver => resolution.resolver;
+ CompilerOptions get options => resolution.options;
AsyncMarker get currentAsyncMarker {
if (enclosingElement is FunctionElement) {
@@ -454,7 +457,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
addDeferredAction(enclosingElement, () {
functionSignature.forEachOptionalParameter((ParameterElementX parameter) {
parameter.constant =
- compiler.resolver.constantCompiler.compileConstant(parameter);
+ resolver.constantCompiler.compileConstant(parameter);
});
});
if (inCheckContext) {
@@ -465,7 +468,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
ResolutionResult visitAssert(Assert node) {
- if (!compiler.options.enableAssertMessage) {
+ if (!options.enableAssertMessage) {
if (node.hasMessage) {
reporter.reportErrorMessage(
node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE);
@@ -573,9 +576,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
LocalFunctionElementX function = new LocalFunctionElementX(
name, node, ElementKind.FUNCTION, Modifiers.EMPTY, enclosingElement);
- ResolverTask.processAsyncMarker(compiler, function, registry);
+ ResolverTask.processAsyncMarker(resolution, function, registry);
function.functionSignature = SignatureResolver.analyze(
- compiler,
+ resolution,
scope,
node.typeVariables,
node.parameters,
@@ -2017,7 +2020,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
ResolutionResult handleConstantTypeLiteralUpdate(SendSet node, Name name,
TypeDeclarationElement element, DartType type, ConstantAccess semantics) {
// TODO(johnniwinther): Remove this when all constants are evaluated.
- compiler.resolver.constantCompiler.evaluate(semantics.constant);
+ resolver.constantCompiler.evaluate(semantics.constant);
ErroneousElement error;
if (node.isIfNullAssignment) {
@@ -2569,7 +2572,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
semantics = new StaticAccess.parameter(element);
}
} else if (element.isInitializingFormal &&
- compiler.options.enableInitializingFormalAccess) {
+ options.enableInitializingFormalAccess) {
error = reportAndCreateErroneousElement(node.selector, name.text,
MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER, {'name': name});
semantics = new StaticAccess.finalParameter(element);
@@ -2627,12 +2630,12 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
// of parse errors to make [element] erroneous. Fix this!
member.computeType(resolution);
- if (member == compiler.mirrorSystemGetNameFunction &&
- !compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(enclosingElement)) {
+ if (member == resolution.mirrorSystemGetNameFunction &&
+ !resolution.mirrorUsageAnalyzerTask.hasMirrorUsage(enclosingElement)) {
reporter
.reportHintMessage(node.selector, MessageKind.STATIC_FUNCTION_BLOAT, {
- 'class': compiler.mirrorSystemClass.name,
- 'name': compiler.mirrorSystemGetNameFunction.name
+ 'class': resolution.mirrorSystemClass.name,
+ 'name': resolution.mirrorSystemGetNameFunction.name
});
}
@@ -2658,7 +2661,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
registry.registerStaticUse(
new StaticUse.staticInvoke(semantics.element, callStructure));
handleForeignCall(node, semantics.element, callStructure);
- if (method == compiler.identicalFunction &&
+ if (method == resolution.identicalFunction &&
argumentsResult.isValidAsConstant) {
result = new ConstantResult(
node,
@@ -3028,7 +3031,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
// TODO(johnniwinther): Move this to the backend resolution callbacks.
void handleForeignCall(
Send node, Element target, CallStructure callStructure) {
- if (target != null && compiler.backend.isForeign(target)) {
+ if (target != null && resolution.target.isForeign(target)) {
registry.registerForeignCall(node, target, callStructure, this);
}
}
@@ -3577,18 +3580,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
ResolutionResult visitYield(Yield node) {
- if (!compiler.backend.supportsAsyncAwait) {
Johnni Winther 2016/07/08 08:05:39 Dartino still needs this. Move the [supportsAsyncA
Harry Terkelsen 2016/07/18 17:35:58 Done.
- reporter.reportErrorMessage(
- node.yieldToken, MessageKind.ASYNC_AWAIT_NOT_SUPPORTED);
+ if (!currentAsyncMarker.isYielding) {
+ reporter.reportErrorMessage(node, MessageKind.INVALID_YIELD);
+ }
+ if (currentAsyncMarker.isAsync) {
+ coreClasses.streamClass.ensureResolved(resolution);
} else {
- if (!currentAsyncMarker.isYielding) {
- reporter.reportErrorMessage(node, MessageKind.INVALID_YIELD);
- }
- if (currentAsyncMarker.isAsync) {
- coreClasses.streamClass.ensureResolved(resolution);
- } else {
- coreClasses.iterableClass.ensureResolved(resolution);
- }
+ coreClasses.iterableClass.ensureResolved(resolution);
}
visit(node.expression);
return const NoneResult();
@@ -3621,7 +3619,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
// Register a post process to check for cycles in the redirection chain
// and set the actual generative constructor at the end of the chain.
addDeferredAction(constructor, () {
- compiler.resolver.resolveRedirectionChain(constructor, node);
+ resolver.resolveRedirectionChain(constructor, node);
});
break;
case ConstructorResultKind.ABSTRACT:
@@ -3659,7 +3657,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
.subst(type.typeArguments, targetClass.typeVariables);
FunctionType constructorType = constructor.computeType(resolution);
bool isSubtype =
- compiler.types.isSubtype(targetConstructorType, constructorType);
+ resolution.types.isSubtype(targetConstructorType, constructorType);
if (!isSubtype) {
reporter.reportWarningMessage(node, MessageKind.NOT_ASSIGNABLE,
{'fromType': targetConstructorType, 'toType': constructorType});
@@ -3684,7 +3682,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
registry.registerTypeUse(new TypeUse.instantiation(redirectionTarget
.enclosingClass.thisType
.subst(type.typeArguments, targetClass.typeVariables)));
- if (enclosingElement == compiler.symbolConstructor) {
+ if (enclosingElement == resolution.symbolConstructor) {
registry.registerFeature(Feature.SYMBOL_CONSTRUCTOR);
}
if (isValidAsConstant) {
@@ -3718,15 +3716,10 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
ResolutionResult visitAwait(Await node) {
- if (!compiler.backend.supportsAsyncAwait) {
Johnni Winther 2016/07/08 08:05:39 Ditto.
Harry Terkelsen 2016/07/18 17:35:58 Done.
- reporter.reportErrorMessage(
- node.awaitToken, MessageKind.ASYNC_AWAIT_NOT_SUPPORTED);
- } else {
- if (!currentAsyncMarker.isAsync) {
- reporter.reportErrorMessage(node, MessageKind.INVALID_AWAIT);
- }
- coreClasses.futureClass.ensureResolved(resolution);
+ if (!currentAsyncMarker.isAsync) {
+ reporter.reportErrorMessage(node, MessageKind.INVALID_AWAIT);
}
+ coreClasses.futureClass.ensureResolved(resolution);
visit(node.expression);
return const NoneResult();
}
@@ -3740,7 +3733,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
VariableList variables = new VariableList.node(node, type);
VariableDefinitionsVisitor visitor =
- new VariableDefinitionsVisitor(compiler, node, this, variables);
+ new VariableDefinitionsVisitor(resolution, node, this, variables);
Modifiers modifiers = node.modifiers;
void reportExtraModifier(String modifier) {
@@ -3773,7 +3766,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
if (node.metadata != null) {
variables.metadataInternal =
- compiler.resolver.resolveMetadata(enclosingElement, node);
+ resolver.resolveMetadata(enclosingElement, node);
}
visitor.visit(node.definitions);
return const NoneResult();
@@ -3893,11 +3886,11 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
if (node.isConst) {
bool isValidAsConstant = !isInvalid && constructor.isConst;
- if (constructor == compiler.symbolConstructor) {
+ if (constructor == resolution.symbolConstructor) {
Node argumentNode = node.send.arguments.head;
- ConstantExpression constant = compiler.resolver.constantCompiler
+ ConstantExpression constant = resolver.constantCompiler
.compileNode(argumentNode, registry.mapping);
- ConstantValue name = compiler.constants.getConstantValue(constant);
+ ConstantValue name = resolution.constants.getConstantValue(constant);
if (!name.isString) {
DartType type = name.getType(coreTypes);
reporter.reportErrorMessage(
@@ -3909,8 +3902,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
registry.registerConstSymbol(nameString);
}
}
- } else if (constructor == compiler.mirrorsUsedConstructor) {
- compiler.mirrorUsageAnalyzerTask.validate(node, registry.mapping);
+ } else if (constructor == resolution.mirrorsUsedConstructor) {
+ resolution.mirrorUsageAnalyzerTask.validate(node, registry.mapping);
}
analyzeConstantDeferred(node);
@@ -3969,8 +3962,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
analyzeConstantDeferred(node, onAnalyzed: onAnalyzed);
} else {
// Not constant.
- if (constructor == compiler.symbolConstructor &&
- !compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(enclosingElement)) {
+ if (constructor == resolution.symbolConstructor &&
+ !resolution.mirrorUsageAnalyzerTask
+ .hasMirrorUsage(enclosingElement)) {
reporter.reportHintMessage(node.newToken, MessageKind.NON_CONST_BLOAT,
{'name': coreClasses.symbolClass.name});
}
@@ -4001,15 +3995,15 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
void analyzeConstant(Node node, {enforceConst: true}) {
- ConstantExpression constant = compiler.resolver.constantCompiler
+ ConstantExpression constant = resolver.constantCompiler
.compileNode(node, registry.mapping, enforceConst: enforceConst);
if (constant == null) {
- assert(invariant(node, compiler.compilationFailed));
+ assert(invariant(node, reporter.hasReportedError));
return;
}
- ConstantValue value = compiler.constants.getConstantValue(constant);
+ ConstantValue value = resolution.constants.getConstantValue(constant);
if (value.isMap) {
checkConstMapKeysDontOverrideEquals(node, value);
}
@@ -4050,13 +4044,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
* [:null:], if there is no corresponding constructor, class or library.
*/
ConstructorResult resolveConstructor(NewExpression node) {
- return node.accept(
- new ConstructorResolver(compiler, this, inConstContext: node.isConst));
+ return node.accept(new ConstructorResolver(resolution, this,
+ inConstContext: node.isConst));
}
ConstructorResult resolveRedirectingFactory(RedirectingFactoryBody node,
{bool inConstContext: false}) {
- return node.accept(new ConstructorResolver(compiler, this,
+ return node.accept(new ConstructorResolver(resolution, this,
inConstContext: inConstContext));
}
@@ -4245,18 +4239,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
ResolutionResult visitAsyncForIn(AsyncForIn node) {
- if (!compiler.backend.supportsAsyncAwait) {
Johnni Winther 2016/07/08 08:05:39 Ditto.
+ if (!currentAsyncMarker.isAsync) {
reporter.reportErrorMessage(
- node.awaitToken, MessageKind.ASYNC_AWAIT_NOT_SUPPORTED);
- } else {
- if (!currentAsyncMarker.isAsync) {
- reporter.reportErrorMessage(
- node.awaitToken, MessageKind.INVALID_AWAIT_FOR_IN);
- }
- registry.registerFeature(Feature.ASYNC_FOR_IN);
- registry.registerDynamicUse(new DynamicUse(Selectors.current, null));
- registry.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
+ node.awaitToken, MessageKind.INVALID_AWAIT_FOR_IN);
}
+ registry.registerFeature(Feature.ASYNC_FOR_IN);
+ registry.registerDynamicUse(new DynamicUse(Selectors.current, null));
+ registry.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
+
visit(node.expression);
Scope blockScope = new BlockScope(scope);
@@ -4333,7 +4323,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
}
} else {
// The selector may only be null if we reported an error.
- assert(invariant(declaration, compiler.compilationFailed));
+ assert(invariant(declaration, reporter.hasReportedError));
}
if (loopVariable != null) {
// loopVariable may be null if it could not be resolved.
@@ -4496,7 +4486,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
assert(invariant(node, constant != null,
message: 'No constant computed for $node'));
- ConstantValue value = compiler.constants.getConstantValue(constant);
+ ConstantValue value = resolution.constants.getConstantValue(constant);
DartType caseType = value.getType(coreTypes); //typeOfConstant(value);
if (firstCaseType == null) {

Powered by Google App Engine
This is Rietveld 408576698