diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart index c65a55ede4e..e0ebd248a5a 100644 --- a/pkg/compiler/lib/src/compiler.dart +++ b/pkg/compiler/lib/src/compiler.dart @@ -38,8 +38,12 @@ import 'inferrer/powersets/powersets.dart' show PowersetStrategy; import 'inferrer/typemasks/masks.dart' show TypeMaskStrategy; import 'inferrer/types.dart' show GlobalTypeInferenceResults, GlobalTypeInferenceTask; +import 'inferrer_experimental/trivial.dart' as experimentalInferrer + show TrivialAbstractValueStrategy; import 'inferrer_experimental/types.dart' as experimentalInferrer show GlobalTypeInferenceTask; +import 'inferrer_experimental/typemasks/masks.dart' as experimentalInferrer + show TypeMaskStrategy; import 'inferrer/wrapped.dart' show WrappedAbstractValueStrategy; import 'ir/modular.dart'; import 'js_backend/backend.dart' show CodegenInputs; @@ -158,9 +162,13 @@ class Compiler options.deriveOptions(); options.validate(); - abstractValueStrategy = options.useTrivialAbstractValueDomain - ? const TrivialAbstractValueStrategy() - : const TypeMaskStrategy(); + abstractValueStrategy = options.experimentalInferrer + ? (options.useTrivialAbstractValueDomain + ? const experimentalInferrer.TrivialAbstractValueStrategy() + : const experimentalInferrer.TypeMaskStrategy()) + : (options.useTrivialAbstractValueDomain + ? const TrivialAbstractValueStrategy() + : const TypeMaskStrategy()); if (options.experimentalWrapped || options.testMode) { abstractValueStrategy = WrappedAbstractValueStrategy(abstractValueStrategy); diff --git a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart index 816833cc33d..fd9f34ac300 100644 --- a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart +++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart @@ -271,9 +271,9 @@ abstract class TypeMask implements AbstractValue { /// If [mask] is forwarding, returns the first non-forwarding [TypeMask] in /// [mask]'s forwarding chain. - static TypeMask nonForwardingMask(mask) { - while (mask.isForwarding) { - mask = mask.forwardTo; + static TypeMask nonForwardingMask(TypeMask mask) { + while (mask is ForwardingTypeMask) { + mask = (mask as ForwardingTypeMask).forwardTo; } return mask; } diff --git a/pkg/compiler/lib/src/inferrer_experimental/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer_experimental/typemasks/type_mask.dart index 816833cc33d..fd9f34ac300 100644 --- a/pkg/compiler/lib/src/inferrer_experimental/typemasks/type_mask.dart +++ b/pkg/compiler/lib/src/inferrer_experimental/typemasks/type_mask.dart @@ -271,9 +271,9 @@ abstract class TypeMask implements AbstractValue { /// If [mask] is forwarding, returns the first non-forwarding [TypeMask] in /// [mask]'s forwarding chain. - static TypeMask nonForwardingMask(mask) { - while (mask.isForwarding) { - mask = mask.forwardTo; + static TypeMask nonForwardingMask(TypeMask mask) { + while (mask is ForwardingTypeMask) { + mask = (mask as ForwardingTypeMask).forwardTo; } return mask; } diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json index d8ca5912bc4..4cb50767a11 100644 --- a/pkg/compiler/test/analyses/dart2js_allowed.json +++ b/pkg/compiler/test/analyses/dart2js_allowed.json @@ -25,10 +25,6 @@ "Dynamic access of 'memberContext'.": 1, "Dynamic access of 'name'.": 1 }, - "pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart": { - "Dynamic access of 'forwardTo'.": 1, - "Dynamic access of 'isForwarding'.": 1 - }, "pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart": { "Dynamic invocation of '[]='.": 1, "Dynamic invocation of 'add'.": 1