| 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) {
|
|
|