Index: lib/runtime/dart/_runtime.js |
diff --git a/lib/runtime/dart/_runtime.js b/lib/runtime/dart/_runtime.js |
index 506049d5e5d8deb63a95577feb2df4c2553fbf77..97e39946de2dc4c2e610dec147d1cc828c4974ae 100644 |
--- a/lib/runtime/dart/_runtime.js |
+++ b/lib/runtime/dart/_runtime.js |
@@ -1,122 +1,1303 @@ |
-// 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. |
- |
dart_library.library('dart/_runtime', null, /* Imports */[ |
- 'dart/_utils', |
- 'dart/_classes', |
- 'dart/_errors', |
- 'dart/_generators', |
- 'dart/_operations', |
- 'dart/_rtti', |
- 'dart/_types', |
-], /* Lazy Imports */[ |
- 'dart/_js_helper' |
-], function(exports, dart_utils, classes, errors, generators, operations, rtti, types, |
- _js_helper) { |
+], /* Lazy imports */[ |
+ 'dart/core', |
+ 'dart/_interceptors', |
+ 'dart/_js_helper', |
+ 'dart/async', |
+ 'dart/collection' |
+], function(exports, core, _interceptors, _js_helper, async$, collection) { |
'use strict'; |
- |
- function _export(value) { |
- if (value) return value; |
- console.log("Re-exporting null field: " + name); |
- throw "Bad export"; |
+ function mixin(base, ...mixins) { |
+ class Mixin extends base { |
+ [base.name](...args) { |
+ for (let i = mixins.length - 1; i >= 0; i--) { |
+ let mixin = mixins[i]; |
+ let init = mixin.prototype[mixin.name]; |
+ if (init) init.call(this); |
+ } |
+ let init = base.prototype[base.name]; |
+ if (init) init.apply(this, args); |
+ } |
+ } |
+ for (let m of mixins) { |
+ copyProperties(Mixin.prototype, m.prototype); |
+ } |
+ setSignature(Mixin, { |
+ methods: () => { |
+ let s = {}; |
+ for (let m of mixins) { |
+ copyProperties(s, m[_methodSig]); |
+ } |
+ return s; |
+ } |
+ }); |
+ Mixin[_mixins] = mixins; |
+ return Mixin; |
} |
- |
- function exportFrom(value, names) { |
+ function getMixins(clazz) { |
+ return clazz[_mixins]; |
+ } |
+ function getImplements(clazz) { |
+ return clazz[implements$]; |
+ } |
+ const _typeArguments = Symbol("typeArguments"); |
+ const _originalDeclaration = Symbol("originalDeclaration"); |
+ function generic(typeConstructor) { |
+ let length = typeConstructor.length; |
+ if (length < 1) { |
+ throwInternalError('must have at least one generic type argument'); |
+ } |
+ let resultMap = new Map(); |
+ function makeGenericType(...args) { |
+ if (args.length != length && args.length != 0) { |
+ throwInternalError('requires ' + length + ' or 0 type arguments'); |
+ } |
+ while (args.length < length) |
+ args.push(dynamic); |
+ let value = resultMap; |
+ for (let i = 0; i < length; i++) { |
+ let arg = args[i]; |
+ if (arg == null) { |
+ throwInternalError('type arguments should not be null: ' + typeConstructor); |
+ } |
+ let map = value; |
+ value = map.get(arg); |
+ if (value === void 0) { |
+ if (i + 1 == length) { |
+ value = typeConstructor.apply(null, args); |
+ if (value) { |
+ value[_typeArguments] = args; |
+ value[_originalDeclaration] = makeGenericType; |
+ } |
+ } else { |
+ value = new Map(); |
+ } |
+ map.set(arg, value); |
+ } |
+ } |
+ return value; |
+ } |
+ return makeGenericType; |
+ } |
+ function getGenericClass(type) { |
+ return safeGetOwnProperty(type, _originalDeclaration); |
+ } |
+ function getGenericArgs(type) { |
+ return safeGetOwnProperty(type, _typeArguments); |
+ } |
+ const _constructorSig = Symbol("sigCtor"); |
+ const _methodSig = Symbol("sig"); |
+ const _staticSig = Symbol("sigStatic"); |
+ function getMethodType(obj, name) { |
+ if (obj === void 0) return void 0; |
+ if (obj == null) return void 0; |
+ let sigObj = obj.__proto__.constructor[_methodSig]; |
+ if (sigObj === void 0) return void 0; |
+ let parts = sigObj[name]; |
+ if (parts === void 0) return void 0; |
+ return definiteFunctionType.apply(null, parts); |
+ } |
+ function classGetConstructorType(cls, name) { |
+ if (!name) name = cls.name; |
+ if (cls === void 0) return void 0; |
+ if (cls == null) return void 0; |
+ let sigCtor = cls[_constructorSig]; |
+ if (sigCtor === void 0) return void 0; |
+ let parts = sigCtor[name]; |
+ if (parts === void 0) return void 0; |
+ return definiteFunctionType.apply(null, parts); |
+ } |
+ function bind(obj, name, f) { |
+ if (f === void 0) f = obj[name]; |
+ f = f.bind(obj); |
+ let sig = getMethodType(obj, name); |
+ assert(sig); |
+ tag(f, sig); |
+ return f; |
+ } |
+ function _setMethodSignature(f, sigF) { |
+ defineMemoizedGetter(f, _methodSig, () => { |
+ let sigObj = sigF(); |
+ sigObj.__proto__ = f.__proto__[_methodSig]; |
+ return sigObj; |
+ }); |
+ } |
+ function _setConstructorSignature(f, sigF) { |
+ return defineMemoizedGetter(f, _constructorSig, sigF); |
+ } |
+ function _setStaticSignature(f, sigF) { |
+ return defineMemoizedGetter(f, _staticSig, sigF); |
+ } |
+ function _setStaticTypes(f, names) { |
for (let name of names) { |
- exports[name] = _export(value[name]); |
+ tagMemoized(f[name], function() { |
+ let parts = f[_staticSig][name]; |
+ return definiteFunctionType.apply(null, parts); |
+ }); |
} |
} |
+ function setSignature(f, signature) { |
+ let constructors = 'constructors' in signature ? signature.constructors : () => ({}); |
+ let methods = 'methods' in signature ? signature.methods : () => ({}); |
+ let statics = 'statics' in signature ? signature.statics : () => ({}); |
+ let names = 'names' in signature ? signature.names : []; |
+ _setConstructorSignature(f, constructors); |
+ _setMethodSignature(f, methods); |
+ _setStaticSignature(f, statics); |
+ _setStaticTypes(f, names); |
+ tagMemoized(f, () => core.Type); |
+ } |
+ function hasMethod(obj, name) { |
+ return getMethodType(obj, name) !== void 0; |
+ } |
+ function virtualField(subclass, fieldName) { |
+ let prop = getOwnPropertyDescriptor(subclass.prototype, fieldName); |
+ if (prop) return; |
+ let symbol = Symbol(subclass.name + '.' + fieldName); |
+ defineProperty(subclass.prototype, fieldName, { |
+ get: function() { |
+ return this[symbol]; |
+ }, |
+ set: function(x) { |
+ this[symbol] = x; |
+ } |
+ }); |
+ } |
+ function defineNamedConstructor(clazz, name) { |
+ let proto = clazz.prototype; |
+ let initMethod = proto[name]; |
+ let ctor = function() { |
+ return initMethod.apply(this, arguments); |
+ }; |
+ ctor.prototype = proto; |
+ defineProperty(clazz, name, {value: ctor, configurable: true}); |
+ } |
+ const _extensionType = Symbol("extensionType"); |
+ const dartx = {}; |
+ function getExtensionSymbol(name) { |
+ let sym = dartx[name]; |
+ if (!sym) dartx[name] = sym = Symbol('dartx.' + name); |
+ return sym; |
+ } |
+ function defineExtensionNames(names) { |
+ return names.forEach(getExtensionSymbol); |
+ } |
+ function registerExtension(jsType, dartExtType) { |
+ let extProto = dartExtType.prototype; |
+ let jsProto = jsType.prototype; |
+ assert(jsProto[_extensionType] === void 0); |
+ jsProto[_extensionType] = extProto; |
+ let dartObjProto = core.Object.prototype; |
+ while (extProto !== dartObjProto && extProto !== jsProto) { |
+ copyTheseProperties(jsProto, extProto, getOwnPropertySymbols(extProto)); |
+ extProto = extProto.__proto__; |
+ } |
+ let originalSigFn = getOwnPropertyDescriptor(dartExtType, _methodSig).get; |
+ assert(originalSigFn); |
+ defineMemoizedGetter(jsType, _methodSig, originalSigFn); |
+ } |
+ function defineExtensionMembers(type, methodNames) { |
+ let proto = type.prototype; |
+ for (let name of methodNames) { |
+ let method = getOwnPropertyDescriptor(proto, name); |
+ defineProperty(proto, getExtensionSymbol(name), method); |
+ } |
+ let originalSigFn = getOwnPropertyDescriptor(type, _methodSig).get; |
+ defineMemoizedGetter(type, _methodSig, function() { |
+ let sig = originalSigFn(); |
+ for (let name of methodNames) { |
+ sig[getExtensionSymbol(name)] = sig[name]; |
+ } |
+ return sig; |
+ }); |
+ } |
+ function canonicalMember(obj, name) { |
+ if (obj != null && obj[_extensionType]) return dartx[name]; |
+ if (name == 'constructor' || name == 'prototype') { |
+ name = '+' + name; |
+ } |
+ return name; |
+ } |
+ function setType(obj, type) { |
+ obj.__proto__ = type.prototype; |
+ return obj; |
+ } |
+ function list(obj, elementType) { |
+ return setType(obj, getGenericClass(_interceptors.JSArray)(elementType)); |
+ } |
+ function setBaseClass(derived, base) { |
+ derived.prototype.__proto__ = base.prototype; |
+ } |
+ function throwCastError(actual, type) { |
+ throw$(new _js_helper.CastErrorImplementation(actual, type)); |
+ } |
+ function throwAssertionError() { |
+ throw$(new core.AssertionError()); |
+ } |
+ function throwNullValueError() { |
+ throw$(new core.NoSuchMethodError(null, new core.Symbol('<Unexpected Null Value>'), null, null, null)); |
+ } |
+ const _jsIterator = Symbol("_jsIterator"); |
+ const _current = Symbol("_current"); |
+ function syncStar(gen, E, ...args) { |
+ const SyncIterable_E = getGenericClass(_js_helper.SyncIterable)(E); |
+ return new SyncIterable_E(gen, args); |
+ } |
+ function async(gen, T, ...args) { |
+ let iter; |
+ function onValue(res) { |
+ if (res === void 0) res = null; |
+ return next(iter.next(res)); |
+ } |
+ function onError(err) { |
+ return next(iter.throw(err)); |
+ } |
+ function next(ret) { |
+ if (ret.done) return ret.value; |
+ let future = ret.value; |
+ if (!instanceOf(future, getGenericClass(async$.Future))) { |
+ future = async$.Future.value(future); |
+ } |
+ return future.then(onValue, {onError: onError}); |
+ } |
+ return getGenericClass(async$.Future)(T).new(function() { |
+ iter = gen(...args)[Symbol.iterator](); |
+ return onValue(); |
+ }); |
+ } |
+ const _AsyncStarStreamController = class _AsyncStarStreamController { |
+ constructor(generator, T, args) { |
+ this.isAdding = false; |
+ this.isWaiting = false; |
+ this.isScheduled = false; |
+ this.isSuspendedAtYield = false; |
+ this.canceler = null; |
+ this.iterator = generator(this, ...args)[Symbol.iterator](); |
+ this.controller = getGenericClass(async$.StreamController)(T).new({ |
+ onListen: (() => this.scheduleGenerator()).bind(this), |
+ onResume: (() => this.onResume()).bind(this), |
+ onCancel: (() => this.onCancel()).bind(this) |
+ }); |
+ } |
+ onResume() { |
+ if (this.isSuspendedAtYield) { |
+ this.scheduleGenerator(); |
+ } |
+ } |
+ onCancel() { |
+ if (this.controller.isClosed) { |
+ return null; |
+ } |
+ if (this.canceler == null) { |
+ this.canceler = async$.Completer.new(); |
+ this.scheduleGenerator(); |
+ } |
+ return this.canceler.future; |
+ } |
+ close() { |
+ if (this.canceler != null && !this.canceler.isCompleted) { |
+ this.canceler.complete(); |
+ } |
+ this.controller.close(); |
+ } |
+ scheduleGenerator() { |
+ if (this.isScheduled || this.controller.isPaused || this.isAdding || this.isWaiting) { |
+ return; |
+ } |
+ this.isScheduled = true; |
+ async$.scheduleMicrotask((() => this.runBody()).bind(this)); |
+ } |
+ runBody(opt_awaitValue) { |
+ this.isScheduled = false; |
+ this.isSuspendedAtYield = false; |
+ this.isWaiting = false; |
+ let iter; |
+ try { |
+ iter = this.iterator.next(opt_awaitValue); |
+ } catch (e) { |
+ this.addError(e, stackTrace(e)); |
+ this.close(); |
+ return; |
+ } |
- exports.global = typeof window == "undefined" ? global : window; |
- exports.JsSymbol = _export(Symbol); |
- |
- // TODO(vsm): This is referenced (as init.globalState) from |
- // isolate_helper.dart. Where should it go? |
- // See: https://github.com/dart-lang/dev_compiler/issues/164 |
- exports.globalState = null; |
- _js_helper.checkNum = operations.notNull; |
- |
- // Re-exports |
- |
- // From classes |
- exportFrom(classes, [ |
- 'bind', |
- 'classGetConstructorType', |
- 'dartx', |
- 'defineNamedConstructor', |
- 'defineExtensionNames', |
- 'defineExtensionMembers', |
- 'generic', |
- 'implements', |
- 'list', |
- 'metadata', |
- 'mixin', |
- 'registerExtension', |
- 'setBaseClass', |
- 'setSignature', |
- 'virtualField' |
- ]); |
- |
- exportFrom(generators, [ |
- 'syncStar', |
- 'async', |
- 'asyncStar' |
- ]); |
- |
- // From dart_utils |
- exportFrom(dart_utils, ['copyProperties', 'export_']); |
- // Renames |
- exports.defineLazyClass = _export(dart_utils.defineLazy); |
- exports.defineLazyProperties = _export(dart_utils.defineLazy); |
- exports.defineLazyClassGeneric = _export(dart_utils.defineLazyProperty); |
- |
- // From operations |
- exportFrom(operations, [ |
- 'JsIterator', |
- 'arity', |
- 'asInt', |
- 'assert', |
- 'const', |
- 'dcall', |
- 'dindex', |
- 'dload', |
- 'dput', |
- 'dsend', |
- 'dsetindex', |
- 'equals', |
- 'hashCode', |
- 'map', |
- 'noSuchMethod', |
- 'notNull', |
- 'nullSafe', |
- 'stackPrint', |
- 'stackTrace', |
- 'strongInstanceOf', |
- 'throw', |
- 'toString', |
- ]) |
- // Renames |
- exports.as = _export(operations.cast); |
- exports.is = _export(operations.instanceOf); |
- |
- // From types |
- exportFrom(types, [ |
- 'bottom', |
- 'definiteFunctionType', |
- 'dynamic', |
- 'functionType', |
- 'jsobject', |
- 'typedef', |
- 'typeName', |
- 'void', |
- ]); |
- |
- // From rtti |
- exportFrom(rtti, [ |
- 'fn', |
- 'realRuntimeType', |
- 'runtimeType', |
- ]); |
+ if (iter.done) { |
+ this.close(); |
+ return; |
+ } |
+ if (this.isSuspendedAtYield || this.isAdding) return; |
+ this.isWaiting = true; |
+ let future = iter.value; |
+ if (!instanceOf(future, getGenericClass(async$.Future))) { |
+ future = async$.Future.value(future); |
+ } |
+ return future.then((x => this.runBody(x)).bind(this), { |
+ onError: ((e, s) => this.throwError(e, s)).bind(this) |
+ }); |
+ } |
+ add(event) { |
+ if (!this.controller.hasListener) return true; |
+ this.controller.add(event); |
+ this.scheduleGenerator(); |
+ this.isSuspendedAtYield = true; |
+ return false; |
+ } |
+ addStream(stream) { |
+ if (!this.controller.hasListener) return true; |
+ this.isAdding = true; |
+ this.controller.addStream(stream, {cancelOnError: false}).then((() => { |
+ this.isAdding = false; |
+ this.scheduleGenerator(); |
+ }).bind(this), { |
+ onError: ((e, s) => this.throwError(e, s)).bind(this) |
+ }); |
+ } |
+ throwError(error, stackTrace) { |
+ try { |
+ this.iterator.throw(error); |
+ } catch (e) { |
+ this.addError(e, stackTrace); |
+ } |
+ } |
+ addError(error, stackTrace) { |
+ if (this.canceler != null && !this.canceler.isCompleted) { |
+ this.canceler.completeError(error, stackTrace); |
+ return; |
+ } |
+ if (!this.controller.hasListener) return; |
+ this.controller.addError(error, stackTrace); |
+ } |
+ }; |
+ function asyncStar(gen, T, ...args) { |
+ return new _AsyncStarStreamController(gen, T, args).controller.stream; |
+ } |
+ function _canonicalFieldName(obj, name, args, displayName) { |
+ name = canonicalMember(obj, name); |
+ if (name) return name; |
+ throwNoSuchMethodFunc(obj, displayName, args); |
+ } |
+ function dload(obj, field) { |
+ field = _canonicalFieldName(obj, field, [], field); |
+ if (hasMethod(obj, field)) { |
+ return bind(obj, field); |
+ } |
+ let result = obj[field]; |
+ return result; |
+ } |
+ function dput(obj, field, value) { |
+ field = _canonicalFieldName(obj, field, [value], field); |
+ obj[field] = value; |
+ return value; |
+ } |
+ function checkApply(type, actuals) { |
+ if (actuals.length < type.args.length) return false; |
+ let index = 0; |
+ for (let i = 0; i < type.args.length; ++i) { |
+ if (!instanceOfOrNull(actuals[i], type.args[i])) return false; |
+ ++index; |
+ } |
+ if (actuals.length == type.args.length) return true; |
+ let extras = actuals.length - type.args.length; |
+ if (type.optionals.length > 0) { |
+ if (extras > type.optionals.length) return false; |
+ for (let i = 0, j = index; i < extras; ++i, ++j) { |
+ if (!instanceOfOrNull(actuals[j], type.optionals[i])) return false; |
+ } |
+ return true; |
+ } |
+ if (extras != 1) return false; |
+ if (getOwnPropertyNames(type.named).length == 0) return false; |
+ let opts = actuals[index]; |
+ let names = getOwnPropertyNames(opts); |
+ if (names.length == 0) return false; |
+ for (var name of names) { |
+ if (!hasOwnProperty.call(type.named, name)) { |
+ return false; |
+ } |
+ if (!instanceOfOrNull(opts[name], type.named[name])) return false; |
+ } |
+ return true; |
+ } |
+ function throwNoSuchMethod(obj, name, pArgs, nArgs, extras) { |
+ throw$(new core.NoSuchMethodError(obj, name, pArgs, nArgs, extras)); |
+ } |
+ function throwNoSuchMethodFunc(obj, name, pArgs, opt_func) { |
+ if (obj === void 0) obj = opt_func; |
+ throwNoSuchMethod(obj, name, pArgs); |
+ } |
+ function checkAndCall(f, ftype, obj, args, name) { |
+ let originalFunction = f; |
+ if (!(f instanceof Function)) { |
+ if (f != null) { |
+ ftype = getMethodType(f, 'call'); |
+ f = f.call; |
+ } |
+ if (!(f instanceof Function)) { |
+ throwNoSuchMethodFunc(obj, name, args, originalFunction); |
+ } |
+ } |
+ if (ftype === void 0) { |
+ ftype = read(f); |
+ } |
+ if (!ftype) { |
+ return f.apply(obj, args); |
+ } |
+ if (checkApply(ftype, args)) { |
+ return f.apply(obj, args); |
+ } |
+ throwNoSuchMethodFunc(obj, name, args, originalFunction); |
+ } |
+ function dcall(f, ...args) { |
+ let ftype = read(f); |
+ return checkAndCall(f, ftype, void 0, args, 'call'); |
+ } |
+ function callMethod(obj, name, args, displayName) { |
+ let symbol = _canonicalFieldName(obj, name, args, displayName); |
+ let f = obj != null ? obj[symbol] : null; |
+ let ftype = getMethodType(obj, name); |
+ return checkAndCall(f, ftype, obj, args, displayName); |
+ } |
+ function dsend(obj, method, ...args) { |
+ return callMethod(obj, method, args, method); |
+ } |
+ function dindex(obj, index) { |
+ return callMethod(obj, 'get', [index], '[]'); |
+ } |
+ function dsetindex(obj, index, value) { |
+ callMethod(obj, 'set', [index, value], '[]='); |
+ return value; |
+ } |
+ function _ignoreTypeFailure(actual, type) { |
+ if (isSubtype(type, core.Iterable) && isSubtype(actual, core.Iterable) || isSubtype(type, async$.Future) && isSubtype(actual, async$.Future) || isSubtype(type, core.Map) && isSubtype(actual, core.Map) || isSubtype(type, core.Function) && isSubtype(actual, core.Function) || isSubtype(type, async$.Stream) && isSubtype(actual, async$.Stream) || isSubtype(type, async$.StreamSubscription) && isSubtype(actual, async$.StreamSubscription)) { |
+ console.warn('Ignoring cast fail from ' + typeName(actual) + ' to ' + typeName(type)); |
+ return true; |
+ } |
+ return false; |
+ } |
+ function strongInstanceOf(obj, type, ignoreFromWhiteList) { |
+ let actual = realRuntimeType(obj); |
+ if (isSubtype(actual, type) || actual == jsobject) return true; |
+ if (ignoreFromWhiteList == void 0) return false; |
+ if (isGroundType(type)) return false; |
+ if (_ignoreTypeFailure(actual, type)) return true; |
+ return false; |
+ } |
+ function instanceOfOrNull(obj, type) { |
+ if (obj == null || strongInstanceOf(obj, type, true)) return true; |
+ return false; |
+ } |
+ function instanceOf(obj, type) { |
+ if (strongInstanceOf(obj, type)) return true; |
+ if (isGroundType(type)) return false; |
+ let actual = realRuntimeType(obj); |
+ throwStrongModeError('Strong mode is check failure: ' + typeName(actual) + ' does not soundly subtype ' + typeName(type)); |
+ } |
+ function cast(obj, type) { |
+ if (instanceOfOrNull(obj, type)) return obj; |
+ let actual = realRuntimeType(obj); |
+ if (isGroundType(type)) throwCastError(actual, type); |
+ if (_ignoreTypeFailure(actual, type)) return obj; |
+ throwStrongModeError('Strong mode cast failure from ' + typeName(actual) + ' to ' + typeName(type)); |
+ } |
+ function asInt(obj) { |
+ if (obj == null) { |
+ return null; |
+ } |
+ if (Math.floor(obj) != obj) { |
+ throwCastError(realRuntimeType(obj), core.int); |
+ } |
+ return obj; |
+ } |
+ function arity(f) { |
+ return {min: f.length, max: f.length}; |
+ } |
+ function equals(x, y) { |
+ if (x == null || y == null) return x == y; |
+ let eq = x['==']; |
+ return eq ? eq.call(x, y) : x === y; |
+ } |
+ function notNull(x) { |
+ if (x == null) throwNullValueError(); |
+ return x; |
+ } |
+ function map(values) { |
+ let map = collection.LinkedHashMap.new(); |
+ if (Array.isArray(values)) { |
+ for (let i = 0, end = values.length - 1; i < end; i += 2) { |
+ let key = values[i]; |
+ let value = values[i + 1]; |
+ map.set(key, value); |
+ } |
+ } else if (typeof values === 'object') { |
+ for (let key of getOwnPropertyNames(values)) { |
+ map.set(key, values[key]); |
+ } |
+ } |
+ return map; |
+ } |
+ function assert(condition) { |
+ if (!condition) throwAssertionError(); |
+ } |
+ const _stack = new WeakMap(); |
+ function throw$(obj) { |
+ if (obj != null && (typeof obj == 'object' || typeof obj == 'function')) { |
+ _stack.set(obj, new Error()); |
+ } |
+ throw obj; |
+ } |
+ function getError(exception) { |
+ var stack = _stack.get(exception); |
+ return stack !== void 0 ? stack : exception; |
+ } |
+ function stackPrint(exception) { |
+ var error = getError(exception); |
+ console.log(error.stack ? error.stack : 'No stack trace for: ' + error); |
+ } |
+ function stackTrace(exception) { |
+ var error = getError(exception); |
+ return _js_helper.getTraceFromException(error); |
+ } |
+ function nullSafe(obj, ...callbacks) { |
+ if (obj == null) return obj; |
+ for (const callback of callbacks) { |
+ obj = callback(obj); |
+ if (obj == null) break; |
+ } |
+ return obj; |
+ } |
+ const _value = Symbol("_value"); |
+ function multiKeyPutIfAbsent(map, keys, valueFn) { |
+ for (let k of keys) { |
+ let value = map.get(k); |
+ if (!value) { |
+ map.set(k, value = new Map()); |
+ } |
+ map = value; |
+ } |
+ if (map.has(_value)) return map.get(_value); |
+ let value = valueFn(); |
+ map.set(_value, value); |
+ return value; |
+ } |
+ const constants = new Map(); |
+ function const$(obj) { |
+ let objectKey = [realRuntimeType(obj)]; |
+ for (let name of getOwnNamesAndSymbols(obj)) { |
+ objectKey.push(name); |
+ objectKey.push(obj[name]); |
+ } |
+ return multiKeyPutIfAbsent(constants, objectKey, () => obj); |
+ } |
+ function hashCode(obj) { |
+ if (obj == null) { |
+ return 0; |
+ } |
+ switch (typeof obj) { |
+ case "number": |
+ case "boolean": |
+ { |
+ return obj & 0x1FFFFFFF; |
+ } |
+ case "string": |
+ { |
+ return obj.length; |
+ } |
+ } |
+ return obj.hashCode; |
+ } |
+ function toString(obj) { |
+ if (obj == null) { |
+ return "null"; |
+ } |
+ return obj.toString(); |
+ } |
+ function noSuchMethod(obj, invocation) { |
+ if (obj == null) { |
+ throwNoSuchMethod(obj, invocation.memberName, invocation.positionalArguments, invocation.namedArguments); |
+ } |
+ switch (typeof obj) { |
+ case "number": |
+ case "boolean": |
+ case "string": |
+ { |
+ throwNoSuchMethod(obj, invocation.memberName, invocation.positionalArguments, invocation.namedArguments); |
+ } |
+ } |
+ return obj.noSuchMethod(invocation); |
+ } |
+ const JsIterator = class JsIterator { |
+ constructor(dartIterator) { |
+ this.dartIterator = dartIterator; |
+ } |
+ next() { |
+ let i = this.dartIterator; |
+ let done = !i.moveNext(); |
+ return {done: done, value: done ? void 0 : i.current}; |
+ } |
+ }; |
+ function fn(closure, ...args) { |
+ if (args.length == 1) { |
+ defineLazyProperty(closure, _runtimeType, {get: args[0]}); |
+ return closure; |
+ } |
+ let t; |
+ if (args.length == 0) { |
+ t = definiteFunctionType(dynamic, Array(closure.length).fill(dynamic)); |
+ } else { |
+ t = definiteFunctionType.apply(null, args); |
+ } |
+ tag(closure, t); |
+ return closure; |
+ } |
+ const _runtimeType = Symbol("_runtimeType"); |
+ function checkPrimitiveType(obj) { |
+ switch (typeof obj) { |
+ case "undefined": |
+ { |
+ return core.Null; |
+ } |
+ case "number": |
+ { |
+ return Math.floor(obj) == obj ? core.int : core.double; |
+ } |
+ case "boolean": |
+ { |
+ return core.bool; |
+ } |
+ case "string": |
+ { |
+ return core.String; |
+ } |
+ case "symbol": |
+ { |
+ return Symbol; |
+ } |
+ } |
+ if (obj === null) return core.Null; |
+ return null; |
+ } |
+ function runtimeType(obj) { |
+ let result = checkPrimitiveType(obj); |
+ if (result !== null) return result; |
+ return obj.runtimeType; |
+ } |
+ function getFunctionType(obj) { |
+ let args = Array(obj.length).fill(dynamic); |
+ return definiteFunctionType(bottom, args); |
+ } |
+ function realRuntimeType(obj) { |
+ let result = checkPrimitiveType(obj); |
+ if (result !== null) return result; |
+ result = obj[_runtimeType]; |
+ if (result) return result; |
+ result = obj.constructor; |
+ if (result == Function) { |
+ return jsobject; |
+ } |
+ return result; |
+ } |
+ function LazyTagged(infoFn) { |
+ class _Tagged { |
+ get [_runtimeType]() { |
+ return infoFn(); |
+ } |
+ } |
+ return _Tagged; |
+ } |
+ function read(value) { |
+ return value[_runtimeType]; |
+ } |
+ function tag(value, info) { |
+ value[_runtimeType] = info; |
+ } |
+ function tagComputed(value, compute) { |
+ defineProperty(value, _runtimeType, {get: compute}); |
+ } |
+ function tagMemoized(value, compute) { |
+ let cache = null; |
+ function getter() { |
+ if (compute == null) return cache; |
+ cache = compute(); |
+ compute = null; |
+ return cache; |
+ } |
+ tagComputed(value, getter); |
+ } |
+ const _mixins = Symbol("mixins"); |
+ const implements$ = Symbol("implements"); |
+ const metadata = Symbol("metadata"); |
+ const TypeRep = class TypeRep extends LazyTagged(() => core.Type) { |
+ get name() { |
+ return this.toString(); |
+ } |
+ }; |
+ const Dynamic = class Dynamic extends TypeRep { |
+ toString() { |
+ return "dynamic"; |
+ } |
+ }; |
+ const dynamic = new Dynamic(); |
+ const Void = class Void extends TypeRep { |
+ toString() { |
+ return "void"; |
+ } |
+ }; |
+ const void$ = new Void(); |
+ const Bottom = class Bottom extends TypeRep { |
+ toString() { |
+ return "bottom"; |
+ } |
+ }; |
+ const bottom = new Bottom(); |
+ const JSObject = class JSObject extends TypeRep { |
+ toString() { |
+ return "NativeJavaScriptObject"; |
+ } |
+ }; |
+ const jsobject = new JSObject(); |
+ const AbstractFunctionType = class AbstractFunctionType extends TypeRep { |
+ constructor() { |
+ super(); |
+ this._stringValue = null; |
+ } |
+ toString() { |
+ return this.name; |
+ } |
+ get name() { |
+ if (this._stringValue) return this._stringValue; |
+ let buffer = '('; |
+ for (let i = 0; i < this.args.length; ++i) { |
+ if (i > 0) { |
+ buffer += ', '; |
+ } |
+ buffer += typeName(this.args[i]); |
+ } |
+ if (this.optionals.length > 0) { |
+ if (this.args.length > 0) buffer += ', '; |
+ buffer += '['; |
+ for (let i = 0; i < this.optionals.length; ++i) { |
+ if (i > 0) { |
+ buffer += ', '; |
+ } |
+ buffer += typeName(this.optionals[i]); |
+ } |
+ buffer += ']'; |
+ } else if (Object.keys(this.named).length > 0) { |
+ if (this.args.length > 0) buffer += ', '; |
+ buffer += '{'; |
+ let names = getOwnPropertyNames(this.named).sort(); |
+ for (let i = 0; i < names.length; ++i) { |
+ if (i > 0) { |
+ buffer += ', '; |
+ } |
+ buffer += names[i] + ': ' + typeName(this.named[names[i]]); |
+ } |
+ buffer += '}'; |
+ } |
+ buffer += ') -> ' + typeName(this.returnType); |
+ this._stringValue = buffer; |
+ return buffer; |
+ } |
+ }; |
+ const FunctionType = class FunctionType extends AbstractFunctionType { |
+ constructor(definite, returnType, args, optionals, named) { |
+ super(); |
+ this.definite = definite; |
+ this.returnType = returnType; |
+ this.args = args; |
+ this.optionals = optionals; |
+ this.named = named; |
+ this.metadata = []; |
+ function process(array, metadata) { |
+ var result = []; |
+ for (var i = 0; i < array.length; ++i) { |
+ var arg = array[i]; |
+ if (arg instanceof Array) { |
+ metadata.push(arg.slice(1)); |
+ result.push(arg[0]); |
+ } else { |
+ metadata.push([]); |
+ result.push(arg); |
+ } |
+ } |
+ return result; |
+ } |
+ this.args = process(this.args, this.metadata); |
+ this.optionals = process(this.optionals, this.metadata); |
+ this._canonize(); |
+ } |
+ _canonize() { |
+ if (this.definite) return; |
+ function replace(a) { |
+ return a == dynamic ? bottom : a; |
+ } |
+ this.args = this.args.map(replace); |
+ if (this.optionals.length > 0) { |
+ this.optionals = this.optionals.map(replace); |
+ } |
+ if (Object.keys(this.named).length > 0) { |
+ let r = {}; |
+ for (let name of getOwnPropertyNames(this.named)) { |
+ r[name] = replace(this.named[name]); |
+ } |
+ this.named = r; |
+ } |
+ } |
+ }; |
+ const Typedef = class Typedef extends AbstractFunctionType { |
+ constructor(name, closure) { |
+ super(); |
+ this._name = name; |
+ this._closure = closure; |
+ this._functionType = null; |
+ } |
+ get definite() { |
+ return this._functionType.definite; |
+ } |
+ get name() { |
+ return this._name; |
+ } |
+ get functionType() { |
+ if (!this._functionType) { |
+ this._functionType = this._closure(); |
+ } |
+ return this._functionType; |
+ } |
+ get returnType() { |
+ return this.functionType.returnType; |
+ } |
+ get args() { |
+ return this.functionType.args; |
+ } |
+ get optionals() { |
+ return this.functionType.optionals; |
+ } |
+ get named() { |
+ return this.functionType.named; |
+ } |
+ get metadata() { |
+ return this.functionType.metadata; |
+ } |
+ }; |
+ function _functionType(definite, returnType, args, extra) { |
+ let optionals; |
+ let named; |
+ if (extra === void 0) { |
+ optionals = []; |
+ named = {}; |
+ } else if (extra instanceof Array) { |
+ optionals = extra; |
+ named = {}; |
+ } else { |
+ optionals = []; |
+ named = extra; |
+ } |
+ return new FunctionType(definite, returnType, args, optionals, named); |
+ } |
+ function functionType(returnType, args, extra) { |
+ return _functionType(false, returnType, args, extra); |
+ } |
+ function definiteFunctionType(returnType, args, extra) { |
+ return _functionType(true, returnType, args, extra); |
+ } |
+ function typedef(name, closure) { |
+ return new Typedef(name, closure); |
+ } |
+ function isDartType(type) { |
+ return read(type) === core.Type; |
+ } |
+ function typeName(type) { |
+ if (type instanceof TypeRep) return type.toString(); |
+ let tag = read(type); |
+ if (tag === core.Type) { |
+ let name = type.name; |
+ let args = getGenericArgs(type); |
+ if (args) { |
+ name += '<'; |
+ for (let i = 0; i < args.length; ++i) { |
+ if (i > 0) name += ', '; |
+ name += typeName(args[i]); |
+ } |
+ name += '>'; |
+ } |
+ return name; |
+ } |
+ if (tag) return "Not a type: " + tag.name; |
+ return "JSObject<" + type.name + ">"; |
+ } |
+ function isFunctionType(type) { |
+ return type instanceof AbstractFunctionType || type == core.Function; |
+ } |
+ function isFunctionSubType(ft1, ft2) { |
+ if (ft2 == core.Function) { |
+ return true; |
+ } |
+ let ret1 = ft1.returnType; |
+ let ret2 = ft2.returnType; |
+ if (!isSubtype_(ret1, ret2)) { |
+ if (ret2 != void$) { |
+ return false; |
+ } |
+ } |
+ let args1 = ft1.args; |
+ let args2 = ft2.args; |
+ if (args1.length > args2.length) { |
+ return false; |
+ } |
+ for (let i = 0; i < args1.length; ++i) { |
+ if (!isSubtype_(args2[i], args1[i])) { |
+ return false; |
+ } |
+ } |
+ let optionals1 = ft1.optionals; |
+ let optionals2 = ft2.optionals; |
+ if (args1.length + optionals1.length < args2.length + optionals2.length) { |
+ return false; |
+ } |
+ let j = 0; |
+ for (let i = args1.length; i < args2.length; ++i, ++j) { |
+ if (!isSubtype_(args2[i], optionals1[j])) { |
+ return false; |
+ } |
+ } |
+ for (let i = 0; i < optionals2.length; ++i, ++j) { |
+ if (!isSubtype_(optionals2[i], optionals1[j])) { |
+ return false; |
+ } |
+ } |
+ let named1 = ft1.named; |
+ let named2 = ft2.named; |
+ let names = getOwnPropertyNames(named2); |
+ for (let i = 0; i < names.length; ++i) { |
+ let name = names[i]; |
+ let n1 = named1[name]; |
+ let n2 = named2[name]; |
+ if (n1 === void 0) { |
+ return false; |
+ } |
+ if (!isSubtype_(n2, n1)) { |
+ return false; |
+ } |
+ } |
+ return true; |
+ } |
+ function canonicalType(t) { |
+ if (t === Object) return core.Object; |
+ if (t === Function) return core.Function; |
+ if (t === Array) return core.List; |
+ if (t === String) return core.String; |
+ if (t === Number) return core.double; |
+ if (t === Boolean) return core.bool; |
+ return t; |
+ } |
+ const subtypeMap = new Map(); |
+ function isSubtype(t1, t2) { |
+ let map = subtypeMap.get(t1); |
+ let result; |
+ if (map) { |
+ result = map.get(t2); |
+ if (result !== void 0) return result; |
+ } else { |
+ subtypeMap.set(t1, map = new Map()); |
+ } |
+ result = isSubtype_(t1, t2); |
+ map.set(t2, result); |
+ return result; |
+ } |
+ function _isBottom(type) { |
+ return type == bottom; |
+ } |
+ function _isTop(type) { |
+ return type == core.Object || type == dynamic; |
+ } |
+ function isSubtype_(t1, t2) { |
+ t1 = canonicalType(t1); |
+ t2 = canonicalType(t2); |
+ if (t1 == t2) return true; |
+ if (_isTop(t2) || _isBottom(t1)) { |
+ return true; |
+ } |
+ if (_isTop(t1) || _isBottom(t2)) { |
+ return false; |
+ } |
+ if (isClassSubType(t1, t2)) { |
+ return true; |
+ } |
+ if (isFunctionType(t1) && isFunctionType(t2)) { |
+ return isFunctionSubType(t1, t2); |
+ } |
+ return false; |
+ } |
+ function isClassSubType(t1, t2) { |
+ t1 = canonicalType(t1); |
+ assert(t2 == canonicalType(t2)); |
+ if (t1 == t2) return true; |
+ if (t1 == core.Object) return false; |
+ if (t1 == null) return t2 == core.Object || t2 == dynamic; |
+ let raw1 = getGenericClass(t1); |
+ let raw2 = getGenericClass(t2); |
+ if (raw1 != null && raw1 == raw2) { |
+ let typeArguments1 = getGenericArgs(t1); |
+ let typeArguments2 = getGenericArgs(t2); |
+ let length = typeArguments1.length; |
+ if (typeArguments2.length == 0) { |
+ return true; |
+ } else if (length == 0) { |
+ return false; |
+ } |
+ assert(length == typeArguments2.length); |
+ for (let i = 0; i < length; ++i) { |
+ if (!isSubtype(typeArguments1[i], typeArguments2[i])) { |
+ return false; |
+ } |
+ } |
+ return true; |
+ } |
+ if (isClassSubType(t1.__proto__, t2)) return true; |
+ let mixins = getMixins(t1); |
+ if (mixins) { |
+ for (let m1 of mixins) { |
+ if (m1 != null && isClassSubType(m1, t2)) return true; |
+ } |
+ } |
+ let getInterfaces = getImplements(t1); |
+ if (getInterfaces) { |
+ for (let i1 of getInterfaces()) { |
+ if (i1 != null && isClassSubType(i1, t2)) return true; |
+ } |
+ } |
+ return false; |
+ } |
+ function isGroundType(type) { |
+ if (type instanceof AbstractFunctionType) { |
+ if (!_isTop(type.returnType)) return false; |
+ for (let i = 0; i < type.args.length; ++i) { |
+ if (!_isBottom(type.args[i])) return false; |
+ } |
+ for (let i = 0; i < type.optionals.length; ++i) { |
+ if (!_isBottom(type.optionals[i])) return false; |
+ } |
+ let names = getOwnPropertyNames(type.named); |
+ for (let i = 0; i < names.length; ++i) { |
+ if (!_isBottom(type.named[names[i]])) return false; |
+ } |
+ return true; |
+ } |
+ let typeArgs = getGenericArgs(type); |
+ if (!typeArgs) return true; |
+ for (let t of typeArgs) { |
+ if (t != core.Object && t != dynamic) return false; |
+ } |
+ return true; |
+ } |
+ const defineProperty = Object.defineProperty; |
+ const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; |
+ const getOwnPropertyNames = Object.getOwnPropertyNames; |
+ const getOwnPropertySymbols = Object.getOwnPropertySymbols; |
+ const hasOwnProperty = Object.prototype.hasOwnProperty; |
+ const StrongModeError = (function() { |
+ function StrongModeError(message) { |
+ Error.call(this); |
+ this.message = message; |
+ } |
+ ; |
+ Object.setPrototypeOf(StrongModeError.prototype, Error.prototype); |
+ return StrongModeError; |
+ })(); |
+ function throwStrongModeError(message) { |
+ throw new StrongModeError(message); |
+ } |
+ function throwInternalError(message) { |
+ throw Error(message); |
+ } |
+ function getOwnNamesAndSymbols(obj) { |
+ return getOwnPropertyNames(obj).concat(getOwnPropertySymbols(obj)); |
+ } |
+ function safeGetOwnProperty(obj, name) { |
+ let desc = getOwnPropertyDescriptor(obj, name); |
+ if (desc) return desc.value; |
+ } |
+ function defineLazyProperty(to, name, desc) { |
+ let init = desc.get; |
+ let value = null; |
+ function lazySetter(x) { |
+ init = null; |
+ value = x; |
+ } |
+ function circularInitError() { |
+ throwInternalError('circular initialization for field ' + name); |
+ } |
+ function lazyGetter() { |
+ if (init == null) return value; |
+ let f = init; |
+ init = circularInitError; |
+ lazySetter(f()); |
+ return value; |
+ } |
+ desc.get = lazyGetter; |
+ desc.configurable = true; |
+ if (desc.set) desc.set = lazySetter; |
+ return defineProperty(to, name, desc); |
+ } |
+ function defineLazy(to, from) { |
+ for (let name of getOwnNamesAndSymbols(from)) { |
+ defineLazyProperty(to, name, getOwnPropertyDescriptor(from, name)); |
+ } |
+ } |
+ function defineMemoizedGetter(obj, name, getter) { |
+ return defineLazyProperty(obj, name, {get: getter}); |
+ } |
+ function copyTheseProperties(to, from, names) { |
+ for (let name of names) { |
+ var desc = getOwnPropertyDescriptor(from, name); |
+ if (desc != void 0) { |
+ defineProperty(to, name, desc); |
+ } else { |
+ defineLazyProperty(to, name, () => from[name]); |
+ } |
+ } |
+ return to; |
+ } |
+ function copyProperties(to, from) { |
+ return copyTheseProperties(to, from, getOwnNamesAndSymbols(from)); |
+ } |
+ function export$(to, from, show, hide) { |
+ if (show == void 0 || show.length == 0) { |
+ show = getOwnNamesAndSymbols(from); |
+ } |
+ if (hide != void 0) { |
+ var hideMap = new Set(hide); |
+ show = show.filter(k => !hideMap.has(k)); |
+ } |
+ return copyTheseProperties(to, from, show); |
+ } |
+ const defineLazyClass = defineLazy; |
+ const defineLazyProperties = defineLazy; |
+ const defineLazyClassGeneric = defineLazyProperty; |
+ const as = cast; |
+ const is = instanceOf; |
+ const global = typeof window == "undefined" ? global : window; |
+ const JsSymbol = Symbol; |
+ // Exports: |
+ exports.mixin = mixin; |
+ exports.getMixins = getMixins; |
+ exports.getImplements = getImplements; |
+ exports.generic = generic; |
+ exports.getGenericClass = getGenericClass; |
+ exports.getGenericArgs = getGenericArgs; |
+ exports.getMethodType = getMethodType; |
+ exports.classGetConstructorType = classGetConstructorType; |
+ exports.bind = bind; |
+ exports.setSignature = setSignature; |
+ exports.hasMethod = hasMethod; |
+ exports.virtualField = virtualField; |
+ exports.defineNamedConstructor = defineNamedConstructor; |
+ exports.dartx = dartx; |
+ exports.getExtensionSymbol = getExtensionSymbol; |
+ exports.defineExtensionNames = defineExtensionNames; |
+ exports.registerExtension = registerExtension; |
+ exports.defineExtensionMembers = defineExtensionMembers; |
+ exports.canonicalMember = canonicalMember; |
+ exports.setType = setType; |
+ exports.list = list; |
+ exports.setBaseClass = setBaseClass; |
+ exports.throwCastError = throwCastError; |
+ exports.throwAssertionError = throwAssertionError; |
+ exports.throwNullValueError = throwNullValueError; |
+ exports.syncStar = syncStar; |
+ exports.async = async; |
+ exports.asyncStar = asyncStar; |
+ exports.dload = dload; |
+ exports.dput = dput; |
+ exports.checkApply = checkApply; |
+ exports.throwNoSuchMethod = throwNoSuchMethod; |
+ exports.throwNoSuchMethodFunc = throwNoSuchMethodFunc; |
+ exports.checkAndCall = checkAndCall; |
+ exports.dcall = dcall; |
+ exports.callMethod = callMethod; |
+ exports.dsend = dsend; |
+ exports.dindex = dindex; |
+ exports.dsetindex = dsetindex; |
+ exports.strongInstanceOf = strongInstanceOf; |
+ exports.instanceOfOrNull = instanceOfOrNull; |
+ exports.instanceOf = instanceOf; |
+ exports.cast = cast; |
+ exports.asInt = asInt; |
+ exports.arity = arity; |
+ exports.equals = equals; |
+ exports.notNull = notNull; |
+ exports.map = map; |
+ exports.assert = assert; |
+ exports.throw = throw$; |
+ exports.getError = getError; |
+ exports.stackPrint = stackPrint; |
+ exports.stackTrace = stackTrace; |
+ exports.nullSafe = nullSafe; |
+ exports.multiKeyPutIfAbsent = multiKeyPutIfAbsent; |
+ exports.constants = constants; |
+ exports.const = const$; |
+ exports.hashCode = hashCode; |
+ exports.toString = toString; |
+ exports.noSuchMethod = noSuchMethod; |
+ exports.JsIterator = JsIterator; |
+ exports.fn = fn; |
+ exports.checkPrimitiveType = checkPrimitiveType; |
+ exports.runtimeType = runtimeType; |
+ exports.getFunctionType = getFunctionType; |
+ exports.realRuntimeType = realRuntimeType; |
+ exports.LazyTagged = LazyTagged; |
+ exports.read = read; |
+ exports.tag = tag; |
+ exports.tagComputed = tagComputed; |
+ exports.tagMemoized = tagMemoized; |
+ exports.implements = implements$; |
+ exports.metadata = metadata; |
+ exports.TypeRep = TypeRep; |
+ exports.Dynamic = Dynamic; |
+ exports.dynamic = dynamic; |
+ exports.Void = Void; |
+ exports.void = void$; |
+ exports.Bottom = Bottom; |
+ exports.bottom = bottom; |
+ exports.JSObject = JSObject; |
+ exports.jsobject = jsobject; |
+ exports.AbstractFunctionType = AbstractFunctionType; |
+ exports.FunctionType = FunctionType; |
+ exports.Typedef = Typedef; |
+ exports.functionType = functionType; |
+ exports.definiteFunctionType = definiteFunctionType; |
+ exports.typedef = typedef; |
+ exports.isDartType = isDartType; |
+ exports.typeName = typeName; |
+ exports.isFunctionType = isFunctionType; |
+ exports.isFunctionSubType = isFunctionSubType; |
+ exports.canonicalType = canonicalType; |
+ exports.subtypeMap = subtypeMap; |
+ exports.isSubtype = isSubtype; |
+ exports.isSubtype_ = isSubtype_; |
+ exports.isClassSubType = isClassSubType; |
+ exports.isGroundType = isGroundType; |
+ exports.defineProperty = defineProperty; |
+ exports.getOwnPropertyDescriptor = getOwnPropertyDescriptor; |
+ exports.getOwnPropertyNames = getOwnPropertyNames; |
+ exports.getOwnPropertySymbols = getOwnPropertySymbols; |
+ exports.hasOwnProperty = hasOwnProperty; |
+ exports.StrongModeError = StrongModeError; |
+ exports.throwStrongModeError = throwStrongModeError; |
+ exports.throwInternalError = throwInternalError; |
+ exports.getOwnNamesAndSymbols = getOwnNamesAndSymbols; |
+ exports.safeGetOwnProperty = safeGetOwnProperty; |
+ exports.defineLazyProperty = defineLazyProperty; |
+ exports.defineLazy = defineLazy; |
+ exports.defineMemoizedGetter = defineMemoizedGetter; |
+ exports.copyTheseProperties = copyTheseProperties; |
+ exports.copyProperties = copyProperties; |
+ exports.export = export$; |
+ exports.defineLazyClass = defineLazyClass; |
+ exports.defineLazyProperties = defineLazyProperties; |
+ exports.defineLazyClassGeneric = defineLazyClassGeneric; |
+ exports.as = as; |
+ exports.is = is; |
+ exports.global = global; |
+ exports.JsSymbol = JsSymbol; |
}); |