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

Unified Diff: pkg/dev_compiler/lib/js/legacy/dart_sdk.js

Side-by-side diff isn't available for this file because of its large size.
Issue 2664493005: Fix getFieldType to handle metadata and workaround bad types for setters called via mirrors. (Closed)
Patch Set: Created 3 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:
Download patch
« no previous file with comments | « pkg/dev_compiler/lib/js/es6/dart_sdk.js ('k') | pkg/dev_compiler/lib/sdk/ddc_sdk.sum » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/dev_compiler/lib/js/legacy/dart_sdk.js
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
index f3f9d6bdc80cd0eac5f63cf7be23a2ee087e5c5f..79a980939aa8afa71009f19e25176d5dd4ac920f 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
@@ -1132,7 +1132,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.getFieldType = function(type, name) {
let sigObj = type[dart._fieldSig];
if (sigObj === void 0) return void 0;
- return sigObj[name];
+ let fieldType = sigObj[name];
+ return fieldType instanceof Array ? fieldType[0] : fieldType;
};
dart.getSetterType = function(type, name) {
let sigObj = type[dart._setterSig];
@@ -1925,22 +1926,40 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [], {isGetter: true}));
};
- dart.dput = function(obj, field, value) {
+ dart._stripGenericArguments = function(type) {
+ let genericClass = dart.getGenericClass(type);
+ if (genericClass != null) return genericClass();
+ return type;
+ };
+ dart.dputLegacy = function(obj, field, value) {
let f = dart._canonicalMember(obj, field);
dart._trackCall(obj);
if (f != null) {
let objType = dart.getType(obj);
let setterType = dart.getSetterType(objType, f);
if (setterType != void 0) {
- if (dart.test(dart.instanceOfOrNull(value, setterType.args[0]))) {
- return obj[f] = value;
+ return obj[f] = dart.check(value, dart._stripGenericArguments(setterType.args[0]));
+ } else {
+ let fieldType = dart.getFieldType(objType, f);
+ if (fieldType != void 0) {
+ return obj[f] = dart.check(value, dart._stripGenericArguments(fieldType));
}
+ }
+ }
+ return dart.noSuchMethod(obj, new dart.InvocationImpl(field, [value], {isSetter: true}));
+ };
+ dart.dput = function(obj, field, value) {
+ let f = dart._canonicalMember(obj, field);
+ dart._trackCall(obj);
+ if (f != null) {
+ let objType = dart.getType(obj);
+ let setterType = dart.getSetterType(objType, f);
+ if (setterType != void 0) {
+ return obj[f] = dart.check(value, setterType.args[0]);
} else {
let fieldType = dart.getFieldType(objType, f);
if (fieldType != void 0) {
- if (dart.test(dart.instanceOfOrNull(value, fieldType))) {
- return obj[f] = value;
- }
+ return obj[f] = dart.check(value, fieldType);
}
}
}
@@ -13641,7 +13660,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
};
dart.lazyFn(_js_mirrors._dload, () => dynamicAndStringTodynamic());
_js_mirrors._dput = function(obj, name, val) {
- _js_mirrors._dart.dput(obj, name, val);
+ _js_mirrors._dart.dputLegacy(obj, name, val);
};
dart.lazyFn(_js_mirrors._dput, () => dynamicAndStringAnddynamicTovoid());
_js_mirrors._dcall = function(obj, args) {
« no previous file with comments | « pkg/dev_compiler/lib/js/es6/dart_sdk.js ('k') | pkg/dev_compiler/lib/sdk/ddc_sdk.sum » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698