Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: lib/runtime/dart_sdk.js

Side-by-side diff isn't available for this file because of its large size.
Issue 1944483002: Redo how Type objects are exposed from DDC. (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698