| Index: pkg/dev_compiler/lib/js/es6/dart_sdk.js
|
| diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
|
| index 3b16ff51b678d7bcd9c8970d916612ea6890bad6..244db60510ee6bb1ee36a693a11aa475eff13148 100644
|
| --- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js
|
| +++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
|
| @@ -1129,7 +1129,8 @@ dart.getMethodType = function(type, name) {
|
| 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];
|
| @@ -1922,22 +1923,40 @@ dart.dload = function(obj, field) {
|
| }
|
| 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);
|
| }
|
| }
|
| }
|
| @@ -13638,7 +13657,7 @@ _js_mirrors._dload = function(obj, name) {
|
| };
|
| 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) {
|
|
|