[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>
This commit is contained in:
committed by
Commit Bot
parent
d18798a6de
commit
444982f364
@@ -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';
|
||||
}
|
||||
Reference in New Issue
Block a user