| Index: pkg/compiler/lib/src/ssa/codegen.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
|
| index 83a0f7f337081a2d142f288d0b1e1c29783d9289..98ccfb11b00fd9eefcb69be58f2d7e124da6d3d9 100644
|
| --- a/pkg/compiler/lib/src/ssa/codegen.dart
|
| +++ b/pkg/compiler/lib/src/ssa/codegen.dart
|
| @@ -9,7 +9,7 @@ import '../common/tasks.dart' show CompilerTask;
|
| import '../compiler.dart' show Compiler;
|
| import '../constants/constant_system.dart';
|
| import '../constants/values.dart';
|
| -import '../core_types.dart' show CoreClasses;
|
| +import '../core_types.dart' show CommonElements;
|
| import '../dart_types.dart';
|
| import '../elements/elements.dart';
|
| import '../elements/entities.dart';
|
| @@ -193,7 +193,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
|
|
| DiagnosticReporter get reporter => compiler.reporter;
|
|
|
| - CoreClasses get coreClasses => compiler.coreClasses;
|
| + CommonElements get commonElements => closedWorld.commonElements;
|
|
|
| bool isGenerateAtUseSite(HInstruction instruction) {
|
| return generateAtUseSite.contains(instruction);
|
| @@ -307,7 +307,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| }
|
|
|
| void preGenerateMethod(HGraph graph) {
|
| - new SsaInstructionSelection(compiler).visitGraph(graph);
|
| + new SsaInstructionSelection(compiler, closedWorld).visitGraph(graph);
|
| new SsaTypeKnownRemover().visitGraph(graph);
|
| new SsaTrustedCheckRemover(compiler).visitGraph(graph);
|
| new SsaInstructionMerger(generateAtUseSite, compiler).visitGraph(graph);
|
| @@ -1649,7 +1649,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| methodName = 'split';
|
| // Split returns a List, so we make sure the backend knows the
|
| // list class is instantiated.
|
| - registry.registerInstantiatedClass(coreClasses.listClass);
|
| + registry.registerInstantiatedClass(commonElements.listClass);
|
| } else if (backend.isNative(target) &&
|
| target.isFunction &&
|
| !node.isInterceptedCall) {
|
| @@ -2405,7 +2405,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| }
|
|
|
| void visitLiteralList(HLiteralList node) {
|
| - registry.registerInstantiatedClass(coreClasses.listClass);
|
| + registry.registerInstantiatedClass(commonElements.listClass);
|
| generateArrayLiteral(node);
|
| }
|
|
|
| @@ -2634,9 +2634,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| DartType type,
|
| SourceInformation sourceInformation,
|
| {bool negative: false}) {
|
| - assert(!identical(type.element, coreClasses.listClass) &&
|
| - !Elements.isListSupertype(type.element, compiler) &&
|
| - !Elements.isStringOnlySupertype(type.element, compiler));
|
| + assert(!identical(type.element, commonElements.listClass) &&
|
| + !Elements.isListSupertype(type.element, commonElements) &&
|
| + !Elements.isStringOnlySupertype(type.element, commonElements));
|
| String relation = negative ? '!==' : '===';
|
| checkNum(input, relation, sourceInformation);
|
| js.Expression numberTest = pop();
|
| @@ -2659,9 +2659,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| void handleStringSupertypeCheck(HInstruction input, HInstruction interceptor,
|
| DartType type, SourceInformation sourceInformation,
|
| {bool negative: false}) {
|
| - assert(!identical(type.element, coreClasses.listClass) &&
|
| - !Elements.isListSupertype(type.element, compiler) &&
|
| - !Elements.isNumberOrStringSupertype(type.element, compiler));
|
| + assert(!identical(type.element, commonElements.listClass) &&
|
| + !Elements.isListSupertype(type.element, commonElements) &&
|
| + !Elements.isNumberOrStringSupertype(type.element, commonElements));
|
| String relation = negative ? '!==' : '===';
|
| checkString(input, relation, sourceInformation);
|
| js.Expression stringTest = pop();
|
| @@ -2676,9 +2676,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| void handleListOrSupertypeCheck(HInstruction input, HInstruction interceptor,
|
| DartType type, SourceInformation sourceInformation,
|
| {bool negative: false}) {
|
| - assert(!identical(type.element, coreClasses.stringClass) &&
|
| - !Elements.isStringOnlySupertype(type.element, compiler) &&
|
| - !Elements.isNumberOrStringSupertype(type.element, compiler));
|
| + assert(!identical(type.element, commonElements.stringClass) &&
|
| + !Elements.isStringOnlySupertype(type.element, commonElements) &&
|
| + !Elements.isNumberOrStringSupertype(type.element, commonElements));
|
| String relation = negative ? '!==' : '===';
|
| checkObject(input, relation, sourceInformation);
|
| js.Expression objectTest = pop();
|
| @@ -2715,9 +2715,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| } else {
|
| assert(node.isRawCheck);
|
| HInstruction interceptor = node.interceptor;
|
| - ClassElement objectClass = coreClasses.objectClass;
|
| + ClassElement objectClass = commonElements.objectClass;
|
| Element element = type.element;
|
| - if (element == coreClasses.nullClass) {
|
| + if (element == commonElements.nullClass) {
|
| if (negative) {
|
| checkNonNull(input);
|
| } else {
|
| @@ -2727,15 +2727,15 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| // The constant folder also does this optimization, but we make
|
| // it safe by assuming it may have not run.
|
| push(newLiteralBool(!negative, sourceInformation));
|
| - } else if (element == coreClasses.stringClass) {
|
| + } else if (element == commonElements.stringClass) {
|
| checkString(input, relation, sourceInformation);
|
| - } else if (element == coreClasses.doubleClass) {
|
| + } else if (element == commonElements.doubleClass) {
|
| checkDouble(input, relation, sourceInformation);
|
| - } else if (element == coreClasses.numClass) {
|
| + } else if (element == commonElements.numClass) {
|
| checkNum(input, relation, sourceInformation);
|
| - } else if (element == coreClasses.boolClass) {
|
| + } else if (element == commonElements.boolClass) {
|
| checkBool(input, relation, sourceInformation);
|
| - } else if (element == coreClasses.intClass) {
|
| + } else if (element == commonElements.intClass) {
|
| // The is check in the code tells us that it might not be an
|
| // int. So we do a typeof first to avoid possible
|
| // deoptimizations on the JS engine due to the Math.floor check.
|
| @@ -2748,15 +2748,15 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| assert(interceptor == null);
|
| checkTypeViaInstanceof(input, type, sourceInformation,
|
| negative: negative);
|
| - } else if (Elements.isNumberOrStringSupertype(element, compiler)) {
|
| + } else if (Elements.isNumberOrStringSupertype(element, commonElements)) {
|
| handleNumberOrStringSupertypeCheck(
|
| input, interceptor, type, sourceInformation,
|
| negative: negative);
|
| - } else if (Elements.isStringOnlySupertype(element, compiler)) {
|
| + } else if (Elements.isStringOnlySupertype(element, commonElements)) {
|
| handleStringSupertypeCheck(input, interceptor, type, sourceInformation,
|
| negative: negative);
|
| - } else if (identical(element, coreClasses.listClass) ||
|
| - Elements.isListSupertype(element, compiler)) {
|
| + } else if (identical(element, commonElements.listClass) ||
|
| + Elements.isListSupertype(element, commonElements)) {
|
| handleListOrSupertypeCheck(input, interceptor, type, sourceInformation,
|
| negative: negative);
|
| } else if (type.isFunctionType) {
|
| @@ -3000,7 +3000,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| // We expect only flat types for the INSTANCE representation.
|
| assert(
|
| node.dartType == (node.dartType.element as ClassElement).thisType);
|
| - registry.registerInstantiatedClass(coreClasses.listClass);
|
| + registry.registerInstantiatedClass(commonElements.listClass);
|
| push(new js.ArrayInitializer(arguments)
|
| .withSourceInformation(node.sourceInformation));
|
| }
|
|
|