| Index: sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
|
| diff --git a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
|
| index 8e11da34fd44553388c53d9d5a48c826fa819a79..a42799688da32ec9f858d9a6ebd2c32ba2efec98 100644
|
| --- a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
|
| +++ b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
|
| @@ -11,10 +11,58 @@
|
| /// This library is shared between the compiler and the runtime system.
|
| library dart2js._embedded_names;
|
|
|
| -const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
|
| -const TYPE_INFORMATION = 'typeInformation';
|
| +/// The name of the property that is used to mark a type as typedef.
|
| +///
|
| +/// Without reflection typedefs are removed (expanded to their function type)
|
| +/// but with reflection an object is needed to have the typedef's name. The
|
| +/// object is marked with this property.
|
| +///
|
| +/// This property name only lives on internal type-objects and is only used
|
| +/// when reflection is enabled.
|
| +const TYPEDEF_PREDICATE_PROPERTY_NAME = r"$$isTypedef";
|
| +
|
| +/// The name of the property that is used to find the function type of a
|
| +/// typedef.
|
| +///
|
| +/// Without reflection typedefs are removed (expanded to their function type)
|
| +/// but with reflection an object is needed to have the typedef's name.
|
| +///
|
| +/// The typedef's object contains a pointer to its function type (as an index
|
| +/// into the embedded global [TYPES]) in this property.
|
| +///
|
| +/// This property name only lives on internal type-objects and is only used
|
| +/// when reflection is enabled.
|
| +const TYPEDEF_TYPE_PROPERTY_NAME = r"$typedefType";
|
| +
|
| +/// The name of the property that is used to find the native superclass of
|
| +/// an extended class.
|
| +///
|
| +/// Every class that extends a native class has this property set on its
|
| +/// native class.
|
| +const NATIVE_SUPERCLASS_TAG_NAME = r"$nativeSuperclassTag";
|
| +
|
| +
|
| +/// 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';
|
| +
|
| +/// An embedded global name that can be used to store a mapping from
|
| +/// static function names to dart-closure getters.
|
| const GLOBAL_FUNCTIONS = 'globalFunctions';
|
| -const STATICS = 'statics';
|
| +
|
| +/// Returns a function that maps a name of a class to its type.
|
| +///
|
| +/// This embedded global is used by the runtime when computing the internal
|
| +/// runtime-type-information (rti) object.
|
| +const GET_TYPE_FROM_NAME = 'getTypeFromName';
|
|
|
| /// If [JSInvocationMirror._invokeOn] is being used, this embedded global
|
| /// contains a JavaScript map with the names of methods that are
|
| @@ -23,58 +71,204 @@ const INTERCEPTED_NAMES = 'interceptedNames';
|
|
|
| /// A JS map from mangled global names to their unmangled names.
|
| ///
|
| -/// If the program does not use reflection may be empty (but not null or
|
| -/// undefined).
|
| +/// If the program does not use reflection, this embedded global may be empty
|
| +/// (but not null or undefined).
|
| const MANGLED_GLOBAL_NAMES = 'mangledGlobalNames';
|
|
|
| +/// A JS map from mangled instance names to their unmangled names.
|
| +///
|
| +/// If the program does not use reflection, this embedded global may be empty
|
| +/// (but not null or undefined).
|
| const MANGLED_NAMES = 'mangledNames';
|
| -const LIBRARIES = 'libraries';
|
| -const FINISHED_CLASSES = 'finishedClasses';
|
| -const ALL_CLASSES = 'allClasses';
|
| +
|
| +/// A JS map from dispatch tags (usually constructor names of DOM classes) to
|
| +/// interceptor class. This map is used to find the correct interceptor for
|
| +/// native classes.
|
| +///
|
| +/// This embedded global is used for natives.
|
| const INTERCEPTORS_BY_TAG = 'interceptorsByTag';
|
| +
|
| +/// A JS map from dispatch tags (usually constructor names of DOM classes) to
|
| +/// booleans. Every tag entry of [INTERCEPTORS_BY_TAG] has a corresponding
|
| +/// entry in the leaf-tags map.
|
| +///
|
| +/// A tag-entry is true, when a class can be treated as leaf class in the
|
| +/// hierarchy. That is, even though it might have subclasses, all subclasses
|
| +/// have the same code for the used methods.
|
| +///
|
| +/// This embedded global is used for natives.
|
| const LEAF_TAGS = 'leafTags';
|
| -const LAZIES = 'lazies';
|
| +
|
| +/// A JS function that returns the isolate tag for a given name.
|
| +///
|
| +/// This function uses the [ISOLATE_TAG] (below) to construct a name that is
|
| +/// unique per isolate.
|
| +///
|
| +/// This embedded global is used for natives.
|
| +// TODO(floitsch): should we rename this variable to avoid confusion with
|
| +// [INTERCEPTORS_BY_TAG] and [LEAF_TAGS].
|
| const GET_ISOLATE_TAG = 'getIsolateTag';
|
| +
|
| +/// A string that is different for each running isolate.
|
| +///
|
| +/// When this embedded global is initialized a global variable is used to
|
| +/// ensure that no other running isolate uses the same isolate-tag string.
|
| +///
|
| +/// This embedded global is used for natives.
|
| +// TODO(floitsch): should we rename this variable to avoid confusion with
|
| +// [INTERCEPTORS_BY_TAG] and [LEAF_TAGS].
|
| const ISOLATE_TAG = 'isolateTag';
|
| +
|
| +/// This embedded global (a function) returns the isolate-specific dispatch-tag
|
| +/// that is used to accelerate interceptor calls.
|
| +const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
|
| +
|
| +/// An embedded global that maps a [Type] to the [Interceptor] and constructors
|
| +/// for that type.
|
| +///
|
| +/// More documentation can be found in the interceptors library (close to its
|
| +/// use).
|
| +const TYPE_TO_INTERCEPTOR_MAP = "typeToInterceptorMap";
|
| +
|
| +/// The current script's URI when the program was loaded.
|
| +///
|
| +/// This embedded global is set at startup, just before invoking `main`.
|
| const CURRENT_SCRIPT = 'currentScript';
|
| +
|
| +/// Returns a function that creates a new Isolate (its static state).
|
| +///
|
| +/// (floitsch): Note that this embedded global will probably go away, since one
|
| +/// JS heap will only contain one Dart isolate.
|
| +const CREATE_NEW_ISOLATE = 'createNewIsolate';
|
| +
|
| +/// Returns a class-id of the given instance.
|
| +///
|
| +/// The extracted id can be used to built a new instance of the same type
|
| +/// (see [INSTANCE_FROM_CLASS_ID].
|
| +///
|
| +/// This embedded global is used for serialization in the isolate-library.
|
| +const CLASS_ID_EXTRACTOR = 'classIdExtractor';
|
| +
|
| +/// Returns an empty instance of the given class-id.
|
| +///
|
| +/// Given a class-id (see [CLASS_ID_EXTRACTOR]) returns an empty instance.
|
| +///
|
| +/// This embedded global is used for deserialization in the isolate-library.
|
| +const INSTANCE_FROM_CLASS_ID = "instanceFromClassId";
|
| +
|
| +/// Returns a list of (mangled) field names for the given instance.
|
| +///
|
| +/// The list of fields can be used to extract the instance's values and then
|
| +/// initialize an empty instance (see [INITIALIZE_EMPTY_INSTANCE].
|
| +///
|
| +/// This embedded global is used for serialization in the isolate-library.
|
| +const CLASS_FIELDS_EXTRACTOR = 'classFieldsExtractor';
|
| +
|
| +/// Initializes the given empty instance with the given fields.
|
| +///
|
| +/// The given fields are in an array and must be in the same order as the
|
| +/// field-names obtained by [CLASS_FIELDS_EXTRACTOR].
|
| +///
|
| +/// This embedded global is used for deserialization in the isolate-library.
|
| +const INITIALIZE_EMPTY_INSTANCE = "initializeEmptyInstance";
|
| +
|
| +/// Returns a map from load-ids to URIs.
|
| +///
|
| +/// To load the deferred library that is represented by the load-id, the runtime
|
| +/// must load all associated URIs.
|
| +///
|
| +/// This embedded global is only used for deferred loading.
|
| const DEFERRED_LIBRARY_URIS = 'deferredLibraryUris';
|
| +
|
| +/// Returns a map from load-ids to hashes.
|
| +///
|
| +/// The hashes are associated with the URIs of the load-ids (see
|
| +/// [DEFERRED_LIBRARY_URIS]). They are MD5 (or similar) hashes of the code that
|
| +/// must be loaded. By using cryptographic hashes we can avoid loading similar
|
| +/// code multiple times.
|
| +///
|
| +/// This embedded global is only used for deferred loading.
|
| const DEFERRED_LIBRARY_HASHES = 'deferredLibraryHashes';
|
| +
|
| +/// Initialize a loaded hunk.
|
| +///
|
| +/// Once a hunk (the code from a deferred URI) has been loaded it must be
|
| +/// initialized. Calling this function with the corresponding hash (see
|
| +/// [DEFERRED_LIBRARY_HASHES]) initializes the code.
|
| +///
|
| +/// This embedded global is only used for deferred loading.
|
| const INITIALIZE_LOADED_HUNK = 'initializeLoadedHunk';
|
| +
|
| +/// Returns, whether a hunk (identified by its hash) has already been loaded.
|
| +///
|
| +/// This embedded global is only used for deferred loading.
|
| const IS_HUNK_LOADED = 'isHunkLoaded';
|
| +
|
| +/// Returns, whether a hunk (identified by its hash) has already been
|
| +/// initialized.
|
| +///
|
| +/// This embedded global is only used for deferred loading.
|
| const IS_HUNK_INITIALIZED = 'isHunkInitialized';
|
| +
|
| +/// A set (implemented as map to booleans) of hunks (identified by hashes) that
|
| +/// have already been initialized.
|
| +///
|
| +/// This embedded global is only used for deferred loading.
|
| +///
|
| +/// This global is an emitter-internal embedded global, and not used by the
|
| +/// runtime. The constant remains in this file to make sure that other embedded
|
| +/// globals don't clash with it.
|
| const DEFERRED_INITIALIZED = 'deferredInitialized';
|
| +
|
| +
|
| +/// Returns a function that creates all precompiled functions (in particular
|
| +/// constructors).
|
| +///
|
| +/// That is, the function returns the array that the full emitter would
|
| +/// otherwise build dynamically when it finishes all classes.
|
| +///
|
| +/// This constant is only used in CSP mode.
|
| +///
|
| +/// This global is an emitter-internal embedded global, and not used by the
|
| +/// runtime. The constant remains in this file to make sure that other embedded
|
| +/// globals don't clash with it.
|
| const PRECOMPILED = 'precompiled';
|
|
|
| -/// The name of the embedded global for metadata.
|
| +/// An emitter-internal embedded global. This global is not used by the runtime.
|
| ///
|
| -/// Use [JsBuiltin.getMetadata] instead of directly accessing this embedded
|
| -/// global.
|
| -const METADATA = 'metadata';
|
| +/// The constant remains in this file to make sure that other embedded globals
|
| +/// don't clash with it.
|
| +const FINISHED_CLASSES = 'finishedClasses';
|
|
|
| -/// A list of types used in the program e.g. for reflection or encoding of
|
| -/// function types.
|
| +
|
| +/// A JavaScript object literal that maps the (minified) JavaScript constructor
|
| +/// name (as given by [JsBuiltin.rawRtiToJsConstructorName] to the
|
| +/// JavaScript constructor.
|
| ///
|
| -/// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
|
| -const TYPES = 'types';
|
| +/// This embedded global is only used by reflection.
|
| +const ALL_CLASSES = 'allClasses';
|
|
|
| -/// Returns a function that creates a new Isolate (its static state).
|
| +/// A map from element to type information.
|
| ///
|
| -/// (floitsch): Note that this will probably go away, since one JS heap will
|
| -/// only contain one Dart isolate.
|
| -const CREATE_NEW_ISOLATE = 'createNewIsolate';
|
| +/// This embedded global is only used by reflection.
|
| +const TYPE_INFORMATION = 'typeInformation';
|
|
|
| -const CLASS_ID_EXTRACTOR = 'classIdExtractor';
|
| -const CLASS_FIELDS_EXTRACTOR = 'classFieldsExtractor';
|
| -const INSTANCE_FROM_CLASS_ID = "instanceFromClassId";
|
| -const INITIALIZE_EMPTY_INSTANCE = "initializeEmptyInstance";
|
| -const TYPEDEF_TYPE_PROPERTY_NAME = r"$typedefType";
|
| -const TYPEDEF_PREDICATE_PROPERTY_NAME = r"$$isTypedef";
|
| -const NATIVE_SUPERCLASS_TAG_NAME = r"$nativeSuperclassTag";
|
| +/// A map from statics to their descriptors.
|
| +///
|
| +/// This embedded global is only used by reflection.
|
| +const STATICS = 'statics';
|
|
|
| -/// Returns the type given the name of a class.
|
| -/// This function is called by the runtime when computing rti.
|
| -const GET_TYPE_FROM_NAME = 'getTypeFromName';
|
| -const TYPE_TO_INTERCEPTOR_MAP = "typeToInterceptorMap";
|
| +/// An array of library descriptors.
|
| +///
|
| +/// The descriptor contains information such as name, uri, classes, ...
|
| +///
|
| +/// This embedded global is only used by reflection.
|
| +const LIBRARIES = 'libraries';
|
| +
|
| +/// A map from lazy statics to their initializers.
|
| +///
|
| +/// This embedded global is only used by reflection.
|
| +const LAZIES = 'lazies';
|
|
|
| /// Names that are supported by [JS_GET_NAME].
|
| // TODO(herhut): Make entries lower case (as in fields) and find a better name.
|
|
|