Add --omit-as-casts option
Change-Id: I0e5b122c28aefb6badc95882e95a97bdd4b8edd3
Reviewed-on: https://dart-review.googlesource.com/56801
Reviewed-by: Stephen Adams <sra@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index da0506a..2bbd9c2 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -34,6 +34,7 @@
static const String previewDart2 = '--preview-dart-2';
static const String omitImplicitChecks = '--omit-implicit-checks';
+ static const String omitAsCasts = '--omit-as-casts';
static const String laxRuntimeTypeToString = '--lax-runtime-type-to-string';
static const String platformBinaries = '--platform-binaries=.+';
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f261270..9fbf28a 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -353,6 +353,7 @@
new OptionHandler('--strong', ignoreOption),
new OptionHandler(Flags.previewDart2, ignoreOption),
new OptionHandler(Flags.omitImplicitChecks, passThrough),
+ new OptionHandler(Flags.omitAsCasts, passThrough),
new OptionHandler(Flags.laxRuntimeTypeToString, passThrough),
new OptionHandler(Flags.benchmarkingProduction, passThrough),
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 4d631c5..5da90be 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -359,10 +359,14 @@
case TypeUseKind.INSTANTIATION:
case TypeUseKind.NATIVE_INSTANTIATION:
case TypeUseKind.IS_CHECK:
- case TypeUseKind.AS_CAST:
case TypeUseKind.CATCH_TYPE:
_collectTypeDependencies(type, dependencies);
break;
+ case TypeUseKind.AS_CAST:
+ if (!compiler.options.omitAsCasts) {
+ _collectTypeDependencies(type, dependencies);
+ }
+ break;
case TypeUseKind.IMPLICIT_CAST:
if (compiler.options.implicitDowncastCheckPolicy.isEmitted) {
_collectTypeDependencies(type, dependencies);
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index fa58347..3cef111 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -367,10 +367,14 @@
nativeUsage: true, globalDependency: true);
break;
case TypeUseKind.IS_CHECK:
- case TypeUseKind.AS_CAST:
case TypeUseKind.CATCH_TYPE:
_registerIsCheck(type);
break;
+ case TypeUseKind.AS_CAST:
+ if (!_options.omitAsCasts) {
+ _registerIsCheck(type);
+ }
+ break;
case TypeUseKind.IMPLICIT_CAST:
if (_options.implicitDowncastCheckPolicy.isEmitted) {
_registerIsCheck(type);
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index 361a39b..44c9b93 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -180,10 +180,14 @@
_registerInstantiatedType(type, nativeUsage: true);
break;
case TypeUseKind.IS_CHECK:
- case TypeUseKind.AS_CAST:
case TypeUseKind.CATCH_TYPE:
_registerIsCheck(type);
break;
+ case TypeUseKind.AS_CAST:
+ if (!_options.omitAsCasts) {
+ _registerIsCheck(type);
+ }
+ break;
case TypeUseKind.IMPLICIT_CAST:
if (_options.implicitDowncastCheckPolicy.isEmitted) {
_registerIsCheck(type);
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 8876430..282086e 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -160,8 +160,10 @@
onIsCheck(type, transformed);
break;
case TypeUseKind.AS_CAST:
- onIsCheck(type, transformed);
- hasAsCast = true;
+ if (!_options.omitAsCasts) {
+ onIsCheck(type, transformed);
+ hasAsCast = true;
+ }
break;
case TypeUseKind.IMPLICIT_CAST:
if (_options.implicitDowncastCheckPolicy.isEmitted) {
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 7583e78..9dbf70e 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -182,6 +182,9 @@
/// Whether to omit implicit strong mode checks.
bool omitImplicitChecks = false;
+ /// Whether to omit as casts.
+ bool omitAsCasts = false;
+
/// Whether to omit class type arguments only needed for `toString` on
/// `Object.runtimeType`.
bool laxRuntimeTypeToString = false;
@@ -294,6 +297,7 @@
platformBinaries ?? _extractUriOption(options, '--platform-binaries=')
..sourceMapUri = _extractUriOption(options, '--source-map=')
..omitImplicitChecks = _hasOption(options, Flags.omitImplicitChecks)
+ ..omitAsCasts = _hasOption(options, Flags.omitAsCasts)
..laxRuntimeTypeToString =
_hasOption(options, Flags.laxRuntimeTypeToString)
..testMode = _hasOption(options, Flags.testMode)
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index f1d01fb..185ea5b 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -2066,7 +2066,8 @@
}
DartType type = _elementMap.getDartType(node.type);
- if (!node.isTypeError || options.implicitDowncastCheckPolicy.isEmitted) {
+ if ((!node.isTypeError && !options.omitAsCasts) ||
+ options.implicitDowncastCheckPolicy.isEmitted) {
HInstruction converted = typeBuilder.buildTypeConversion(
expressionInstruction,
localsHandler.substInContext(type),