[ddc] Add dart.web.assertions_enabled environment variable.
Change-Id: If28f2f1404f02c5d757774188a5a006137c8734f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/273284
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Commit-Queue: Mayank Patke <fishythefish@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Anna Gringauze <annagrin@google.com>
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 8fb5b80..32afa73 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -139,6 +139,8 @@
}
var options = SharedCompilerOptions.fromArguments(argResults);
+ addGeneratedVariables(declaredVariables,
+ enableAsserts: options.enableAsserts);
Uri toCustomUri(Uri uri) {
if (!uri.hasScheme) {
@@ -833,6 +835,13 @@
return declaredVariables;
}
+/// Adds all synthesized environment variables to [variables].
+Map<String, String> addGeneratedVariables(Map<String, String> variables,
+ {required bool enableAsserts}) {
+ variables['dart.web.assertions_enabled'] = '$enableAsserts';
+ return variables;
+}
+
/// The default path of the kernel summary for the Dart SDK.
final defaultSdkSummaryPath =
p.join(getSdkPath(), 'lib', '_internal', 'ddc_outline.dill');
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 3f442a5..72ef463 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -97,6 +97,11 @@
this.onDone,
);
+ // Disable asserts due to failures to load source and locations on kernel
+ // loaded from dill files in DDC.
+ // https://github.com/dart-lang/sdk/issues/43986
+ static const bool _enableAsserts = false;
+
/// Create expression compiler worker from [args] and start it.
///
/// If [sendPort] is provided, creates a `receivePort` and sends it to
@@ -231,9 +236,9 @@
soundNullSafety: soundNullSafety))
..fileSystem = fileSystem
..omitPlatform = true
- ..environmentDefines = {
+ ..environmentDefines = addGeneratedVariables({
if (environmentDefines != null) ...environmentDefines,
- }
+ }, enableAsserts: _enableAsserts)
..explicitExperimentalFlags = explicitExperimentalFlags
..onDiagnostic = _onDiagnosticHandler(errors, warnings, infos)
..nnbdMode = soundNullSafety ? NnbdMode.Strong : NnbdMode.Weak
@@ -435,10 +440,7 @@
summarizeApi: false,
moduleName: moduleName,
soundNullSafety: _compilerOptions.nnbdMode == NnbdMode.Strong,
- // Disable asserts due to failures to load source and
- // locations on kernel loaded from dill files in DDC.
- // https://github.com/dart-lang/sdk/issues/43986
- enableAsserts: false),
+ enableAsserts: _enableAsserts),
_moduleCache.componentForLibrary,
_moduleCache.moduleNameForComponent,
coreTypes: coreTypes,
diff --git a/pkg/dev_compiler/test/expression_compiler/assertions_enabled_test.dart b/pkg/dev_compiler/test/expression_compiler/assertions_enabled_test.dart
new file mode 100644
index 0000000..931b7e9
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/assertions_enabled_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test/test.dart';
+
+import 'expression_compiler_e2e_suite.dart';
+
+void main() async {
+ var driver = await TestDriver.init();
+
+ group('dart.web.assertions_enabled', () {
+ const source = r'''
+ void main() {
+ var b = const bool.fromEnvironment('dart.web.assertions_enabled');
+
+ // Breakpoint: bp
+ print('hello world');
+ }
+ ''';
+
+ tearDown(() async {
+ await driver.cleanupTest();
+ });
+
+ tearDownAll(() async {
+ await driver.finish();
+ });
+
+ test('is automatically set', () async {
+ var setup = SetupCompilerOptions(enableAsserts: true);
+ await driver.initSource(setup, source);
+ // TODO(43986): Update when assertions are enabled.
+ await driver.check(
+ breakpointId: 'bp', expression: 'b', expectedResult: 'false');
+ });
+
+ test('is automatically unset', () async {
+ var setup = SetupCompilerOptions(enableAsserts: false);
+ await driver.initSource(setup, source);
+ await driver.check(
+ breakpointId: 'bp', expression: 'b', expectedResult: 'false');
+ });
+ });
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index 4d7ab62..811796a 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -73,7 +73,8 @@
final fe.CompilerOptions options;
final bool soundNullSafety;
- static fe.CompilerOptions _getOptions(bool soundNullSafety) {
+ static fe.CompilerOptions _getOptions(
+ {required bool enableAsserts, required bool soundNullSafety}) {
var options = fe.CompilerOptions()
..verbose = false // set to true for debugging
..sdkRoot = sdkRoot
@@ -83,16 +84,22 @@
..omitPlatform = true
..sdkSummary =
p.toUri(soundNullSafety ? sdkSoundSummaryPath : sdkUnsoundSummaryPath)
- ..environmentDefines = const {}
+ ..environmentDefines = addGeneratedVariables({},
+ // Disable asserts due to failures to load source and
+ // locations on kernel loaded from dill files in DDC.
+ // https://github.com/dart-lang/sdk/issues/43986
+ enableAsserts: false)
..nnbdMode = soundNullSafety ? fe.NnbdMode.Strong : fe.NnbdMode.Weak;
return options;
}
SetupCompilerOptions(
- {this.soundNullSafety = true,
+ {bool enableAsserts = true,
+ this.soundNullSafety = true,
this.legacyCode = false,
this.moduleFormat = ModuleFormat.amd})
- : options = _getOptions(soundNullSafety) {
+ : options = _getOptions(
+ soundNullSafety: soundNullSafety, enableAsserts: enableAsserts) {
options.onDiagnostic = (fe.DiagnosticMessage m) {
diagnosticMessages.addAll(m.plainTextFormatted);
if (m.severity == fe.Severity.error) {
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index 51ed8c2..4cabdac 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -6,7 +6,8 @@
import 'dart:convert' show jsonEncode;
import 'dart:io';
-import 'package:dev_compiler/src/kernel/command.dart' show getSdkPath;
+import 'package:dev_compiler/src/kernel/command.dart'
+ show addGeneratedVariables, getSdkPath;
import 'package:dev_compiler/src/kernel/js_typerep.dart';
import 'package:dev_compiler/src/kernel/nullable_inference.dart';
import 'package:dev_compiler/src/kernel/target.dart';
@@ -705,7 +706,7 @@
DevCompilerTarget(TargetFlags(soundNullSafety: false)),
fileSystem: _fileSystem,
explicitExperimentalFlags: const {},
- environmentDefines: const {},
+ environmentDefines: addGeneratedVariables({}, enableAsserts: true),
nnbdMode: fe.NnbdMode.Weak);
if (!identical(oldCompilerState, _compilerState)) inference = null;
var result =
diff --git a/pkg/dev_compiler/test/shared_test_options.dart b/pkg/dev_compiler/test/shared_test_options.dart
index c7525ca..0ed32d8 100644
--- a/pkg/dev_compiler/test/shared_test_options.dart
+++ b/pkg/dev_compiler/test/shared_test_options.dart
@@ -4,7 +4,8 @@
import 'package:dev_compiler/src/compiler/module_builder.dart'
show ModuleFormat;
-import 'package:dev_compiler/src/kernel/command.dart' show getSdkPath;
+import 'package:dev_compiler/src/kernel/command.dart'
+ show addGeneratedVariables, getSdkPath;
import 'package:dev_compiler/src/kernel/target.dart' show DevCompilerTarget;
import 'package:front_end/src/api_unstable/ddc.dart';
import 'package:front_end/src/compute_platform_binaries_location.dart';
@@ -60,7 +61,7 @@
..omitPlatform = true
..sdkSummary =
soundNullSafety ? sdkSoundSummaryPath : sdkUnsoundSummaryPath
- ..environmentDefines = const {}
+ ..environmentDefines = addGeneratedVariables({}, enableAsserts: true)
..nnbdMode = soundNullSafety ? NnbdMode.Strong : NnbdMode.Weak;
return options;
}
diff --git a/tests/web/assertions_disabled_test.dart b/tests/web/assertions_disabled_test.dart
index fee23f4..7cbb533 100644
--- a/tests/web/assertions_disabled_test.dart
+++ b/tests/web/assertions_disabled_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// dartdevcOptions=--no-enable-asserts
+
import "package:expect/expect.dart";
void main() {
diff --git a/tests/web_2/assertions_disabled_test.dart b/tests/web_2/assertions_disabled_test.dart
index fee23f4..7cbb533 100644
--- a/tests/web_2/assertions_disabled_test.dart
+++ b/tests/web_2/assertions_disabled_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// dartdevcOptions=--no-enable-asserts
+
import "package:expect/expect.dart";
void main() {