[web] Share more runtime code between ddc and dart2js
Creates a new 'dart:_js_shared_embedded_names' library for the names
accessed from the shared 'dart:_rti' library. Migrate all of the shared
symbols and uses to the new location.
Change-Id: Iaa72c4522888ad630782b921b0b70d7a2626d1b9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/241507
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
diff --git a/pkg/compiler/lib/src/common/elements.dart b/pkg/compiler/lib/src/common/elements.dart
index a66fe73..47d4930 100644
--- a/pkg/compiler/lib/src/common/elements.dart
+++ b/pkg/compiler/lib/src/common/elements.dart
@@ -915,7 +915,7 @@
// From dart:_js_embedded_names
late final ClassEntity jsGetNameEnum = _findClass(
- _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
+ _env.lookupLibrary(Uris.dart__js_shared_embedded_names, required: true),
'JsGetName')!;
/// Returns `true` if [member] is a "foreign helper", that is, a member whose
@@ -1185,7 +1185,7 @@
'NativeTypedArrayOfDouble')!;
late final ClassEntity jsBuiltinEnum = _findClass(
- _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
+ _env.lookupLibrary(Uris.dart__js_shared_embedded_names, required: true),
'JsBuiltin')!;
bool isForeign(MemberEntity element) => element.library == foreignLibrary;
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index 024be8a..3058b11 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -249,6 +249,10 @@
static final Uri dart__js_embedded_names =
Uri(scheme: 'dart', path: '_js_embedded_names');
+ /// The URI for 'dart:_js_shared_embedded_names'.
+ static final Uri dart__js_shared_embedded_names =
+ Uri(scheme: 'dart', path: '_js_shared_embedded_names');
+
/// The URI for 'dart:js'.
static final Uri dart_js = Uri(scheme: 'dart', path: 'js');
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 392e4e5..dc91161 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -9,7 +9,7 @@
import 'package:front_end/src/api_unstable/dart2js.dart'
show $0, $9, $A, $Z, $_, $a, $g, $s, $z;
-import 'package:js_runtime/synced/embedded_names.dart' show JsGetName;
+import 'package:js_shared/synced/embedded_names.dart' show JsGetName;
import '../closure.dart';
import '../common.dart';
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 9ff95c5..254b4c7 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
@@ -10,7 +10,6 @@
import 'package:js_runtime/synced/embedded_names.dart'
show
- ARRAY_RTI_PROPERTY,
DEFERRED_INITIALIZED,
DEFERRED_LIBRARY_PARTS,
DEFERRED_PART_URIS,
@@ -19,18 +18,22 @@
INTERCEPTORS_BY_TAG,
IS_HUNK_INITIALIZED,
IS_HUNK_LOADED,
- JsGetName,
LEAF_TAGS,
MANGLED_GLOBAL_NAMES,
MANGLED_NAMES,
METADATA,
NATIVE_SUPERCLASS_TAG_NAME,
- RTI_UNIVERSE,
- RtiUniverseFieldNames,
RUNTIME_METRICS,
STARTUP_METRICS,
TearOffParametersPropertyNames,
- TYPE_TO_INTERCEPTOR_MAP,
+ TYPE_TO_INTERCEPTOR_MAP;
+
+import 'package:js_shared/synced/embedded_names.dart'
+ show
+ ARRAY_RTI_PROPERTY,
+ JsGetName,
+ RTI_UNIVERSE,
+ RtiUniverseFieldNames,
TYPES;
import 'package:js_ast/src/precedence.dart' as js_precedence;
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index a5172df..5b51960 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -261,6 +261,7 @@
'dart:_js_helper',
'dart:_js_names',
'dart:_js_primitives',
+ 'dart:_js_shared_embedded_names',
'dart:_late_helper',
'dart:_metadata',
'dart:_native_typed_data',
@@ -296,6 +297,7 @@
'dart:_js_helper',
'dart:_js_names',
'dart:_js_primitives',
+ 'dart:_js_shared_embedded_names',
'dart:_late_helper',
'dart:_native_typed_data',
'dart:_recipe_syntax',
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index f28ab293..e2437be 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/synced/embedded_names.dart';
+import 'package:js_shared/synced/embedded_names.dart' show JsGetName;
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 cc26197..dda60e0 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -5,6 +5,8 @@
// @dart = 2.10
import 'package:js_runtime/synced/embedded_names.dart';
+import 'package:js_shared/synced/embedded_names.dart'
+ show JsBuiltin, JsGetName, TYPES;
import 'package:kernel/ast.dart' as ir;
import '../closure.dart';
diff --git a/pkg/js_runtime/lib/synced/embedded_names.dart b/pkg/js_runtime/lib/synced/embedded_names.dart
index 9d48e1a..0c99f47 100644
--- a/pkg/js_runtime/lib/synced/embedded_names.dart
+++ b/pkg/js_runtime/lib/synced/embedded_names.dart
@@ -26,22 +26,12 @@
/// the static function's unique (potentially minified) name.
const STATIC_FUNCTION_NAME_PROPERTY_NAME = r'$static_name';
-/// The name of a property on the constructor function of Dart Object
-/// and interceptor types, used for caching Rti types.
-const CONSTRUCTOR_RTI_CACHE_PROPERTY_NAME = r'$ccache';
-
/// The name of the embedded global for metadata.
///
/// Use [JsBuiltin.getMetadata] instead of directly accessing this embedded
/// global.
const METADATA = 'metadata';
-/// A list of types used in the program e.g. for reflection or encoding of
-/// function types.
-///
-/// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
-const TYPES = 'types';
-
/// A JS map from mangled global names to their unmangled names.
///
/// If the program does not use reflection, this embedded global may be empty
@@ -94,11 +84,6 @@
// [INTERCEPTORS_BY_TAG] and [LEAF_TAGS].
const ISOLATE_TAG = 'isolateTag';
-/// An embedded global that contains the property used to store type information
-/// on JavaScript Array instances. This is a Symbol (except for IE11, where is
-/// is a String).
-const ARRAY_RTI_PROPERTY = 'arrayRti';
-
/// This embedded global (a function) returns the isolate-specific dispatch-tag
/// that is used to accelerate interceptor calls.
const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
@@ -174,11 +159,6 @@
/// globals don't clash with it.
const DEFERRED_INITIALIZED = 'deferredInitialized';
-/// A 'Universe' object used by 'dart:_rti'.
-///
-/// This embedded global is used for --experiment-new-rti.
-const RTI_UNIVERSE = 'typeUniverse';
-
/// An embedded global used to collect and access runtime metrics.
const RUNTIME_METRICS = 'rm';
@@ -188,103 +168,6 @@
/// An embedded global used to collect and access startup metrics.
const STARTUP_METRICS = 'sm';
-/// Names that are supported by [JS_GET_NAME].
-// TODO(herhut): Make entries lower case (as in fields) and find a better name.
-enum JsGetName {
- GETTER_PREFIX,
- SETTER_PREFIX,
- CALL_PREFIX,
- CALL_PREFIX0,
- CALL_PREFIX1,
- CALL_PREFIX2,
- CALL_PREFIX3,
- CALL_PREFIX4,
- CALL_PREFIX5,
- CALL_CATCH_ALL,
- REQUIRED_PARAMETER_PROPERTY,
- DEFAULT_VALUES_PROPERTY,
- CALL_NAME_PROPERTY,
- DEFERRED_ACTION_PROPERTY,
-
- /// Prefix used for generated type test property on classes.
- OPERATOR_IS_PREFIX,
-
- /// Name used for generated function types on classes and methods.
- SIGNATURE_NAME,
-
- /// Name of JavaScript property used to store runtime-type information on
- /// instances of parameterized classes.
- RTI_NAME,
-
- /// String representation of the type of the Future class.
- FUTURE_CLASS_TYPE_NAME,
-
- /// Field name used for determining if an object or its interceptor has
- /// JavaScript indexing behavior.
- IS_INDEXABLE_FIELD_NAME,
-
- /// String representation of the type of the null class.
- NULL_CLASS_TYPE_NAME,
-
- /// String representation of the type of the object class.
- OBJECT_CLASS_TYPE_NAME,
-
- /// String representation of the type of the List class.
- LIST_CLASS_TYPE_NAME,
-
- /// Property name for Rti._as field.
- RTI_FIELD_AS,
-
- /// Property name for Rti._is field.
- RTI_FIELD_IS,
-}
-
-enum JsBuiltin {
- /// Returns the JavaScript constructor function for Dart's Object class.
- /// This can be used for type tests, as in
- ///
- /// var constructor = JS_BUILTIN('', JsBuiltin.dartObjectConstructor);
- /// if (JS('bool', '# instanceof #', obj, constructor))
- /// ...
- dartObjectConstructor,
-
- /// Returns the JavaScript constructor function for the runtime's Closure
- /// class, the base class of all closure objects. This can be used for type
- /// tests, as in
- ///
- /// var constructor = JS_BUILTIN('', JsBuiltin.dartClosureConstructor);
- /// if (JS('bool', '# instanceof #', obj, constructor))
- /// ...
- dartClosureConstructor,
-
- /// Returns true if the given type is a type argument of a js-interop class
- /// or a supertype of a js-interop class.
- ///
- /// JS_BUILTIN('bool', JsBuiltin.isJsInteropTypeArgument, o)
- isJsInteropTypeArgument,
-
- /// Returns the metadata of the given [index].
- ///
- /// JS_BUILTIN('returns:var;effects:none;depends:none',
- /// JsBuiltin.getMetadata, index);
- getMetadata,
-
- /// Returns the type of the given [index].
- ///
- /// JS_BUILTIN('returns:var;effects:none;depends:none',
- /// JsBuiltin.getType, index);
- getType,
-}
-
-/// Names of fields of the Rti Universe object.
-class RtiUniverseFieldNames {
- static String evalCache = 'eC';
- static String typeRules = 'tR';
- static String erasedTypes = 'eT';
- static String typeParameterVariances = 'tPV';
- static String sharedEmptyArray = 'sEA';
-}
-
/// Names of fields of collected tear-off parameters object.
///
/// Tear-off getters are created before the Dart classes are initialized, so a
diff --git a/pkg/js_shared/lib/synced/embedded_names.dart b/pkg/js_shared/lib/synced/embedded_names.dart
new file mode 100644
index 0000000..c2f6307
--- /dev/null
+++ b/pkg/js_shared/lib/synced/embedded_names.dart
@@ -0,0 +1,116 @@
+// 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.
+
+// @dart=2.12
+
+/// A 'Universe' object used by 'dart:_rti'.
+const RTI_UNIVERSE = 'typeUniverse';
+
+/// An embedded global that contains the property used to store type information
+/// on JavaScript Array instances. This is a Symbol (except for IE11, where is
+/// is a String).
+const ARRAY_RTI_PROPERTY = 'arrayRti';
+
+/// A list of types used in the program e.g. for reflection or encoding of
+/// function types.
+///
+/// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
+const TYPES = 'types';
+
+/// Names that are supported by [JS_GET_NAME].
+// TODO(herhut): Make entries lower case (as in fields) and find a better name.
+enum JsGetName {
+ GETTER_PREFIX,
+ SETTER_PREFIX,
+ CALL_PREFIX,
+ CALL_PREFIX0,
+ CALL_PREFIX1,
+ CALL_PREFIX2,
+ CALL_PREFIX3,
+ CALL_PREFIX4,
+ CALL_PREFIX5,
+ CALL_CATCH_ALL,
+ REQUIRED_PARAMETER_PROPERTY,
+ DEFAULT_VALUES_PROPERTY,
+ CALL_NAME_PROPERTY,
+ DEFERRED_ACTION_PROPERTY,
+
+ /// Prefix used for generated type test property on classes.
+ OPERATOR_IS_PREFIX,
+
+ /// Name used for generated function types on classes and methods.
+ SIGNATURE_NAME,
+
+ /// Name of JavaScript property used to store runtime-type information on
+ /// instances of parameterized classes.
+ RTI_NAME,
+
+ /// String representation of the type of the Future class.
+ FUTURE_CLASS_TYPE_NAME,
+
+ /// Field name used for determining if an object or its interceptor has
+ /// JavaScript indexing behavior.
+ IS_INDEXABLE_FIELD_NAME,
+
+ /// String representation of the type of the null class.
+ NULL_CLASS_TYPE_NAME,
+
+ /// String representation of the type of the object class.
+ OBJECT_CLASS_TYPE_NAME,
+
+ /// String representation of the type of the List class.
+ LIST_CLASS_TYPE_NAME,
+
+ /// Property name for Rti._as field.
+ RTI_FIELD_AS,
+
+ /// Property name for Rti._is field.
+ RTI_FIELD_IS,
+}
+
+enum JsBuiltin {
+ /// Returns the JavaScript constructor function for Dart's Object class.
+ /// This can be used for type tests, as in
+ ///
+ /// var constructor = JS_BUILTIN('', JsBuiltin.dartObjectConstructor);
+ /// if (JS('bool', '# instanceof #', obj, constructor))
+ /// ...
+ dartObjectConstructor,
+
+ /// Returns the JavaScript constructor function for the runtime's Closure
+ /// class, the base class of all closure objects. This can be used for type
+ /// tests, as in
+ ///
+ /// var constructor = JS_BUILTIN('', JsBuiltin.dartClosureConstructor);
+ /// if (JS('bool', '# instanceof #', obj, constructor))
+ /// ...
+ dartClosureConstructor,
+
+ /// Returns true if the given type is a type argument of a js-interop class
+ /// or a supertype of a js-interop class.
+ ///
+ /// JS_BUILTIN('bool', JsBuiltin.isJsInteropTypeArgument, o)
+ isJsInteropTypeArgument,
+
+ /// Returns the metadata of the given [index].
+ ///
+ /// JS_BUILTIN('returns:var;effects:none;depends:none',
+ /// JsBuiltin.getMetadata, index);
+ getMetadata,
+
+ /// Returns the type of the given [index].
+ ///
+ /// JS_BUILTIN('returns:var;effects:none;depends:none',
+ /// JsBuiltin.getType, index);
+ getType,
+}
+
+/// Names of fields of the Rti Universe object.
+class RtiUniverseFieldNames {
+ static String evalCache = 'eC';
+ static String typeRules = 'tR';
+ static String erasedTypes = 'eT';
+ static String typeParameterVariances = 'tPV';
+ static String sharedEmptyArray = 'sEA';
+}
diff --git a/sdk/lib/_internal/js_runtime/lib/foreign_helper.dart b/sdk/lib/_internal/js_runtime/lib/foreign_helper.dart
index 6e8cd72..66b06a7 100644
--- a/sdk/lib/_internal/js_runtime/lib/foreign_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/foreign_helper.dart
@@ -4,7 +4,7 @@
library _foreign_helper;
-import 'dart:_js_embedded_names' show JsGetName, JsBuiltin;
+import 'dart:_js_shared_embedded_names' show JsGetName, JsBuiltin;
import 'dart:_rti' show Rti;
/// Emits a JavaScript code fragment parametrized by arguments.
@@ -215,13 +215,14 @@
/// Reads an embedded global.
///
-/// The [name] should be a constant defined in the `_embedded_names` library.
+/// The [name] should be a constant defined in the `_embedded_names` or
+/// `_js_shared_embedded_names` library.
external JS_EMBEDDED_GLOBAL(String typeDescription, String name);
/// Instructs the compiler to execute the [builtinName] action at the call-site.
///
-/// The [builtin] should be a constant defined in the `_embedded_names`
-/// library.
+/// The [builtin] should be a constant defined in the
+/// `_js_shared_embedded_names` library.
// Add additional optional arguments if needed. The method is treated internally
// as a variable argument method.
external JS_BUILTIN(String typeDescription, JsBuiltin builtin,
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 50f9c4f..fd3ffd1 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -6,19 +6,15 @@
import 'dart:_js_embedded_names'
show
- ARRAY_RTI_PROPERTY,
CURRENT_SCRIPT,
DEFERRED_LIBRARY_PARTS,
DEFERRED_PART_URIS,
DEFERRED_PART_HASHES,
GET_ISOLATE_TAG,
INITIALIZE_LOADED_HUNK,
- INTERCEPTED_NAMES,
INTERCEPTORS_BY_TAG,
IS_HUNK_LOADED,
IS_HUNK_INITIALIZED,
- JsBuiltin,
- JsGetName,
LEAF_TAGS,
NATIVE_SUPERCLASS_TAG_NAME,
RUNTIME_METRICS,
@@ -26,6 +22,8 @@
STATIC_FUNCTION_NAME_PROPERTY_NAME,
TearOffParametersPropertyNames;
+import 'dart:_js_shared_embedded_names' show JsBuiltin, JsGetName;
+
import 'dart:collection';
import 'dart:async' show Completer, DeferredLoadException, Future, Zone;
diff --git a/sdk/lib/_internal/js_runtime/lib/synced/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/synced/embedded_names.dart
index 9d48e1a..0c99f47 100644
--- a/sdk/lib/_internal/js_runtime/lib/synced/embedded_names.dart
+++ b/sdk/lib/_internal/js_runtime/lib/synced/embedded_names.dart
@@ -26,22 +26,12 @@
/// the static function's unique (potentially minified) name.
const STATIC_FUNCTION_NAME_PROPERTY_NAME = r'$static_name';
-/// The name of a property on the constructor function of Dart Object
-/// and interceptor types, used for caching Rti types.
-const CONSTRUCTOR_RTI_CACHE_PROPERTY_NAME = r'$ccache';
-
/// The name of the embedded global for metadata.
///
/// Use [JsBuiltin.getMetadata] instead of directly accessing this embedded
/// global.
const METADATA = 'metadata';
-/// A list of types used in the program e.g. for reflection or encoding of
-/// function types.
-///
-/// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
-const TYPES = 'types';
-
/// A JS map from mangled global names to their unmangled names.
///
/// If the program does not use reflection, this embedded global may be empty
@@ -94,11 +84,6 @@
// [INTERCEPTORS_BY_TAG] and [LEAF_TAGS].
const ISOLATE_TAG = 'isolateTag';
-/// An embedded global that contains the property used to store type information
-/// on JavaScript Array instances. This is a Symbol (except for IE11, where is
-/// is a String).
-const ARRAY_RTI_PROPERTY = 'arrayRti';
-
/// This embedded global (a function) returns the isolate-specific dispatch-tag
/// that is used to accelerate interceptor calls.
const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
@@ -174,11 +159,6 @@
/// globals don't clash with it.
const DEFERRED_INITIALIZED = 'deferredInitialized';
-/// A 'Universe' object used by 'dart:_rti'.
-///
-/// This embedded global is used for --experiment-new-rti.
-const RTI_UNIVERSE = 'typeUniverse';
-
/// An embedded global used to collect and access runtime metrics.
const RUNTIME_METRICS = 'rm';
@@ -188,103 +168,6 @@
/// An embedded global used to collect and access startup metrics.
const STARTUP_METRICS = 'sm';
-/// Names that are supported by [JS_GET_NAME].
-// TODO(herhut): Make entries lower case (as in fields) and find a better name.
-enum JsGetName {
- GETTER_PREFIX,
- SETTER_PREFIX,
- CALL_PREFIX,
- CALL_PREFIX0,
- CALL_PREFIX1,
- CALL_PREFIX2,
- CALL_PREFIX3,
- CALL_PREFIX4,
- CALL_PREFIX5,
- CALL_CATCH_ALL,
- REQUIRED_PARAMETER_PROPERTY,
- DEFAULT_VALUES_PROPERTY,
- CALL_NAME_PROPERTY,
- DEFERRED_ACTION_PROPERTY,
-
- /// Prefix used for generated type test property on classes.
- OPERATOR_IS_PREFIX,
-
- /// Name used for generated function types on classes and methods.
- SIGNATURE_NAME,
-
- /// Name of JavaScript property used to store runtime-type information on
- /// instances of parameterized classes.
- RTI_NAME,
-
- /// String representation of the type of the Future class.
- FUTURE_CLASS_TYPE_NAME,
-
- /// Field name used for determining if an object or its interceptor has
- /// JavaScript indexing behavior.
- IS_INDEXABLE_FIELD_NAME,
-
- /// String representation of the type of the null class.
- NULL_CLASS_TYPE_NAME,
-
- /// String representation of the type of the object class.
- OBJECT_CLASS_TYPE_NAME,
-
- /// String representation of the type of the List class.
- LIST_CLASS_TYPE_NAME,
-
- /// Property name for Rti._as field.
- RTI_FIELD_AS,
-
- /// Property name for Rti._is field.
- RTI_FIELD_IS,
-}
-
-enum JsBuiltin {
- /// Returns the JavaScript constructor function for Dart's Object class.
- /// This can be used for type tests, as in
- ///
- /// var constructor = JS_BUILTIN('', JsBuiltin.dartObjectConstructor);
- /// if (JS('bool', '# instanceof #', obj, constructor))
- /// ...
- dartObjectConstructor,
-
- /// Returns the JavaScript constructor function for the runtime's Closure
- /// class, the base class of all closure objects. This can be used for type
- /// tests, as in
- ///
- /// var constructor = JS_BUILTIN('', JsBuiltin.dartClosureConstructor);
- /// if (JS('bool', '# instanceof #', obj, constructor))
- /// ...
- dartClosureConstructor,
-
- /// Returns true if the given type is a type argument of a js-interop class
- /// or a supertype of a js-interop class.
- ///
- /// JS_BUILTIN('bool', JsBuiltin.isJsInteropTypeArgument, o)
- isJsInteropTypeArgument,
-
- /// Returns the metadata of the given [index].
- ///
- /// JS_BUILTIN('returns:var;effects:none;depends:none',
- /// JsBuiltin.getMetadata, index);
- getMetadata,
-
- /// Returns the type of the given [index].
- ///
- /// JS_BUILTIN('returns:var;effects:none;depends:none',
- /// JsBuiltin.getType, index);
- getType,
-}
-
-/// Names of fields of the Rti Universe object.
-class RtiUniverseFieldNames {
- static String evalCache = 'eC';
- static String typeRules = 'tR';
- static String erasedTypes = 'eT';
- static String typeParameterVariances = 'tPV';
- static String sharedEmptyArray = 'sEA';
-}
-
/// Names of fields of collected tear-off parameters object.
///
/// Tear-off getters are created before the Dart classes are initialized, so a
diff --git a/sdk/lib/_internal/js_shared/lib/rti.dart b/sdk/lib/_internal/js_shared/lib/rti.dart
index 356298b..b7c9881 100644
--- a/sdk/lib/_internal/js_shared/lib/rti.dart
+++ b/sdk/lib/_internal/js_shared/lib/rti.dart
@@ -18,24 +18,16 @@
RAW_DART_FUNCTION_REF,
TYPE_REF,
LEGACY_TYPE_REF;
-
import 'dart:_interceptors'
show JavaScriptFunction, JSArray, JSNull, JSUnmodifiableArray;
-
import 'dart:_js_names' show unmangleGlobalNameIfPreservedAnyways;
-
-import 'dart:_js_embedded_names'
- show
- JsBuiltin,
- JsGetName,
- RtiUniverseFieldNames,
- ARRAY_RTI_PROPERTY,
- CONSTRUCTOR_RTI_CACHE_PROPERTY_NAME,
- RTI_UNIVERSE,
- TYPES;
-
+import 'dart:_js_shared_embedded_names';
import 'dart:_recipe_syntax';
+/// The name of a property on the constructor function of Dart Object
+/// and interceptor types, used for caching Rti types.
+const CONSTRUCTOR_RTI_CACHE_PROPERTY_NAME = r'$ccache';
+
// The top type `Object?` is used throughout this library even when values are
// not nullable or have narrower types in order to avoid incurring type checks
// before the type checking infrastructure has been set up.
diff --git a/sdk/lib/_internal/js_shared/lib/synced/embedded_names.dart b/sdk/lib/_internal/js_shared/lib/synced/embedded_names.dart
new file mode 100644
index 0000000..c2f6307
--- /dev/null
+++ b/sdk/lib/_internal/js_shared/lib/synced/embedded_names.dart
@@ -0,0 +1,116 @@
+// 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.
+
+// @dart=2.12
+
+/// A 'Universe' object used by 'dart:_rti'.
+const RTI_UNIVERSE = 'typeUniverse';
+
+/// An embedded global that contains the property used to store type information
+/// on JavaScript Array instances. This is a Symbol (except for IE11, where is
+/// is a String).
+const ARRAY_RTI_PROPERTY = 'arrayRti';
+
+/// A list of types used in the program e.g. for reflection or encoding of
+/// function types.
+///
+/// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
+const TYPES = 'types';
+
+/// Names that are supported by [JS_GET_NAME].
+// TODO(herhut): Make entries lower case (as in fields) and find a better name.
+enum JsGetName {
+ GETTER_PREFIX,
+ SETTER_PREFIX,
+ CALL_PREFIX,
+ CALL_PREFIX0,
+ CALL_PREFIX1,
+ CALL_PREFIX2,
+ CALL_PREFIX3,
+ CALL_PREFIX4,
+ CALL_PREFIX5,
+ CALL_CATCH_ALL,
+ REQUIRED_PARAMETER_PROPERTY,
+ DEFAULT_VALUES_PROPERTY,
+ CALL_NAME_PROPERTY,
+ DEFERRED_ACTION_PROPERTY,
+
+ /// Prefix used for generated type test property on classes.
+ OPERATOR_IS_PREFIX,
+
+ /// Name used for generated function types on classes and methods.
+ SIGNATURE_NAME,
+
+ /// Name of JavaScript property used to store runtime-type information on
+ /// instances of parameterized classes.
+ RTI_NAME,
+
+ /// String representation of the type of the Future class.
+ FUTURE_CLASS_TYPE_NAME,
+
+ /// Field name used for determining if an object or its interceptor has
+ /// JavaScript indexing behavior.
+ IS_INDEXABLE_FIELD_NAME,
+
+ /// String representation of the type of the null class.
+ NULL_CLASS_TYPE_NAME,
+
+ /// String representation of the type of the object class.
+ OBJECT_CLASS_TYPE_NAME,
+
+ /// String representation of the type of the List class.
+ LIST_CLASS_TYPE_NAME,
+
+ /// Property name for Rti._as field.
+ RTI_FIELD_AS,
+
+ /// Property name for Rti._is field.
+ RTI_FIELD_IS,
+}
+
+enum JsBuiltin {
+ /// Returns the JavaScript constructor function for Dart's Object class.
+ /// This can be used for type tests, as in
+ ///
+ /// var constructor = JS_BUILTIN('', JsBuiltin.dartObjectConstructor);
+ /// if (JS('bool', '# instanceof #', obj, constructor))
+ /// ...
+ dartObjectConstructor,
+
+ /// Returns the JavaScript constructor function for the runtime's Closure
+ /// class, the base class of all closure objects. This can be used for type
+ /// tests, as in
+ ///
+ /// var constructor = JS_BUILTIN('', JsBuiltin.dartClosureConstructor);
+ /// if (JS('bool', '# instanceof #', obj, constructor))
+ /// ...
+ dartClosureConstructor,
+
+ /// Returns true if the given type is a type argument of a js-interop class
+ /// or a supertype of a js-interop class.
+ ///
+ /// JS_BUILTIN('bool', JsBuiltin.isJsInteropTypeArgument, o)
+ isJsInteropTypeArgument,
+
+ /// Returns the metadata of the given [index].
+ ///
+ /// JS_BUILTIN('returns:var;effects:none;depends:none',
+ /// JsBuiltin.getMetadata, index);
+ getMetadata,
+
+ /// Returns the type of the given [index].
+ ///
+ /// JS_BUILTIN('returns:var;effects:none;depends:none',
+ /// JsBuiltin.getType, index);
+ getType,
+}
+
+/// Names of fields of the Rti Universe object.
+class RtiUniverseFieldNames {
+ static String evalCache = 'eC';
+ static String typeRules = 'tR';
+ static String erasedTypes = 'eT';
+ static String typeParameterVariances = 'tPV';
+ static String sharedEmptyArray = 'sEA';
+}
diff --git a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
index 5a357e5..5cbab01 100644
--- a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
+++ b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
@@ -176,6 +176,11 @@
categories: "",
documented: false,
platforms: DART2JS_PLATFORM),
+ "_js_shared_embedded_names": const LibraryInfo(
+ "_internal/js_shared/lib/synced/embedded_names.dart",
+ categories: "",
+ documented: false,
+ platforms: DART2JS_PLATFORM),
"_async_await_error_codes": const LibraryInfo(
"_internal/js_runtime/lib/synced/async_await_error_codes.dart",
categories: "",
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index 6f33d88..4c5eb19 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -386,6 +386,9 @@
"_js_embedded_names": {
"uri": "_internal/js_runtime/lib/synced/embedded_names.dart"
},
+ "_js_shared_embedded_names": {
+ "uri": "_internal/js_shared/lib/synced/embedded_names.dart"
+ },
"_async_await_error_codes": {
"uri": "_internal/js_runtime/lib/synced/async_await_error_codes.dart"
},
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index ed11fa5..c09c34e 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -354,6 +354,9 @@
_js_embedded_names:
uri: "_internal/js_runtime/lib/synced/embedded_names.dart"
+ _js_shared_embedded_names:
+ uri: "_internal/js_shared/lib/synced/embedded_names.dart"
+
_async_await_error_codes:
uri: "_internal/js_runtime/lib/synced/async_await_error_codes.dart"
diff --git a/tests/web/internal/rti/subtype_test.dart b/tests/web/internal/rti/subtype_test.dart
index d4f0c48..b6ceded 100644
--- a/tests/web/internal/rti/subtype_test.dart
+++ b/tests/web/internal/rti/subtype_test.dart
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:_foreign_helper' show JS, JS_GET_NAME, TYPE_REF;
-import 'dart:_js_embedded_names' show JsGetName;
+import 'dart:_js_shared_embedded_names' show JsGetName;
import 'dart:_rti' as rti;
import 'package:expect/expect.dart';
diff --git a/tests/web_2/internal/rti/subtype_test.dart b/tests/web_2/internal/rti/subtype_test.dart
index 3ffea446..5cdb5ce 100644
--- a/tests/web_2/internal/rti/subtype_test.dart
+++ b/tests/web_2/internal/rti/subtype_test.dart
@@ -5,7 +5,7 @@
// @dart = 2.7
import 'dart:_foreign_helper' show JS, JS_GET_NAME, TYPE_REF;
-import 'dart:_js_embedded_names' show JsGetName;
+import 'dart:_js_shared_embedded_names' show JsGetName;
import 'dart:_rti' as rti;
import 'subtype_utils.dart';