Index: lib/runtime/dart_sdk.js |
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js |
index 2b80cf605c72208f5852d37756d467bc541e9ef9..f730a6dbd76105bfac3cef8e2a771db39d9571eb 100644 |
--- a/lib/runtime/dart_sdk.js |
+++ b/lib/runtime/dart_sdk.js |
@@ -500,7 +500,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; |
@@ -514,12 +514,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)); |
@@ -529,7 +529,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; |
}; |
@@ -612,7 +612,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]); |
@@ -709,16 +709,17 @@ 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; |
return dart._nonPrimitiveRuntimeType(obj); |
@@ -734,6 +735,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.read = function(value) { |
return value[dart._runtimeType]; |
}; |
@@ -756,6 +763,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(); |
@@ -788,6 +796,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(); |
@@ -945,15 +962,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 + ">"; |
@@ -1227,7 +1248,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, { |
@@ -1283,14 +1304,14 @@ dart_library.library('dart_sdk', null, /* Imports */[ |
}; |
dart.fn(_debugger.isRegularDartObject, () => dart.definiteFunctionType(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.fn(_debugger.getObjectTypeName, () => dart.definiteFunctionType(core.String, [dart.dynamic])); |
_debugger.getTypeName = function(type) { |
@@ -1530,7 +1551,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))) { |
@@ -1588,13 +1609,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); |
@@ -1671,7 +1692,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); |
@@ -8927,7 +8948,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() { |
@@ -9992,7 +10013,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.fn(_js_helper.getRuntimeType, () => dart.definiteFunctionType(core.Type, [dart.dynamic])); |
_js_helper.getIndex = function(array, index) { |
@@ -29359,7 +29380,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); |