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

Unified Diff: lib/runtime/dart/_runtime.js

Issue 1680263002: Support for dart:typed_data (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Address comments, rebase Created 4 years, 10 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:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/runtime/dart/_native_typed_data.js ('k') | lib/runtime/dart/collection.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/runtime/dart/_runtime.js
diff --git a/lib/runtime/dart/_runtime.js b/lib/runtime/dart/_runtime.js
index 9906e2d1ea9cd165d935bd402552e0630c53a839..80227d1379f000e8cabedada9b45f9908b88b923 100644
--- a/lib/runtime/dart/_runtime.js
+++ b/lib/runtime/dart/_runtime.js
@@ -173,6 +173,9 @@ dart_library.library('dart/_runtime', null, /* Imports */[
defineProperty(clazz, name, {value: ctor, configurable: true});
}
const _extensionType = Symbol("extensionType");
+ function getExtensionType(obj) {
+ return obj[_extensionType];
+ }
const dartx = {};
function getExtensionSymbol(name) {
let sym = dartx[name];
@@ -182,16 +185,18 @@ dart_library.library('dart/_runtime', null, /* Imports */[
function defineExtensionNames(names) {
return names.forEach(getExtensionSymbol);
}
+ function _installProperties(jsProto, extProto) {
+ if (extProto !== core.Object.prototype && extProto !== jsProto) {
+ _installProperties(jsProto, extProto.__proto__);
+ }
+ copyTheseProperties(jsProto, extProto, getOwnPropertySymbols(extProto));
+ }
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__;
- }
+ jsProto[_extensionType] = dartExtType;
+ _installProperties(jsProto, extProto);
let originalSigFn = getOwnPropertyDescriptor(dartExtType, _methodSig).get;
assert_(originalSigFn);
defineMemoizedGetter(jsType, _methodSig, originalSigFn);
@@ -220,6 +225,7 @@ dart_library.library('dart/_runtime', null, /* Imports */[
}
function setType(obj, type) {
obj.__proto__ = type.prototype;
+ obj.__proto__[_extensionType] = type;
return obj;
}
function list(obj, elementType) {
@@ -476,7 +482,7 @@ dart_library.library('dart/_runtime', null, /* Imports */[
}
function strongInstanceOf(obj, type, ignoreFromWhiteList) {
let actual = realRuntimeType(obj);
- if (isSubtype(actual, type) || actual == jsobject) return true;
+ if (isSubtype(actual, type) || actual == jsobject || actual == core.int && type == core.double) return true;
if (ignoreFromWhiteList == void 0) return false;
if (isGroundType(type)) return false;
if (_ignoreTypeFailure(actual, type)) return true;
@@ -685,7 +691,9 @@ dart_library.library('dart/_runtime', null, /* Imports */[
function runtimeType(obj) {
let result = checkPrimitiveType(obj);
if (result !== null) return result;
- return obj.runtimeType;
+ result = obj.runtimeType;
+ if (result) return result;
+ return _nonPrimitiveRuntimeType(obj);
}
function getFunctionType(obj) {
let args = Array(obj.length).fill(dynamicR);
@@ -694,7 +702,12 @@ dart_library.library('dart/_runtime', null, /* Imports */[
function realRuntimeType(obj) {
let result = checkPrimitiveType(obj);
if (result !== null) return result;
- result = obj[_runtimeType];
+ return _nonPrimitiveRuntimeType(obj);
+ }
+ function _nonPrimitiveRuntimeType(obj) {
+ let result = obj[_runtimeType];
+ if (result) return result;
+ result = obj[_extensionType];
if (result) return result;
result = obj.constructor;
if (result == Function) {
@@ -1199,6 +1212,7 @@ dart_library.library('dart/_runtime', null, /* Imports */[
exports.hasMethod = hasMethod;
exports.virtualField = virtualField;
exports.defineNamedConstructor = defineNamedConstructor;
+ exports.getExtensionType = getExtensionType;
exports.dartx = dartx;
exports.getExtensionSymbol = getExtensionSymbol;
exports.defineExtensionNames = defineExtensionNames;
« no previous file with comments | « lib/runtime/dart/_native_typed_data.js ('k') | lib/runtime/dart/collection.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698