dart2js nnbd setup
- fixes check_nnbd_sdk.dart to run on dart2js patch files
- splits golden file used by that script by target
- adds it to the old-rti bot (until we get the new nnbd bot)
- adds a suite that runs legacy tests in nnbd weak mode
Change-Id: I0a89534dcd1cf7338849d59ab3e5d989d2ecf3d0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/131885
Reviewed-by: Vijay Menon <vsm@google.com>
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 749efef..7abc5d5 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -366,6 +366,19 @@
_extractExperiments(options, onError: onError, onWarning: onWarning);
if (equalMaps(languageExperiments, fe.defaultExperimentalFlags)) {
platformBinaries ??= fe.computePlatformBinariesLocation();
+ } else {
+ // TODO(sigmund): change these defaults before we unfork the sdk.
+ // To unfork the plan is to accept the same platform files regardless of
+ // the experiment flag (it will be enabled in the sdk regardless).
+ if (_hasOption(options, Flags.testMode) &&
+ languageExperiments[fe.ExperimentalFlag.nonNullable]) {
+ var experimentWithoutNullability = Map.of(languageExperiments);
+ experimentWithoutNullability[fe.ExperimentalFlag.nonNullable] = false;
+ if (equalMaps(
+ experimentWithoutNullability, fe.defaultExperimentalFlags)) {
+ platformBinaries ??= fe.computePlatformBinariesLocation();
+ }
+ }
}
return new CompilerOptions()
..librariesSpecificationUri = librariesSpecificationUri
diff --git a/pkg/dev_compiler/tool/check_nnbd_sdk.dart b/pkg/dev_compiler/tool/check_nnbd_sdk.dart
index 846872a..ae9941c 100644
--- a/pkg/dev_compiler/tool/check_nnbd_sdk.dart
+++ b/pkg/dev_compiler/tool/check_nnbd_sdk.dart
@@ -22,7 +22,7 @@
'${_parser.usage}');
return;
}
- String baseDir = args['out'] as String;
+ var baseDir = args['out'] as String;
if (baseDir == null) {
var tmp = Directory.systemTemp.createTempSync('check_sdk-');
baseDir = tmp.path;
@@ -34,11 +34,12 @@
Uri librariesJson = args['libraries'] != null
? resolveInputUri(args['libraries'] as String)
: Platform.script.resolve('../../../sdk_nnbd/lib/libraries.json');
+ var target = args['target'] as String;
patch.main([
'--libraries',
librariesJson.toFilePath(),
'--target',
- args['target'] as String,
+ target,
'--out',
sdkDir,
'--merge-parts',
@@ -88,7 +89,8 @@
File.fromUri(errorFile).writeAsStringSync(errors, flush: true);
// Check against golden file.
- var goldenFile = Platform.script.resolve('nnbd_sdk_error_golden.txt');
+ var goldenFile =
+ Platform.script.resolve('${target}_nnbd_sdk_error_golden.txt');
var golden = File.fromUri(goldenFile).readAsStringSync();
if (errors != golden) {
if (args['update-golden'] as bool) {
@@ -101,11 +103,9 @@
print('Golden file does not match.');
var diff = Process.runSync('diff', [goldenFile.path, errorFile.path]);
print(diff.stdout);
- print('''
-
-To update the golden file, run:
-> <path-to-newly-built-dart-sdk>/bin/dart pkg/dev_compiler/tool/check_nnbd_sdk.dart --update-golden
-''');
+ print('\nTo update the golden file, run:'
+ '\n ${Platform.executable} ${Platform.script} '
+ '${argv.join(' ')} --update-golden');
exit(1);
}
}
diff --git a/pkg/dev_compiler/tool/dart2js_server_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dart2js_server_nnbd_sdk_error_golden.txt
new file mode 100644
index 0000000..c4026f3
--- /dev/null
+++ b/pkg/dev_compiler/tool/dart2js_server_nnbd_sdk_error_golden.txt
@@ -0,0 +1,21 @@
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '&': int.& (&), JSNumber.& (&).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '<<': int.<< (<<), JSNumber.<< (<<).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '>>': int.>> (>>), JSNumber.>> (>>).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '\|': int.\| (\|), JSNumber.\| (\|).
+ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '^': int.^ (^), JSNumber.^ (^).
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1153|7|14|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1155|7|12|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1157|7|17|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|708|17|3|'NativeTypedArrayOfDouble.[]=' ('void Function(int, double)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|729|17|3|'NativeTypedArrayOfInt.[]=' ('void Function(int, int)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
+ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/js/js.dart|351|17|3|'JsArray.[]=' ('void Function(dynamic, E)') isn't a valid override of 'JsObject.[]=' ('void Function(dynamic, dynamic)').
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1672|28|1|The operator '&' isn't defined for the class 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1674|27|1|The operator '&' isn't defined for the class 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1677|17|1|The operator '&' isn't defined for the class 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|18|1|The operator '&' isn't defined for the class 'JSInt'.
+ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|44|1|The operator '&' isn't defined for the class 'JSInt'.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|31|13|13|The final variable 'lengthInBytes' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|320|20|6|The final variable 'buffer' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|324|13|13|The final variable 'lengthInBytes' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|328|13|13|The final variable 'offsetInBytes' must be initialized.
+ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|333|13|18|The final variable 'elementSizeInBytes' must be initialized.
diff --git a/pkg/dev_compiler/tool/nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
similarity index 100%
rename from pkg/dev_compiler/tool/nnbd_sdk_error_golden.txt
rename to pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
diff --git a/pkg/dev_compiler/tool/patch_sdk.dart b/pkg/dev_compiler/tool/patch_sdk.dart
index 4cb4962..755de10 100755
--- a/pkg/dev_compiler/tool/patch_sdk.dart
+++ b/pkg/dev_compiler/tool/patch_sdk.dart
@@ -261,8 +261,16 @@
var name = _qualifiedName(node);
var patchNode = patch.patches[name];
if (patchNode == null) {
- print('warning: patch not found for $name: $node');
- patchWasMissing = true;
+ // *.fromEnvironment are left unpatched by dart2js and are handled via
+ // codegen.
+ if (name != 'bool.fromEnvironment' &&
+ name != 'int.fromEnvironment' &&
+ name != 'String.fromEnvironment') {
+ print('warning: patch not found for $name: $node');
+ // TODO(sigmund): delete this fail logic? Rather than emit an empty
+ // file, it's more useful to emit a file with missing patches.
+ // patchWasMissing = true;
+ }
return;
}
diff --git a/sdk_nnbd/bin/dart2js b/sdk_nnbd/bin/dart2js
index cfc91b1..9c562ec 100755
--- a/sdk_nnbd/bin/dart2js
+++ b/sdk_nnbd/bin/dart2js
@@ -52,4 +52,4 @@
DART2JS="package:compiler/src/dart2js.dart"
-exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DART2JS" "${EXTRA_OPTIONS[@]}" "$@"
+exec "$DART" "--packages=$DART_ROOT/.packages" --enable-experiment=non-nullable "${EXTRA_VM_OPTIONS[@]}" "$DART2JS" "${EXTRA_OPTIONS[@]}" "$@"
diff --git a/sdk_nnbd/bin/dart2js_sdk b/sdk_nnbd/bin/dart2js_sdk
index e7999b4..03999f9 100755
--- a/sdk_nnbd/bin/dart2js_sdk
+++ b/sdk_nnbd/bin/dart2js_sdk
@@ -55,4 +55,4 @@
EXTRA_VM_OPTIONS+=("${OPTIONS[@]}")
fi
-exec "$DART" "${EXTRA_VM_OPTIONS[@]}" "$SNAPSHOT" "${EXTRA_OPTIONS[@]}" "$@"
+exec "$DART" --enable-experiment=non-nullable "${EXTRA_VM_OPTIONS[@]}" "$SNAPSHOT" "${EXTRA_OPTIONS[@]}" "$@"
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 58478fb..1d2a195 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -140,6 +140,43 @@
"xcodebuild/ReleaseX64/dart2js_platform.dill",
"xcodebuild/ReleaseX64/dart2js_platform_strong.dill"
],
+ "dart2js_hostasserts_nnbd": [
+ ".packages",
+ "out/ReleaseX64NNBD/dart",
+ "out/ReleaseX64NNBD/dart2js_platform.dill",
+ "out/ReleaseX64NNBD/dart2js_platform_strong.dill",
+ "pkg/",
+ "runtime/tests/",
+ "samples-dev/",
+ "samples/",
+ "sdk/",
+ "sdk_nnbd/",
+ "tests/angular/",
+ "tests/co19_2/co19_2-analyzer.status",
+ "tests/co19_2/co19_2-co19.status",
+ "tests/co19_2/co19_2-dart2js.status",
+ "tests/co19_2/co19_2-dartdevc.status",
+ "tests/co19_2/co19_2-kernel.status",
+ "tests/co19_2/co19_2-runtime.status",
+ "tests/compiler/",
+ "tests/corelib_2/",
+ "tests/dart/",
+ "tests/kernel/",
+ "tests/language_2/",
+ "tests/lib_2/",
+ "tests/light_unittest.dart",
+ "tests/search/",
+ "tests/standalone_2/",
+ "tests/ffi/",
+ "third_party/d8/",
+ "third_party/pkg/",
+ "third_party/pkg_tested/",
+ "third_party/requirejs/",
+ "tools/",
+ "xcodebuild/ReleaseX64NNBD/dart",
+ "xcodebuild/ReleaseX64NNBD/dart2js_platform.dill",
+ "xcodebuild/ReleaseX64NNBD/dart2js_platform_strong.dill"
+ ],
"front-end": [
".packages",
"out/ReleaseIA32/",
@@ -370,6 +407,13 @@
"options": {
"use-sdk": true
}},
+ "dart2js-weak-(linux|mac|win)-x64-d8": {
+ "options": {
+ "builder-tag": "dart2js-weak",
+ "enable-experiment": ["non-nullable"],
+ "dart2js-options": ["--no-runtime-null-safety"],
+ "use-sdk": true
+ }},
"dart2js-(linux|win)-firefox": {
"options": {
"use-sdk": true
@@ -408,6 +452,13 @@
"options": {
"host-checked": true
}},
+ "dart2js-hostasserts-weak-(linux|mac|win)-x64-d8": {
+ "options": {
+ "builder-tag": "dart2js-weak",
+ "enable-experiment": ["non-nullable"],
+ "dart2js-options": ["--no-runtime-null-safety"],
+ "host-checked": true
+ }},
"dart2js-old-rti-(linux|mac|win)-x64-d8": {
"options": {
"builder-tag": "old_rti",
@@ -578,7 +629,6 @@
"use-sdk": true,
"enable-experiment": ["non-nullable"],
"enable-asserts": true
-
}},
"cfe-(linux|mac|win)": {
"options": {
@@ -1998,8 +2048,32 @@
"script": "tools/build.py",
"arguments": [
"--nnbd",
- "create_sdk"
+ "create_sdk",
+ "dart2js_bot"
]
+ },
+ {
+ "name": "check dart nnbd sdk for static errors",
+ "script": "out/ReleaseX64NNBD/dart-sdk/bin/dart",
+ "arguments": [
+ "--enable-experiment=non-nullable",
+ "pkg/dev_compiler/tool/check_nnbd_sdk.dart",
+ "--target",
+ "dart2js_server"
+ ]
+ },
+ {
+ "name": "dart2js nnbd weak tests",
+ "arguments": [
+ "-ndart2js-hostasserts-weak-linux-x64-d8",
+ "--dart2js-batch",
+ "language_2",
+ "corelib_2",
+ "dart2js_extra",
+ "dart2js_native"
+ ],
+ "shards": 6,
+ "fileset": "dart2js_hostasserts_nnbd"
}
]
},
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index 72becc6..03fe4df 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -34,7 +34,6 @@
script = "create_snapshot_entry.dart"
inputs = [
- "../../sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart",
"$target_gen_dir/dart2js_files.stamp",
"../../tools/make_version.py",
"../../tools/VERSION",
@@ -69,8 +68,13 @@
training_args = [
"--packages=" + rebase_path("../../.packages"),
"--libraries-spec=" + rebase_path("../../$libraries_specification_path"),
- rebase_path("$target_gen_dir/dart2js.dart"),
]
+
+ if (use_nnbd) {
+ training_args += [ "--enable-experiment=non-nullable" ]
+ }
+
+ training_args += [ rebase_path("$target_gen_dir/dart2js.dart") ]
}
compile_platform("compile_dart2js_platform") {
@@ -88,6 +92,10 @@
"--target=dart2js",
"dart:core",
]
+
+ if (use_nnbd) {
+ args += [ "--enable-experiment=non-nullable" ]
+ }
}
compile_platform("compile_dart2js_server_platform") {
single_root_scheme = "org-dartlang-sdk"
@@ -104,4 +112,8 @@
"--target=dart2js_server",
"dart:core",
]
+
+ if (use_nnbd) {
+ args += [ "--enable-experiment=non-nullable" ]
+ }
}