| Index: tool/input_sdk/private/rtti.dart
|
| diff --git a/tool/input_sdk/private/rtti.dart b/tool/input_sdk/private/rtti.dart
|
| deleted file mode 100644
|
| index b0b65876a254beb75b85cbccb8b022ae5d547c54..0000000000000000000000000000000000000000
|
| --- a/tool/input_sdk/private/rtti.dart
|
| +++ /dev/null
|
| @@ -1,176 +0,0 @@
|
| -// Copyright (c) 2015, 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.
|
| -
|
| -/// This library defines the association between runtime objects and
|
| -/// runtime types.
|
| -part of dart._runtime;
|
| -
|
| -///
|
| -/// Runtime type information. This module defines the mapping from
|
| -/// runtime objects to their runtime type information. See the types
|
| -/// module for the definition of how type information is represented.
|
| -///
|
| -/// Runtime objects fall into four main categories:
|
| -///
|
| -/// - Things represented by javascript primitives, such as
|
| -/// null, numbers, booleans, strings, and symbols. For these
|
| -/// we map directly from the javascript type (given by typeof)
|
| -/// to the appropriate class type from core, which serves as their
|
| -/// rtti.
|
| -///
|
| -/// - Functions, which are represented by javascript functions.
|
| -/// Representations of Dart functions always have a
|
| -/// _runtimeType property attached to them with the appropriate
|
| -/// rtti.
|
| -///
|
| -/// - Objects (instances) which are represented by instances of
|
| -/// javascript (ES6) classes. Their types are given by their
|
| -/// classes, and the rtti is accessed by projecting out their
|
| -/// constructor field.
|
| -///
|
| -/// - Types objects, which are represented as described in the types
|
| -/// module. Types always have a _runtimeType property attached to
|
| -/// them with the appropriate rtti. The rtti for these is always
|
| -/// core.Type. TODO(leafp): consider the possibility that we can
|
| -/// reliably recognize type objects and map directly to core.Type
|
| -/// rather than attaching this property everywhere.
|
| -///
|
| -///
|
| -
|
| -///
|
| -///Tag a closure with a type, using one of three forms:
|
| -/// dart.fn(cls) marks cls has having no optional or named
|
| -/// parameters, with all argument and return types as dynamic
|
| -/// dart.fn(cls, func) marks cls with the lazily computed
|
| -/// runtime type as computed by func()
|
| -/// dart.fn(cls, rType, argsT, extras) marks cls as having the
|
| -/// runtime type dart.functionType(rType, argsT, extras)
|
| -///
|
| -/// Note that since we are producing a type for a concrete function,
|
| -/// it is sound to use the definite arrow type.
|
| -///
|
| -fn(closure, @rest args) => JS('', '''(() => {
|
| - // Closure and a lazy type constructor
|
| - if ($args.length == 1) {
|
| - $defineLazyProperty($closure, $_runtimeType, {get : $args[0]});
|
| - return $closure;
|
| - }
|
| - let t;
|
| - if ($args.length == 0) {
|
| - // No type arguments, it's all dynamic
|
| - t = $definiteFunctionType(
|
| - $dynamicR, Array($closure.length).fill($dynamicR));
|
| - } else {
|
| - // We're passed the piecewise components of the function type,
|
| - // construct it.
|
| - t = $definiteFunctionType.apply(null, $args);
|
| - }
|
| - tag($closure, t);
|
| - return $closure;
|
| -})()''');
|
| -
|
| -// TODO(vsm): How should we encode the runtime type?
|
| -final _runtimeType = JS('', 'Symbol("_runtimeType")');
|
| -
|
| -checkPrimitiveType(obj) => JS('', '''(() => {
|
| - switch (typeof $obj) {
|
| - case "undefined":
|
| - return $Null;
|
| - case "number":
|
| - return Math.floor($obj) == $obj ? $int : $double;
|
| - case "boolean":
|
| - return $bool;
|
| - case "string":
|
| - return $String;
|
| - case "symbol":
|
| - return Symbol;
|
| - }
|
| - // Undefined is handled above. For historical reasons,
|
| - // typeof null == "object" in JS.
|
| - if ($obj === null) return $Null;
|
| - return null;
|
| -})()''');
|
| -
|
| -runtimeType(obj) => JS('', '''(() => {
|
| - // Lookup primitive (int/double/string)
|
| - let result = $checkPrimitiveType($obj);
|
| - if (result !== null) return result;
|
| -
|
| - // Lookup recorded type
|
| - result = $obj.runtimeType;
|
| - if (result) return result;
|
| -
|
| - return $_nonPrimitiveRuntimeType(obj);
|
| -})()''');
|
| -
|
| -getFunctionType(obj) => JS('', '''(() => {
|
| - // TODO(vsm): Encode this properly on the function for Dart-generated code.
|
| - let args = Array($obj.length).fill($dynamicR);
|
| - return $definiteFunctionType($bottom, args);
|
| -})()''');
|
| -
|
| -///
|
| -/// Returns the runtime type of obj. This is the same as `obj.realRuntimeType`
|
| -/// but will not call an overridden getter.
|
| -///
|
| -/// Currently this will return null for non-Dart objects.
|
| -///
|
| -realRuntimeType(obj) => JS('', '''(() => {
|
| - // Lookup primitive type
|
| - let result = $checkPrimitiveType($obj);
|
| - if (result !== null) return result;
|
| -
|
| - return $_nonPrimitiveRuntimeType(obj);
|
| -})()''');
|
| -
|
| -_nonPrimitiveRuntimeType(obj) => JS('', '''(() => {
|
| - // Lookup recorded *real* type (not user definable runtimeType)
|
| - // TODO(vsm): Should we treat Dart and JS objects differently here?
|
| - // E.g., we can check if obj instanceof core.Object to differentiate.
|
| - let result = $obj[$_runtimeType];
|
| - if (result) return result;
|
| -
|
| - // Lookup extension type
|
| - result = $obj[$_extensionType];
|
| - if (result) return result;
|
| -
|
| - // Fallback on constructor for class types
|
| - result = $obj.constructor;
|
| - if (result == Function) {
|
| - // An undecorated Function should have come from
|
| - // JavaScript. Treat as untyped.
|
| - return $jsobject;
|
| - }
|
| - return result;
|
| -})()''');
|
| -
|
| -LazyTagged(infoFn) => JS('', '''(() => {
|
| - class _Tagged {
|
| - get [$_runtimeType]() {return $infoFn();}
|
| - }
|
| - return _Tagged;
|
| -})()''');
|
| -
|
| -read(value) => JS('', '''(() => {
|
| - return $value[$_runtimeType];
|
| -})()''');
|
| -
|
| -tag(value, info) => JS('', '''(() => {
|
| - $value[$_runtimeType] = $info;
|
| -})()''');
|
| -
|
| -tagComputed(value, compute) => JS('', '''(() => {
|
| - $defineProperty($value, $_runtimeType, { get: $compute });
|
| -})()''');
|
| -
|
| -tagMemoized(value, compute) => JS('', '''(() => {
|
| - let cache = null;
|
| - function getter() {
|
| - if ($compute == null) return cache;
|
| - cache = $compute();
|
| - $compute = null;
|
| - return cache;
|
| - }
|
| - $tagComputed($value, getter);
|
| -})()''');
|
|
|