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 206576a81948419c7e798db70d2ecb217580a06a..137edcf8569e2aff168ead149df0e559ad36e41b 100644 |
--- a/pkg/compiler/lib/src/resolution/members.dart |
+++ b/pkg/compiler/lib/src/resolution/members.dart |
@@ -184,6 +184,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
? ConstantState.CONSTANT : ConstantState.NON_CONSTANT, |
super(compiler, registry); |
+ CoreClasses get coreClasses => compiler.coreClasses; |
+ |
CoreTypes get coreTypes => compiler.coreTypes; |
AsyncMarker get currentAsyncMarker { |
@@ -359,7 +361,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
if (Elements.isUnresolved(element) && name == 'dynamic') { |
// TODO(johnniwinther): Remove this hack when we can return more complex |
// objects than [Element] from this method. |
- element = compiler.typeClass; |
+ element = coreClasses.typeClass; |
// Set the type to be `dynamic` to mark that this is a type literal. |
registry.setType(node, const DynamicType()); |
} |
@@ -2110,7 +2112,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
node.isCall ? coreTypes.typeType : type); |
AccessSemantics semantics = new ConstantAccess.dynamicTypeLiteral(constant); |
return handleConstantTypeLiteralAccess( |
- node, const PublicName('dynamic'), compiler.typeClass, type, semantics); |
+ node, const PublicName('dynamic'), |
+ coreClasses.typeClass, type, semantics); |
} |
/// Handle update to a type literal of the type 'dynamic'. Like `dynamic++` or |
@@ -2121,7 +2124,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
new TypeConstantExpression(const DynamicType()); |
AccessSemantics semantics = new ConstantAccess.dynamicTypeLiteral(constant); |
return handleConstantTypeLiteralUpdate( |
- node, const PublicName('dynamic'), compiler.typeClass, type, semantics); |
+ node, const PublicName('dynamic'), |
+ coreClasses.typeClass, type, semantics); |
} |
/// Handle access to a type literal of a class. Like `C` or |
@@ -3581,8 +3585,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
} |
ResolutionResult visitYield(Yield node) { |
- compiler.streamClass.ensureResolved(resolution); |
- compiler.iterableClass.ensureResolved(resolution); |
+ coreClasses.streamClass.ensureResolved(resolution); |
+ coreClasses.iterableClass.ensureResolved(resolution); |
visit(node.expression); |
return const NoneResult(); |
} |
@@ -3706,7 +3710,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
} |
ResolutionResult visitAwait(Await node) { |
- compiler.futureClass.ensureResolved(resolution); |
+ coreClasses.futureClass.ensureResolved(resolution); |
visit(node.expression); |
return const NoneResult(); |
} |
@@ -3857,7 +3861,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
enclosingElement)) { |
reporter.reportHintMessage( |
node.newToken, MessageKind.NON_CONST_BLOAT, |
- {'name': compiler.symbolClass.name}); |
+ {'name': coreClasses.symbolClass.name}); |
} |
} |
} else if (isMirrorsUsedConstant) { |
@@ -3905,9 +3909,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
ObjectConstantValue objectConstant = key; |
DartType keyType = objectConstant.type; |
ClassElement cls = keyType.element; |
- if (cls == compiler.stringClass) continue; |
+ if (cls == coreClasses.stringClass) continue; |
Element equals = cls.lookupMember('=='); |
- if (equals.enclosingClass != compiler.objectClass) { |
+ if (equals.enclosingClass != coreClasses.objectClass) { |
reporter.reportErrorMessage( |
spannable, |
MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS, |
@@ -4390,12 +4394,12 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
} |
DartType typeOfConstant(ConstantValue constant) { |
- if (constant.isInt) return compiler.intClass.rawType; |
- if (constant.isBool) return compiler.boolClass.rawType; |
- if (constant.isDouble) return compiler.doubleClass.rawType; |
- if (constant.isString) return compiler.stringClass.rawType; |
- if (constant.isNull) return compiler.nullClass.rawType; |
- if (constant.isFunction) return compiler.functionClass.rawType; |
+ if (constant.isInt) return coreTypes.intType; |
+ if (constant.isBool) return coreTypes.boolType; |
+ if (constant.isDouble) return coreTypes.doubleType; |
+ if (constant.isString) return coreTypes.stringType; |
+ if (constant.isNull) return coreTypes.nullType; |
+ if (constant.isFunction) return coreTypes.functionType; |
assert(constant.isObject); |
ObjectConstantValue objectConstant = constant; |
return objectConstant.type; |
@@ -4404,7 +4408,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
bool overridesEquals(DartType type) { |
ClassElement cls = type.element; |
Element equals = cls.lookupMember('=='); |
- return equals.enclosingClass != compiler.objectClass; |
+ return equals.enclosingClass != coreClasses.objectClass; |
} |
void checkCaseExpressions(SwitchStatement node) { |
@@ -4429,7 +4433,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
message: 'No constant computed for $node')); |
ConstantValue value = compiler.constants.getConstantValue(constant); |
- DartType caseType = typeOfConstant(value); |
+ DartType caseType = value.getType(coreTypes);//typeOfConstant(value); |
if (firstCaseType == null) { |
firstCase = caseMatch; |
@@ -4437,12 +4441,12 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
// We only report the bad type on the first class element. All others |
// get a "type differs" error. |
- if (caseType.element == compiler.doubleClass) { |
+ if (caseType == coreTypes.doubleType) { |
reporter.reportErrorMessage( |
node, |
MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS, |
{'type': "double"}); |
- } else if (caseType.element == compiler.functionClass) { |
+ } else if (caseType == coreTypes.functionType) { |
reporter.reportErrorMessage( |
node, MessageKind.SWITCH_CASE_FORBIDDEN, |
{'type': "Function"}); |