Index: lib/runtime/dart_sdk.js |
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js |
index 5386e8505573e6e69434132cccfccd57828265ac..9cbddbdc6b92c2f7c6dece11c14580870d1623cf 100644 |
--- a/lib/runtime/dart_sdk.js |
+++ b/lib/runtime/dart_sdk.js |
@@ -527,7 +527,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return false; |
}; |
dart.strongInstanceOf = function(obj, type, ignoreFromWhiteList) { |
- let actual = dart.realRuntimeType(obj); |
+ let actual = dart.getReifiedType(obj); |
if (dart.isSubtype(actual, type) || actual == dart.jsobject || actual == core.int && type == core.double) return true; |
if (ignoreFromWhiteList == void 0) return false; |
if (dart.isGroundType(type)) return false; |
@@ -541,12 +541,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart.is = function(obj, type) { |
if (dart.strongInstanceOf(obj, type)) return true; |
if (dart.isGroundType(type)) return false; |
- let actual = dart.realRuntimeType(obj); |
+ let actual = dart.getReifiedType(obj); |
dart.throwStrongModeError('Strong mode is check failure: ' + dart.typeName(actual) + ' does not soundly subtype ' + dart.typeName(type)); |
}; |
dart.as = function(obj, type) { |
if (dart.instanceOfOrNull(obj, type)) return obj; |
- let actual = dart.realRuntimeType(obj); |
+ let actual = dart.getReifiedType(obj); |
if (dart.isGroundType(type)) dart.throwCastError(actual, type); |
if (dart._ignoreTypeFailure(actual, type)) return obj; |
dart.throwStrongModeError('Strong mode cast failure from ' + dart.typeName(actual) + ' to ' + dart.typeName(type)); |
@@ -556,7 +556,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return null; |
} |
if (Math.floor(obj) != obj) { |
- dart.throwCastError(dart.realRuntimeType(obj), core.int); |
+ dart.throwCastError(dart.getReifiedType(obj), core.int); |
} |
return obj; |
}; |
@@ -639,7 +639,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.constants = new Map(); |
dart.const = function(obj) { |
- let objectKey = [dart.realRuntimeType(obj)]; |
+ let objectKey = [dart.getReifiedType(obj)]; |
for (let name of dart.getOwnNamesAndSymbols(obj)) { |
objectKey.push(name); |
objectKey.push(obj[name]); |
@@ -739,18 +739,19 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.runtimeType = function(obj) { |
let result = dart.checkPrimitiveType(obj); |
- if (result !== null) return result; |
- result = obj.runtimeType; |
- if (result) return result; |
- return dart._nonPrimitiveRuntimeType(obj); |
+ if (result !== null) return dart.wrapType(result); |
+ return obj.runtimeType; |
}; |
dart.getFunctionType = function(obj) { |
let args = Array(obj.length).fill(dart.dynamic); |
return dart.definiteFunctionType(dart.bottom, args); |
}; |
- dart.realRuntimeType = function(obj) { |
+ dart.objectRuntimeType = function(obj) { |
+ return dart.wrapType(dart.getReifiedType(obj)); |
+ }; |
+ dart.getReifiedType = function(obj) { |
let result = dart.checkPrimitiveType(obj); |
- if (result !== null) return result; |
+ if (result != null) return result; |
return dart._nonPrimitiveRuntimeType(obj); |
}; |
dart._nonPrimitiveRuntimeType = function(obj) { |
@@ -764,6 +765,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
return result; |
}; |
+ dart.wrapType = function(type) { |
+ if (type.hasOwnProperty(dart._typeObject)) { |
+ return type[dart._typeObject]; |
+ } |
+ return type[dart._typeObject] = new dart.WrappedType(type); |
+ }; |
dart._getRuntimeType = function(value) { |
return value[dart._runtimeType]; |
}; |
@@ -779,6 +786,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart._mixins = Symbol("mixins"); |
dart.implements = Symbol("implements"); |
dart.metadata = Symbol("metadata"); |
+ dart._typeObject = Symbol("typeObject"); |
dart.TypeRep = class TypeRep { |
get name() { |
return this.toString(); |
@@ -811,6 +819,15 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
}; |
dart.jsobject = new dart.JSObject(); |
+ dart.WrappedType = class WrappedType extends dart.TypeRep { |
+ constructor(type) { |
+ super(); |
+ this._runtimeType = type; |
+ } |
+ toString() { |
+ return dart.typeName(this._runtimeType); |
+ } |
+ }; |
dart.AbstractFunctionType = class AbstractFunctionType extends dart.TypeRep { |
constructor() { |
super(); |
@@ -978,15 +995,19 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (tag === core.Type) { |
let name = type.name; |
let args = dart.getGenericArgs(type); |
- if (args) { |
- name += '<'; |
- for (let i = 0; i < args.length; ++i) { |
- if (i > 0) name += ', '; |
- name += dart.typeName(args[i]); |
- } |
- name += '>'; |
- } |
- return name; |
+ if (!args) return name; |
+ let result = name; |
+ let allDynamic = true; |
+ result += '<'; |
+ for (let i = 0; i < args.length; ++i) { |
+ if (i > 0) name += ', '; |
+ let argName = dart.typeName(args[i]); |
+ if (argName != 'dynamic') allDynamic = false; |
+ result += argName; |
+ } |
+ result += '>'; |
+ if (allDynamic) return name; |
+ return result; |
} |
if (tag) return "Not a type: " + tag.name; |
return "JSObject<" + type.name + ">"; |
@@ -1052,12 +1073,12 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return true; |
}; |
dart.canonicalType = function(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; |
+ if (t === Object) return Object; |
+ if (t === Function) return Function; |
+ if (t === Array) return List; |
+ if (t === String) return String; |
+ if (t === Number) return double; |
+ if (t === Boolean) return bool; |
return t; |
}; |
dart.subtypeMap = new Map(); |
@@ -1260,7 +1281,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
dart.throw(new core.NoSuchMethodError(this, invocation.memberName, invocation.positionalArguments, invocation.namedArguments)); |
} |
get runtimeType() { |
- return dart.realRuntimeType(this); |
+ return dart.objectRuntimeType(this); |
} |
}; |
dart.setSignature(core.Object, { |
@@ -1288,7 +1309,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.lazyFn(_debugger._instanceof, () => [core.bool, [dart.dynamic, dart.dynamic]]); |
_debugger.getOwnPropertyNames = function(object) { |
- return dart.as(dart.list(Object.getOwnPropertyNames(object), core.String), core.List$(core.String)); |
+ return dart.list(Object.getOwnPropertyNames(object), core.String); |
}; |
dart.lazyFn(_debugger.getOwnPropertyNames, () => [core.List$(core.String), [dart.dynamic]]); |
_debugger.getOwnPropertySymbols = function(object) { |
@@ -1316,14 +1337,14 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.lazyFn(_debugger.isRegularDartObject, () => [core.bool, [dart.dynamic]]); |
_debugger.getObjectTypeName = function(object) { |
- let realRuntimeType = dart.realRuntimeType(object); |
- if (realRuntimeType == null) { |
+ let reifiedType = dart.getReifiedType(object); |
+ if (reifiedType == null) { |
if (_debugger._typeof(object) == 'function') { |
return '[[Raw JavaScript Function]]'; |
} |
return '<Error getting type name>'; |
} |
- return _debugger.getTypeName(dart.as(realRuntimeType, core.Type)); |
+ return _debugger.getTypeName(dart.as(reifiedType, core.Type)); |
}; |
dart.lazyFn(_debugger.getObjectTypeName, () => [core.String, [dart.dynamic]]); |
_debugger.getTypeName = function(type) { |
@@ -1563,7 +1584,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return true; |
} |
[_addMembers](current, object, properties) { |
- let className = dart.dload(dart.realRuntimeType(current), 'name'); |
+ let className = dart.dload(dart.getReifiedType(current), 'name'); |
for (let name of _debugger.getOwnPropertyNames(current)) { |
if (name == 'constructor' || name == '__proto__' || dart.equals(name, className)) continue; |
if (dart.notNull(_debugger.hasMethod(object, name))) { |
@@ -1621,13 +1642,13 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
_debugger.FunctionFormatter = class FunctionFormatter extends _debugger.Formatter { |
accept(object) { |
if (_debugger._typeof(object) != 'function') return false; |
- return dart.realRuntimeType(object) != null; |
+ return dart.getReifiedType(object) != null; |
} |
hasChildren(object) { |
return true; |
} |
preview(object) { |
- return dart.as(dart.typeName(dart.realRuntimeType(object)), core.String); |
+ return dart.as(dart.typeName(dart.getReifiedType(object)), core.String); |
} |
children(object) { |
return dart.list([new _debugger.NameValuePair({name: 'signature', value: this.preview(object)}), new _debugger.NameValuePair({name: 'JavaScript Function', value: object, skipDart: true})], _debugger.NameValuePair); |
@@ -1704,7 +1725,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
[_getType](object) { |
if (dart.is(object, core.Type)) return object; |
- return dart.realRuntimeType(object); |
+ return dart.getReifiedType(object); |
} |
preview(object) { |
let entry = dart.as(object, _debugger.ClassMetadata); |
@@ -1952,7 +1973,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return this ? 2 * 3 * 23 * 3761 : 269 * 811; |
} |
get runtimeType() { |
- return core.bool; |
+ return dart.wrapType(core.bool); |
} |
}; |
_interceptors.JSBool[dart.implements] = () => [core.bool]; |
@@ -1972,7 +1993,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return 0; |
} |
get runtimeType() { |
- return _interceptors.JSObject; |
+ return dart.wrapType(_interceptors.JSObject); |
} |
}; |
_interceptors.JavaScriptObject[dart.implements] = () => [_interceptors.JSObject]; |
@@ -3276,7 +3297,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return 536870911 & hash + ((16383 & hash) << 15); |
} |
get runtimeType() { |
- return core.String; |
+ return dart.wrapType(core.String); |
} |
get [dartx.length]() { |
return this.length; |
@@ -9036,7 +9057,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return dart.toString(_js_helper.getRuntimeType(object)); |
} |
static objectToString(object) { |
- let name = dart.typeName(dart.realRuntimeType(object)); |
+ let name = dart.typeName(dart.getReifiedType(object)); |
return `Instance of '${name}'`; |
} |
static dateNow() { |
@@ -10103,7 +10124,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.fn(_js_helper.stringJoinUnchecked); |
_js_helper.getRuntimeType = function(object) { |
- return dart.realRuntimeType(object); |
+ return dart.getReifiedType(object); |
}; |
dart.lazyFn(_js_helper.getRuntimeType, () => [core.Type, [dart.dynamic]]); |
_js_helper.getIndex = function(array, index) { |
@@ -10306,7 +10327,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return dart.throw(new core.UnimplementedError("ClassMirror.staticMembers unimplemented")); |
} |
get superclass() { |
- if (dart.equals(this[_cls], core.Object)) { |
+ if (dart.equals(this[_cls], dart.wrapType(core.Object))) { |
return null; |
} else { |
return new _js_mirrors.JsClassMirror._(this[_cls].__proto__); |
@@ -10634,7 +10655,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return this.byteLength; |
} |
get runtimeType() { |
- return typed_data.ByteBuffer; |
+ return dart.wrapType(typed_data.ByteBuffer); |
} |
[dartx.asUint8List](offsetInBytes, length) { |
if (offsetInBytes === void 0) offsetInBytes = 0; |
@@ -11041,7 +11062,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
} |
get runtimeType() { |
- return typed_data.Float32x4List; |
+ return dart.wrapType(typed_data.Float32x4List); |
} |
static fromList(list) { |
if (dart.is(list, _native_typed_data.NativeFloat32x4List)) { |
@@ -11430,7 +11451,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
} |
get runtimeType() { |
- return typed_data.Int32x4List; |
+ return dart.wrapType(typed_data.Int32x4List); |
} |
static fromList(list) { |
if (dart.is(list, _native_typed_data.NativeInt32x4List)) { |
@@ -11572,7 +11593,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} |
} |
get runtimeType() { |
- return typed_data.Float64x2List; |
+ return dart.wrapType(typed_data.Float64x2List); |
} |
get buffer() { |
return this[_storage][dartx.buffer]; |
@@ -11781,7 +11802,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeByteData._create2(buffer, offsetInBytes) : _native_typed_data.NativeByteData._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.ByteData; |
+ return dart.wrapType(typed_data.ByteData); |
} |
get [dartx.elementSizeInBytes]() { |
return 1; |
@@ -12061,7 +12082,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeFloat32List._create2(buffer, offsetInBytes) : _native_typed_data.NativeFloat32List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Float32List; |
+ return dart.wrapType(typed_data.Float32List); |
} |
[dartx.sublist](start, end) { |
if (end === void 0) end = null; |
@@ -12112,7 +12133,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeFloat64List._create2(buffer, offsetInBytes) : _native_typed_data.NativeFloat64List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Float64List; |
+ return dart.wrapType(typed_data.Float64List); |
} |
[dartx.sublist](start, end) { |
if (end === void 0) end = null; |
@@ -12164,7 +12185,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeInt16List._create2(buffer, offsetInBytes) : _native_typed_data.NativeInt16List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Int16List; |
+ return dart.wrapType(typed_data.Int16List); |
} |
[dartx.get](index) { |
this[_checkIndex](index, this[dartx.length]); |
@@ -12223,7 +12244,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeInt32List._create2(buffer, offsetInBytes) : _native_typed_data.NativeInt32List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Int32List; |
+ return dart.wrapType(typed_data.Int32List); |
} |
[dartx.get](index) { |
this[_checkIndex](index, this[dartx.length]); |
@@ -12282,7 +12303,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return dart.as(length == null ? _native_typed_data.NativeInt8List._create2(buffer, offsetInBytes) : _native_typed_data.NativeInt8List._create3(buffer, offsetInBytes, length), _native_typed_data.NativeInt8List); |
} |
get runtimeType() { |
- return typed_data.Int8List; |
+ return dart.wrapType(typed_data.Int8List); |
} |
[dartx.get](index) { |
this[_checkIndex](index, this[dartx.length]); |
@@ -12341,7 +12362,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeUint16List._create2(buffer, offsetInBytes) : _native_typed_data.NativeUint16List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Uint16List; |
+ return dart.wrapType(typed_data.Uint16List); |
} |
[dartx.get](index) { |
this[_checkIndex](index, this[dartx.length]); |
@@ -12400,7 +12421,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeUint32List._create2(buffer, offsetInBytes) : _native_typed_data.NativeUint32List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Uint32List; |
+ return dart.wrapType(typed_data.Uint32List); |
} |
[dartx.get](index) { |
this[_checkIndex](index, this[dartx.length]); |
@@ -12460,7 +12481,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeUint8ClampedList._create2(buffer, offsetInBytes) : _native_typed_data.NativeUint8ClampedList._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Uint8ClampedList; |
+ return dart.wrapType(typed_data.Uint8ClampedList); |
} |
get [dartx.length]() { |
return this.length; |
@@ -12523,7 +12544,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return length == null ? _native_typed_data.NativeUint8List._create2(buffer, offsetInBytes) : _native_typed_data.NativeUint8List._create3(buffer, offsetInBytes, length); |
} |
get runtimeType() { |
- return typed_data.Uint8List; |
+ return dart.wrapType(typed_data.Uint8List); |
} |
get [dartx.length]() { |
return this.length; |
@@ -29486,7 +29507,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
} else if (o instanceof Date) { |
let ms = o.getTime(); |
return new core.DateTime.fromMillisecondsSinceEpoch(dart.asInt(ms)); |
- } else if (dart.is(o, js._DartObject) && dart.jsobject != dart.realRuntimeType(o)) { |
+ } else if (dart.is(o, js._DartObject) && dart.jsobject != dart.getReifiedType(o)) { |
return o[_dartObj]; |
} else { |
return js._putIfAbsent(js._dartProxies, o, js._wrapToDart); |
@@ -30080,7 +30101,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.lazyFn(mirrors.reflect, () => [mirrors.InstanceMirror, [core.Object]]); |
mirrors.reflectClass = function(key) { |
- if (!dart.is(key, core.Type) || dart.equals(key, dart.dynamic)) { |
+ if (!dart.is(key, core.Type) || dart.equals(key, dart.wrapType(dart.dynamic))) { |
dart.throw(new core.ArgumentError(`${key} does not denote a class`)); |
} |
let tm = mirrors.reflectType(key); |
@@ -30091,7 +30112,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.lazyFn(mirrors.reflectClass, () => [mirrors.ClassMirror, [core.Type]]); |
mirrors.reflectType = function(key) { |
- if (dart.equals(key, dart.dynamic)) { |
+ if (dart.equals(key, dart.wrapType(dart.dynamic))) { |
return mirrors.currentMirrorSystem().dynamicType; |
} |
return _js_mirrors.reflectType(key); |
@@ -66477,7 +66498,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
return this[_parent$].altKey; |
} |
static _makeRecord() { |
- let interceptor = _foreign_helper.JS_INTERCEPTOR_CONSTANT(html$.KeyboardEvent); |
+ let interceptor = _foreign_helper.JS_INTERCEPTOR_CONSTANT(dart.wrapType(html$.KeyboardEvent)); |
return _js_helper.makeLeafDispatchRecord(interceptor); |
} |
wrap(parent) { |
@@ -68213,7 +68234,7 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
if (!dart.equals(baseClassName, 'HTMLElement')) { |
dart.throw(new core.UnsupportedError('Class must provide extendsTag if base ' + 'native class is not HtmlElement')); |
} |
- this[_nativeType] = html$.HtmlElement; |
+ this[_nativeType] = dart.wrapType(html$.HtmlElement); |
} else { |
let element = document[dartx.createElement](extendsTag); |
if (!(element instanceof window[baseClassName])) { |