Skip to content

Commit 17c5356

Browse files
bkonyiCommit Queue
authored andcommitted
[ CLI ] Add support for --enable-asserts to dart compile jit-snapshot
Makes jit-snapshot more consistent with other compilation modes (e.g., exe, aot-snapshot, wasm). Change-Id: I6ede1b9cd54b2e2ed368b5c60ace1f8e41afd359 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/434500 Auto-Submit: Ben Konyi <[email protected]> Commit-Queue: Ben Konyi <[email protected]> Reviewed-by: Derek Xu <[email protected]> Commit-Queue: Derek Xu <[email protected]>
1 parent b59b070 commit 17c5356

File tree

2 files changed

+69
-23
lines changed

2 files changed

+69
-23
lines changed

pkg/dartdev/lib/src/commands/compile.dart

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,11 @@ class CompileJitSnapshotCommand extends CompileSubcommandCommand {
360360
abbr: defineOption.abbr,
361361
valueHelp: defineOption.valueHelp,
362362
)
363+
..addFlag(
364+
enableAssertsOption.flag,
365+
negatable: false,
366+
help: enableAssertsOption.help,
367+
)
363368
..addFlag(soundNullSafetyOption.flag,
364369
help: soundNullSafetyOption.help,
365370
defaultsTo: soundNullSafetyOption.flagDefaultsTo,
@@ -409,6 +414,7 @@ class CompileJitSnapshotCommand extends CompileSubcommandCommand {
409414

410415
final enabledExperiments = args.enabledExperiments;
411416
final defines = args.multiOption(defineOption.flag);
417+
final enableAsserts = args.flag(enableAssertsOption.flag);
412418

413419
// Build arguments.
414420
final buildArgs = <String>[];
@@ -439,6 +445,11 @@ class CompileJitSnapshotCommand extends CompileSubcommandCommand {
439445
for (final define in defines) {
440446
buildArgs.add('-D$define');
441447
}
448+
449+
if (enableAsserts) {
450+
buildArgs.add('--${enableAssertsOption.flag}');
451+
}
452+
442453
buildArgs.add(path.canonicalize(sourcePath));
443454

444455
// Add the training arguments.
@@ -493,9 +504,9 @@ class CompileNativeCommand extends CompileSubcommandCommand {
493504
valueHelp: defineOption.valueHelp,
494505
)
495506
..addFlag(
496-
'enable-asserts',
507+
enableAssertsOption.flag,
497508
negatable: false,
498-
help: 'Enable assert statements.',
509+
help: enableAssertsOption.help,
499510
)
500511
..addOption(
501512
packagesOption.flag,
@@ -663,7 +674,7 @@ Remove debugging information from the output and save it separately to the speci
663674
defines: args.multiOption(defineOption.flag),
664675
packages: args.option('packages'),
665676
enableExperiment: args.enabledExperiments.join(','),
666-
enableAsserts: args.flag('enable-asserts'),
677+
enableAsserts: args.flag(enableAssertsOption.flag),
667678
debugFile: args.option('save-debugging-info'),
668679
verbose: verbose,
669680
verbosity: args.option('verbosity')!,
@@ -821,9 +832,9 @@ class CompileWasmCommand extends CompileSubcommandCommand {
821832
negatable: false,
822833
)
823834
..addFlag(
824-
'enable-asserts',
825-
help: 'Enable assert statements.',
835+
enableAssertsOption.flag,
826836
negatable: false,
837+
help: enableAssertsOption.help,
827838
)
828839
..addOption(
829840
'shared-memory',
@@ -977,7 +988,7 @@ class CompileWasmCommand extends CompileSubcommandCommand {
977988
if (packages != null) '--packages=$packages',
978989
if (args.flag('print-wasm')) '--print-wasm',
979990
if (args.flag('print-kernel')) '--print-kernel',
980-
if (args.flag('enable-asserts')) '--enable-asserts',
991+
if (args.flag(enableAssertsOption.flag)) '--${enableAssertsOption.flag}',
981992
if (!generateSourceMap) '--no-source-maps',
982993
for (final define in defines) '-D$define',
983994
if (maxPages != null) ...[
@@ -1074,27 +1085,29 @@ Sets the verbosity level of the compilation.
10741085
flagDefaultsTo: true,
10751086
);
10761087

1077-
final Option defineOption;
1078-
final Option packagesOption;
1079-
1080-
CompileSubcommandCommand(super.name, super.description, super.verbose,
1081-
{super.hidden})
1082-
: defineOption = Option(
1083-
flag: 'define',
1084-
abbr: 'D',
1085-
valueHelp: 'key=value',
1086-
help: '''
1088+
late final Option defineOption = Option(
1089+
flag: 'define',
1090+
abbr: 'D',
1091+
valueHelp: 'key=value',
1092+
help: '''
10871093
Define an environment declaration. To specify multiple declarations, use multiple options or use commas to separate key-value pairs.
10881094
For example: dart compile $name -Da=1,b=2 main.dart''',
1089-
),
1090-
packagesOption = Option(
1091-
flag: 'packages',
1092-
abbr: 'p',
1093-
valueHelp: 'path',
1094-
help:
1095-
'''Get package locations from the specified file instead of .dart_tool/package_config.json.
1095+
);
1096+
1097+
late final Option packagesOption = Option(
1098+
flag: 'packages',
1099+
abbr: 'p',
1100+
valueHelp: 'path',
1101+
help:
1102+
'''Get package locations from the specified file instead of .dart_tool/package_config.json.
10961103
<path> can be relative or absolute.
10971104
For example: dart compile $name --packages=/tmp/pkgs.json main.dart''');
1105+
1106+
final Option enableAssertsOption =
1107+
Option(flag: 'enable-asserts', help: 'Enable assert statements.');
1108+
1109+
CompileSubcommandCommand(super.name, super.description, super.verbose,
1110+
{super.hidden});
10981111
}
10991112

11001113
class CompileCommand extends DartdevCommand {

pkg/dartdev/test/commands/compile_test.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,6 +1481,39 @@ void main() {
14811481
expect(result.exitCode, 254);
14821482
});
14831483

1484+
test('Compile JIT snapshot with asserts', () async {
1485+
final p = project(mainSrc: '''
1486+
void main() {
1487+
assert(int.parse('1') == 2);
1488+
}
1489+
''');
1490+
final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
1491+
final outFile = path.canonicalize(path.join(p.dirPath, 'myjit'));
1492+
1493+
var result = await p.run(
1494+
[
1495+
'compile',
1496+
'jit-snapshot',
1497+
'--enable-asserts',
1498+
'-o',
1499+
outFile,
1500+
inFile,
1501+
],
1502+
);
1503+
1504+
// Only printed when -v/--verbose is used, not --verbosity.
1505+
expect(result.stdout, isNot(contains(usingTargetOSMessage)));
1506+
expect(result.stdout, isNot(contains(soundNullSafetyMessage)));
1507+
expect(result.stderr, contains(failedAssertionError));
1508+
expect(result.exitCode, 255);
1509+
1510+
result = await p.run(
1511+
['--enable-asserts', outFile],
1512+
);
1513+
expect(result.stdout, isEmpty);
1514+
expect(result.stderr, contains(failedAssertionError));
1515+
});
1516+
14841517
if (Platform.isMacOS) {
14851518
test('Compile and run executable from signed dartaotruntime', () async {
14861519
// Either the locally built dartaotruntime is already linker signed

0 commit comments

Comments
 (0)