| Index: pkg/compiler/lib/src/ssa/nodes.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
|
| index 5d9f10c8c994985d899219e8e0b294a5bca84ccd..915ec54aa46778730a8153fad263fc2d3c351195 100644
|
| --- a/pkg/compiler/lib/src/ssa/nodes.dart
|
| +++ b/pkg/compiler/lib/src/ssa/nodes.dart
|
| @@ -4,7 +4,7 @@
|
|
|
| import '../closure.dart';
|
| import '../common.dart';
|
| -import '../common/backend_api.dart' show BackendClasses;
|
| +import '../common_elements.dart' show CommonElements;
|
| import '../compiler.dart' show Compiler;
|
| import '../constants/constant_system.dart';
|
| import '../constants/values.dart';
|
| @@ -1012,78 +1012,79 @@ abstract class HInstruction implements Spannable {
|
| }
|
|
|
| bool canBePrimitiveNumber(ClosedWorld closedWorld) {
|
| - BackendClasses backendClasses = closedWorld.backendClasses;
|
| + CommonElements commonElements = closedWorld.commonElements;
|
| // TODO(sra): It should be possible to test only jsDoubleClass and
|
| // jsUInt31Class, since all others are superclasses of these two.
|
| return containsType(
|
| - instructionType, backendClasses.numClass, closedWorld) ||
|
| - containsType(instructionType, backendClasses.intClass, closedWorld) ||
|
| + instructionType, commonElements.jsNumberClass, closedWorld) ||
|
| + containsType(instructionType, commonElements.jsIntClass, closedWorld) ||
|
| containsType(
|
| - instructionType, backendClasses.positiveIntClass, closedWorld) ||
|
| + instructionType, commonElements.jsPositiveIntClass, closedWorld) ||
|
| containsType(
|
| - instructionType, backendClasses.uint32Class, closedWorld) ||
|
| + instructionType, commonElements.jsUInt32Class, closedWorld) ||
|
| containsType(
|
| - instructionType, backendClasses.uint31Class, closedWorld) ||
|
| - containsType(instructionType, backendClasses.doubleClass, closedWorld);
|
| + instructionType, commonElements.jsUInt31Class, closedWorld) ||
|
| + containsType(
|
| + instructionType, commonElements.jsDoubleClass, closedWorld);
|
| }
|
|
|
| bool canBePrimitiveBoolean(ClosedWorld closedWorld) {
|
| return containsType(
|
| - instructionType, closedWorld.backendClasses.boolClass, closedWorld);
|
| + instructionType, closedWorld.commonElements.jsBoolClass, closedWorld);
|
| }
|
|
|
| bool canBePrimitiveArray(ClosedWorld closedWorld) {
|
| - BackendClasses backendClasses = closedWorld.backendClasses;
|
| + CommonElements commonElements = closedWorld.commonElements;
|
| return containsType(
|
| - instructionType, backendClasses.listClass, closedWorld) ||
|
| - containsType(
|
| - instructionType, backendClasses.fixedListClass, closedWorld) ||
|
| - containsType(
|
| - instructionType, backendClasses.growableListClass, closedWorld) ||
|
| + instructionType, commonElements.jsArrayClass, closedWorld) ||
|
| containsType(
|
| - instructionType, backendClasses.constListClass, closedWorld);
|
| + instructionType, commonElements.jsFixedArrayClass, closedWorld) ||
|
| + containsType(instructionType, commonElements.jsExtendableArrayClass,
|
| + closedWorld) ||
|
| + containsType(instructionType, commonElements.jsUnmodifiableArrayClass,
|
| + closedWorld);
|
| }
|
|
|
| bool isIndexablePrimitive(ClosedWorld closedWorld) {
|
| return instructionType.containsOnlyString(closedWorld) ||
|
| - isInstanceOf(instructionType, closedWorld.backendClasses.indexableClass,
|
| - closedWorld);
|
| + isInstanceOf(instructionType,
|
| + closedWorld.commonElements.jsIndexableClass, closedWorld);
|
| }
|
|
|
| bool isFixedArray(ClosedWorld closedWorld) {
|
| - BackendClasses backendClasses = closedWorld.backendClasses;
|
| + CommonElements commonElements = closedWorld.commonElements;
|
| // TODO(sra): Recognize the union of these types as well.
|
| return containsOnlyType(
|
| - instructionType, backendClasses.fixedListClass, closedWorld) ||
|
| - containsOnlyType(
|
| - instructionType, backendClasses.constListClass, closedWorld);
|
| + instructionType, commonElements.jsFixedArrayClass, closedWorld) ||
|
| + containsOnlyType(instructionType,
|
| + commonElements.jsUnmodifiableArrayClass, closedWorld);
|
| }
|
|
|
| bool isExtendableArray(ClosedWorld closedWorld) {
|
| return containsOnlyType(instructionType,
|
| - closedWorld.backendClasses.growableListClass, closedWorld);
|
| + closedWorld.commonElements.jsExtendableArrayClass, closedWorld);
|
| }
|
|
|
| bool isMutableArray(ClosedWorld closedWorld) {
|
| return isInstanceOf(instructionType,
|
| - closedWorld.backendClasses.mutableListClass, closedWorld);
|
| + closedWorld.commonElements.jsMutableArrayClass, closedWorld);
|
| }
|
|
|
| bool isReadableArray(ClosedWorld closedWorld) {
|
| return isInstanceOf(
|
| - instructionType, closedWorld.backendClasses.listClass, closedWorld);
|
| + instructionType, closedWorld.commonElements.jsArrayClass, closedWorld);
|
| }
|
|
|
| bool isMutableIndexable(ClosedWorld closedWorld) {
|
| return isInstanceOf(instructionType,
|
| - closedWorld.backendClasses.mutableIndexableClass, closedWorld);
|
| + closedWorld.commonElements.jsMutableIndexableClass, closedWorld);
|
| }
|
|
|
| bool isArray(ClosedWorld closedWorld) => isReadableArray(closedWorld);
|
|
|
| bool canBePrimitiveString(ClosedWorld closedWorld) {
|
| return containsType(
|
| - instructionType, closedWorld.backendClasses.stringClass, closedWorld);
|
| + instructionType, closedWorld.commonElements.jsStringClass, closedWorld);
|
| }
|
|
|
| bool isInteger(ClosedWorld closedWorld) {
|
| @@ -1093,25 +1094,25 @@ abstract class HInstruction implements Spannable {
|
|
|
| bool isUInt32(ClosedWorld closedWorld) {
|
| return !instructionType.isNullable &&
|
| - isInstanceOf(instructionType, closedWorld.backendClasses.uint32Class,
|
| + isInstanceOf(instructionType, closedWorld.commonElements.jsUInt32Class,
|
| closedWorld);
|
| }
|
|
|
| bool isUInt31(ClosedWorld closedWorld) {
|
| return !instructionType.isNullable &&
|
| - isInstanceOf(instructionType, closedWorld.backendClasses.uint31Class,
|
| + isInstanceOf(instructionType, closedWorld.commonElements.jsUInt31Class,
|
| closedWorld);
|
| }
|
|
|
| bool isPositiveInteger(ClosedWorld closedWorld) {
|
| return !instructionType.isNullable &&
|
| isInstanceOf(instructionType,
|
| - closedWorld.backendClasses.positiveIntClass, closedWorld);
|
| + closedWorld.commonElements.jsPositiveIntClass, closedWorld);
|
| }
|
|
|
| bool isPositiveIntegerOrNull(ClosedWorld closedWorld) {
|
| return isInstanceOf(instructionType,
|
| - closedWorld.backendClasses.positiveIntClass, closedWorld);
|
| + closedWorld.commonElements.jsPositiveIntClass, closedWorld);
|
| }
|
|
|
| bool isIntegerOrNull(ClosedWorld closedWorld) {
|
|
|