| 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 1e98bc8e9f5225157261d5b985bf87652f1eef26..e677afdb4cb834933083c2f7a5b7aad5195631f7 100644
|
| --- a/pkg/compiler/lib/src/ssa/codegen.dart
|
| +++ b/pkg/compiler/lib/src/ssa/codegen.dart
|
| @@ -22,7 +22,7 @@ import '../universe/call_structure.dart' show CallStructure;
|
| import '../universe/selector.dart' show Selector;
|
| import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
|
| import '../util/util.dart';
|
| -import '../world.dart' show ClassWorld;
|
| +import '../world.dart' show ClosedWorld;
|
| import 'codegen_helpers.dart';
|
| import 'nodes.dart';
|
| import 'variable_allocator.dart';
|
| @@ -2704,18 +2704,18 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
|
|
| js.Expression generateReceiverOrArgumentTypeTest(
|
| HInstruction input, TypeMask checkedType) {
|
| - ClassWorld classWorld = compiler.closedWorld;
|
| + ClosedWorld closedWorld = compiler.closedWorld;
|
| TypeMask inputType = input.instructionType;
|
| // Figure out if it is beneficial to turn this into a null check.
|
| // V8 generally prefers 'typeof' checks, but for integers and
|
| // indexable primitives we cannot compile this test into a single
|
| // typeof check so the null check is cheaper.
|
| - bool isIntCheck = checkedType.containsOnlyInt(classWorld);
|
| + bool isIntCheck = checkedType.containsOnlyInt(closedWorld);
|
| bool turnIntoNumCheck = isIntCheck && input.isIntegerOrNull(compiler);
|
| bool turnIntoNullCheck = !turnIntoNumCheck &&
|
| (checkedType.nullable() == inputType) &&
|
| (isIntCheck ||
|
| - checkedType.satisfies(helpers.jsIndexableClass, classWorld));
|
| + checkedType.satisfies(helpers.jsIndexableClass, closedWorld));
|
|
|
| if (turnIntoNullCheck) {
|
| use(input);
|
| @@ -2725,15 +2725,15 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| // input is !int
|
| checkBigInt(input, '!==', input.sourceInformation);
|
| return pop();
|
| - } else if (turnIntoNumCheck || checkedType.containsOnlyNum(classWorld)) {
|
| + } else if (turnIntoNumCheck || checkedType.containsOnlyNum(closedWorld)) {
|
| // input is !num
|
| checkNum(input, '!==', input.sourceInformation);
|
| return pop();
|
| - } else if (checkedType.containsOnlyBool(classWorld)) {
|
| + } else if (checkedType.containsOnlyBool(closedWorld)) {
|
| // input is !bool
|
| checkBool(input, '!==', input.sourceInformation);
|
| return pop();
|
| - } else if (checkedType.containsOnlyString(classWorld)) {
|
| + } else if (checkedType.containsOnlyString(closedWorld)) {
|
| // input is !string
|
| checkString(input, '!==', input.sourceInformation);
|
| return pop();
|
| @@ -2744,11 +2744,11 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
|
|
| void visitTypeConversion(HTypeConversion node) {
|
| if (node.isArgumentTypeCheck || node.isReceiverTypeCheck) {
|
| - ClassWorld classWorld = compiler.closedWorld;
|
| + ClosedWorld closedWorld = compiler.closedWorld;
|
| // An int check if the input is not int or null, is not
|
| // sufficient for doing an argument or receiver check.
|
| assert(compiler.options.trustTypeAnnotations ||
|
| - !node.checkedType.containsOnlyInt(classWorld) ||
|
| + !node.checkedType.containsOnlyInt(closedWorld) ||
|
| node.checkedInput.isIntegerOrNull(compiler));
|
| js.Expression test = generateReceiverOrArgumentTypeTest(
|
| node.checkedInput, node.checkedType);
|
| @@ -2913,22 +2913,22 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| bool typeVariableAccessNeedsSubstitution(
|
| TypeVariableElement element, TypeMask receiverMask) {
|
| ClassElement cls = element.enclosingClass;
|
| - ClassWorld classWorld = compiler.closedWorld;
|
| + ClosedWorld closedWorld = compiler.closedWorld;
|
|
|
| // See if the receiver type narrows the set of classes to ones that can be
|
| // indexed.
|
| // TODO(sra): Currently the only convenient query is [singleClass]. We
|
| // should iterate over all the concrete classes in [receiverMask].
|
| - ClassElement receiverClass = receiverMask.singleClass(classWorld);
|
| + ClassElement receiverClass = receiverMask.singleClass(closedWorld);
|
| if (receiverClass != null) {
|
| if (backend.rti.isTrivialSubstitution(receiverClass, cls)) {
|
| return false;
|
| }
|
| }
|
|
|
| - if (classWorld.isUsedAsMixin(cls)) return true;
|
| + if (closedWorld.isUsedAsMixin(cls)) return true;
|
|
|
| - return classWorld.anyStrictSubclassOf(cls, (ClassElement subclass) {
|
| + return closedWorld.anyStrictSubclassOf(cls, (ClassElement subclass) {
|
| return !backend.rti.isTrivialSubstitution(subclass, cls);
|
| });
|
| }
|
|
|