diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart index 7cc6ec9bd8a..82d166222ff 100644 --- a/pkg/compiler/lib/src/js/rewrite_async.dart +++ b/pkg/compiler/lib/src/js/rewrite_async.dart @@ -9,7 +9,7 @@ library rewrite_async; import 'dart:collection'; import 'dart:math' show max; -import 'package:js_runtime/shared/async_await_error_codes.dart' as error_codes; +import 'package:js_runtime/synced/async_await_error_codes.dart' as error_codes; import '../common.dart'; import '../io/source_information.dart' show SourceInformation; diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart index 7e08bd6f23f..37ef5340ad8 100644 --- a/pkg/compiler/lib/src/js_backend/backend_usage.dart +++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart @@ -161,7 +161,8 @@ class BackendUsageBuilderImpl implements BackendUsageBuilder { if (_isValidEntity(element)) return true; SourceSpan span = _frontendStrategy.spanFromSpannable(element, element); if (library.canonicalUri.isScheme('dart') && - span.uri.path.contains('_internal/js_runtime/lib/')) { + (span.uri.path.contains('_internal/js_runtime/lib') || + span.uri.path.contains('_internal/js_shared/lib'))) { // TODO(johnniwinther): We should be more precise about these. return true; } else { diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart index 3f90fc2147e..392e4e5c277 100644 --- a/pkg/compiler/lib/src/js_backend/namer.dart +++ b/pkg/compiler/lib/src/js_backend/namer.dart @@ -9,7 +9,7 @@ library js_backend.namer; import 'package:front_end/src/api_unstable/dart2js.dart' show $0, $9, $A, $Z, $_, $a, $g, $s, $z; -import 'package:js_runtime/shared/embedded_names.dart' show JsGetName; +import 'package:js_runtime/synced/embedded_names.dart' show JsGetName; import '../closure.dart'; import '../common.dart'; diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_new.dart b/pkg/compiler/lib/src/js_backend/runtime_types_new.dart index 2f8816e30f5..a0f41615392 100644 --- a/pkg/compiler/lib/src/js_backend/runtime_types_new.dart +++ b/pkg/compiler/lib/src/js_backend/runtime_types_new.dart @@ -6,7 +6,7 @@ library js_backend.runtime_types_new; -import 'package:js_runtime/shared/recipe_syntax.dart'; +import 'package:js_shared/synced/recipe_syntax.dart'; import '../common/elements.dart' show CommonElements, JCommonElements; import '../elements/entities.dart'; diff --git a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart index 78a6912539e..0e142536c99 100644 --- a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart +++ b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart @@ -6,7 +6,7 @@ library dart2js.js_emitter.class_stub_generator; -import 'package:js_runtime/shared/embedded_names.dart' +import 'package:js_runtime/synced/embedded_names.dart' show TearOffParametersPropertyNames; import '../common/elements.dart' show CommonElements; diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart index 7ba3a7f1827..525136589fd 100644 --- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart +++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart @@ -6,7 +6,7 @@ library dart2js.js_emitter.interceptor_stub_generator; -import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; +import 'package:js_runtime/synced/embedded_names.dart' as embeddedNames; import '../common/elements.dart'; import '../constants/values.dart'; diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart index 60984933fcf..c6af592d789 100644 --- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart +++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart @@ -7,7 +7,7 @@ library dart2js.js_emitter.main_call_stub_generator; import 'package:compiler/src/options.dart'; -import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; +import 'package:js_runtime/synced/embedded_names.dart' as embeddedNames; import '../common/elements.dart'; import '../elements/entities.dart'; diff --git a/pkg/compiler/lib/src/js_emitter/native_generator.dart b/pkg/compiler/lib/src/js_emitter/native_generator.dart index 71e641461c2..a47b6bed4c8 100644 --- a/pkg/compiler/lib/src/js_emitter/native_generator.dart +++ b/pkg/compiler/lib/src/js_emitter/native_generator.dart @@ -6,7 +6,7 @@ library dart2js.js_emitter.native_generator; -import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; +import 'package:js_runtime/synced/embedded_names.dart' as embeddedNames; import '../js/js.dart' as jsAst; import '../js/js.dart' show js; diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart index f0ca98125af..9ff95c58c2f 100644 --- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart +++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart @@ -8,7 +8,7 @@ library dart2js.js_emitter.startup_emitter.model_emitter; import 'dart:convert' show JsonEncoder; -import 'package:js_runtime/shared/embedded_names.dart' +import 'package:js_runtime/synced/embedded_names.dart' show ARRAY_RTI_PROPERTY, DEFERRED_INITIALIZED, diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart index 476b9065806..f28ab293499 100644 --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart @@ -6,7 +6,7 @@ import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir; import 'package:front_end/src/api_unstable/dart2js.dart' as ir; -import 'package:js_runtime/shared/embedded_names.dart'; +import 'package:js_runtime/synced/embedded_names.dart'; import 'package:kernel/ast.dart' as ir; import 'package:kernel/class_hierarchy.dart' as ir; import 'package:kernel/core_types.dart' as ir; diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart index 8721f915439..cc261971184 100644 --- a/pkg/compiler/lib/src/ssa/builder.dart +++ b/pkg/compiler/lib/src/ssa/builder.dart @@ -4,7 +4,7 @@ // @dart = 2.10 -import 'package:js_runtime/shared/embedded_names.dart'; +import 'package:js_runtime/synced/embedded_names.dart'; import 'package:kernel/ast.dart' as ir; import '../closure.dart'; diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml index 22f0ac47c34..f3dfd2624c2 100644 --- a/pkg/compiler/pubspec.yaml +++ b/pkg/compiler/pubspec.yaml @@ -17,6 +17,7 @@ dependencies: front_end: any js_ast: any js_runtime: any + js_shared: any kernel: any dev_dependencies: diff --git a/pkg/js_runtime/README.md b/pkg/js_runtime/README.md index 5f60952023f..02f263b9e07 100644 --- a/pkg/js_runtime/README.md +++ b/pkg/js_runtime/README.md @@ -3,7 +3,7 @@ This package contains code that is shared between the dart2js compiler and the dart2js runtime libraries. -*Important*: all code under the `lib/shared/` must be kept in sync with the -runtime at all times (in `sdk/lib/_internal/js_runtime/lib/shared`). The +*Important*: all code under the `lib/synced/` must be kept in sync with the +runtime at all times (in `sdk/lib/_internal/js_runtime/lib/synced`). The `test/in_sync_test.dart` test verifies this. diff --git a/pkg/js_runtime/lib/shared/async_await_error_codes.dart b/pkg/js_runtime/lib/synced/async_await_error_codes.dart similarity index 100% rename from pkg/js_runtime/lib/shared/async_await_error_codes.dart rename to pkg/js_runtime/lib/synced/async_await_error_codes.dart diff --git a/pkg/js_runtime/lib/shared/embedded_names.dart b/pkg/js_runtime/lib/synced/embedded_names.dart similarity index 100% rename from pkg/js_runtime/lib/shared/embedded_names.dart rename to pkg/js_runtime/lib/synced/embedded_names.dart diff --git a/pkg/js_runtime/test/in_sync_test.dart b/pkg/js_runtime/test/in_sync_test.dart index 4dbef635035..5dab5865cad 100644 --- a/pkg/js_runtime/test/in_sync_test.dart +++ b/pkg/js_runtime/test/in_sync_test.dart @@ -11,9 +11,9 @@ import 'package:_fe_analyzer_shared/src/util/relativize.dart'; import 'package:expect/expect.dart'; void main(List argv) { - var packageDir = Platform.script.resolve('../lib/shared/'); + var packageDir = Platform.script.resolve('../lib/synced/'); var sdkDir = Platform.script - .resolve('../../../sdk/lib/_internal/js_runtime/lib/shared/'); + .resolve('../../../sdk/lib/_internal/js_runtime/lib/synced/'); var rPackageDir = relativizeUri(Directory.current.uri, packageDir, Platform.isWindows); var rSdkDir = diff --git a/pkg/js_shared/OWNERS b/pkg/js_shared/OWNERS new file mode 100644 index 00000000000..f5bd90c5161 --- /dev/null +++ b/pkg/js_shared/OWNERS @@ -0,0 +1 @@ +file:/tools/OWNERS_WEB diff --git a/pkg/js_shared/README.md b/pkg/js_shared/README.md new file mode 100644 index 00000000000..cce9c2e74b1 --- /dev/null +++ b/pkg/js_shared/README.md @@ -0,0 +1,13 @@ +# Package `js_shared`: + +This code is a compile time dependency of dart2js and DDC. It is imported as +a `package:` import by both compilers. + +There is an exact copy in the SDK of the libraries in the +`pkg/js_shared/lib/synced` sub-directory. +Those libraries are imported as `dart:` imports by the dart2js and DDC runtime +libraries. + +*Important*: all code under `pkg/js_shared/lib/synced` must be kept in sync with +the runtime (in `sdk/lib/_internal/js_shared/lib/synced`) at all times. The +`test/in_sync_test.dart` test verifies this. diff --git a/pkg/js_runtime/lib/shared/recipe_syntax.dart b/pkg/js_shared/lib/synced/recipe_syntax.dart similarity index 98% rename from pkg/js_runtime/lib/shared/recipe_syntax.dart rename to pkg/js_shared/lib/synced/recipe_syntax.dart index 73054919a2b..3ccec6070ca 100644 --- a/pkg/js_runtime/lib/shared/recipe_syntax.dart +++ b/pkg/js_shared/lib/synced/recipe_syntax.dart @@ -6,8 +6,8 @@ /// Constants and predicates used for encoding and decoding type recipes. /// -/// This library is shared between the compiler and the runtime system. -library dart2js._recipe_syntax; +/// This library is synchronized between the compiler and the runtime system. +library js_shared._recipe_syntax; abstract class Recipe { Recipe._(); diff --git a/pkg/js_shared/pubspec.yaml b/pkg/js_shared/pubspec.yaml new file mode 100644 index 00000000000..6424aac62ec --- /dev/null +++ b/pkg/js_shared/pubspec.yaml @@ -0,0 +1,10 @@ +name: js_shared +# This package is not intended for consumption on pub.dev. DO NOT publish. +publish_to: none + +environment: + sdk: '>=2.12.0 <3.0.0' + +dev_dependencies: + expect: any + _fe_analyzer_shared: any diff --git a/pkg/js_shared/test/in_sync_test.dart b/pkg/js_shared/test/in_sync_test.dart new file mode 100644 index 00000000000..e10c4d6b665 --- /dev/null +++ b/pkg/js_shared/test/in_sync_test.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2022, 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. + +/// Test to verify that this package is in-sync with shared runtime libraries. +import 'dart:io'; + +import 'package:_fe_analyzer_shared/src/util/relativize.dart'; +import 'package:expect/expect.dart'; + +void main(List argv) { + var packageDir = Platform.script.resolve('../lib/synced/'); + var sdkDir = Platform.script + .resolve('../../../sdk/lib/_internal/js_shared/lib/synced/'); + var rPackageDir = + relativizeUri(Directory.current.uri, packageDir, Platform.isWindows); + var rSdkDir = + relativizeUri(Directory.current.uri, sdkDir, Platform.isWindows); + + for (var file in Directory.fromUri(sdkDir).listSync()) { + if (file is File) { + var filename = file.uri.pathSegments.last; + var packageFile = File.fromUri(packageDir.resolve(filename)); + Expect.isTrue( + packageFile.existsSync(), + "$filename not in sync. Please update it by running:\n" + " cp $rSdkDir$filename $rPackageDir$filename"); + var original = file.readAsBytesSync(); + var copy = packageFile.readAsBytesSync(); + Expect.listEquals( + original, + copy, + "$filename not in sync. Please update it by running:\n" + " cp $rSdkDir$filename $rPackageDir$filename"); + } + } +} diff --git a/pkg/pkg.status b/pkg/pkg.status index 2aef55f42ce..b7d194973c4 100644 --- a/pkg/pkg.status +++ b/pkg/pkg.status @@ -140,6 +140,7 @@ dev_compiler/test/options/*: SkipByDesign front_end/test/hot_reload_e2e_test: Skip frontend_server/test/*: SkipByDesign # Only meant to run on vm js_runtime/test/*: SkipByDesign # Only meant to run on vm +js_shared/test/*: SkipByDesign # Only meant to run on vm vm/test/*: SkipByDesign # Only meant to run on vm vm_service/test/*: SkipByDesign # Uses dart:io vm_snapshot_analysis/test/*: SkipByDesign # Only meant to run on vm diff --git a/sdk/lib/_internal/js_runtime/lib/shared/async_await_error_codes.dart b/sdk/lib/_internal/js_runtime/lib/synced/async_await_error_codes.dart similarity index 100% rename from sdk/lib/_internal/js_runtime/lib/shared/async_await_error_codes.dart rename to sdk/lib/_internal/js_runtime/lib/synced/async_await_error_codes.dart diff --git a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/synced/embedded_names.dart similarity index 100% rename from sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart rename to sdk/lib/_internal/js_runtime/lib/synced/embedded_names.dart diff --git a/sdk/lib/_internal/js_runtime/lib/rti.dart b/sdk/lib/_internal/js_shared/lib/rti.dart similarity index 100% rename from sdk/lib/_internal/js_runtime/lib/rti.dart rename to sdk/lib/_internal/js_shared/lib/rti.dart diff --git a/sdk/lib/_internal/js_runtime/lib/shared/recipe_syntax.dart b/sdk/lib/_internal/js_shared/lib/synced/recipe_syntax.dart similarity index 98% rename from sdk/lib/_internal/js_runtime/lib/shared/recipe_syntax.dart rename to sdk/lib/_internal/js_shared/lib/synced/recipe_syntax.dart index 73054919a2b..3ccec6070ca 100644 --- a/sdk/lib/_internal/js_runtime/lib/shared/recipe_syntax.dart +++ b/sdk/lib/_internal/js_shared/lib/synced/recipe_syntax.dart @@ -6,8 +6,8 @@ /// Constants and predicates used for encoding and decoding type recipes. /// -/// This library is shared between the compiler and the runtime system. -library dart2js._recipe_syntax; +/// This library is synchronized between the compiler and the runtime system. +library js_shared._recipe_syntax; abstract class Recipe { Recipe._(); diff --git a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart index 49845a23e81..5a357e5454b 100644 --- a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart +++ b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart @@ -147,7 +147,7 @@ const Map libraries = const { categories: "", documented: false, platforms: DART2JS_PLATFORM), "_late_helper": const LibraryInfo("_internal/js_runtime/lib/late_helper.dart", categories: "", documented: false, platforms: DART2JS_PLATFORM), - "_rti": const LibraryInfo("_internal/js_runtime/lib/rti.dart", + "_rti": const LibraryInfo("_internal/js_shared/lib/rti.dart", categories: "", documented: false, platforms: DART2JS_PLATFORM), "_dart2js_runtime_metrics": const LibraryInfo( "_internal/js_runtime/lib/dart2js_runtime_metrics.dart", @@ -172,17 +172,17 @@ const Map libraries = const { documented: false, platforms: DART2JS_PLATFORM), "_js_embedded_names": const LibraryInfo( - "_internal/js_runtime/lib/shared/embedded_names.dart", + "_internal/js_runtime/lib/synced/embedded_names.dart", categories: "", documented: false, platforms: DART2JS_PLATFORM), "_async_await_error_codes": const LibraryInfo( - "_internal/js_runtime/lib/shared/async_await_error_codes.dart", + "_internal/js_runtime/lib/synced/async_await_error_codes.dart", categories: "", documented: false, platforms: DART2JS_PLATFORM), "_recipe_syntax": const LibraryInfo( - "_internal/js_runtime/lib/shared/recipe_syntax.dart", + "_internal/js_shared/lib/synced/recipe_syntax.dart", categories: "", documented: false, platforms: DART2JS_PLATFORM), diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json index b72ab821a32..6f33d88fad0 100644 --- a/sdk/lib/libraries.json +++ b/sdk/lib/libraries.json @@ -369,7 +369,7 @@ "uri": "_internal/js_runtime/lib/late_helper.dart" }, "_rti": { - "uri": "_internal/js_runtime/lib/rti.dart" + "uri": "_internal/js_shared/lib/rti.dart" }, "_interceptors": { "uri": "_internal/js_runtime/lib/interceptors.dart" @@ -384,13 +384,13 @@ "uri": "_internal/js_runtime/lib/js_primitives.dart" }, "_js_embedded_names": { - "uri": "_internal/js_runtime/lib/shared/embedded_names.dart" + "uri": "_internal/js_runtime/lib/synced/embedded_names.dart" }, "_async_await_error_codes": { - "uri": "_internal/js_runtime/lib/shared/async_await_error_codes.dart" + "uri": "_internal/js_runtime/lib/synced/async_await_error_codes.dart" }, "_recipe_syntax": { - "uri": "_internal/js_runtime/lib/shared/recipe_syntax.dart" + "uri": "_internal/js_shared/lib/synced/recipe_syntax.dart" } } }, diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml index 92231cb4e61..ed11fa53e7e 100644 --- a/sdk/lib/libraries.yaml +++ b/sdk/lib/libraries.yaml @@ -337,7 +337,7 @@ _dart2js_common: uri: "_internal/js_runtime/lib/late_helper.dart" _rti: - uri: "_internal/js_runtime/lib/rti.dart" + uri: "_internal/js_shared/lib/rti.dart" _interceptors: uri: "_internal/js_runtime/lib/interceptors.dart" @@ -352,13 +352,13 @@ _dart2js_common: uri: "_internal/js_runtime/lib/js_primitives.dart" _js_embedded_names: - uri: "_internal/js_runtime/lib/shared/embedded_names.dart" + uri: "_internal/js_runtime/lib/synced/embedded_names.dart" _async_await_error_codes: - uri: "_internal/js_runtime/lib/shared/async_await_error_codes.dart" + uri: "_internal/js_runtime/lib/synced/async_await_error_codes.dart" _recipe_syntax: - uri: "_internal/js_runtime/lib/shared/recipe_syntax.dart" + uri: "_internal/js_shared/lib/synced/recipe_syntax.dart" dartdevc: libraries: