Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 var convert; | 1 var convert; |
| 2 (function(convert) { | 2 (function(convert) { |
| 3 'use strict'; | 3 'use strict'; |
| 4 // Function _convertJsonToDart: (dynamic, (dynamic, dynamic) → dynamic) → dyna mic | 4 // Function _convertJsonToDart: (dynamic, (dynamic, dynamic) → dynamic) → dyna mic |
| 5 function _convertJsonToDart(json, reviver) { | 5 function _convertJsonToDart(json, reviver) { |
| 6 dart.assert(reviver !== null); | 6 dart.assert(reviver !== null); |
| 7 // Function walk: (dynamic) → dynamic | 7 // Function walk: (dynamic) → dynamic |
| 8 function walk(e) { | 8 function walk(e) { |
| 9 if (dart.dbinary(_foreign_helper.JS('bool', '# == null', e), '||', _foreig n_helper.JS('bool', 'typeof # != "object"', e))) { | 9 if (dart.notNull(e == null) || dart.notNull(typeof e != "object")) { |
|
Jennifer Messerly
2015/02/27 14:59:23
it'd be nice to understand this is not null, too.
| |
| 10 return e; | 10 return e; |
| 11 } | 11 } |
| 12 if (_foreign_helper.JS('bool', 'Object.getPrototypeOf(#) === Array.prototy pe', e)) { | 12 if (Object.getPrototypeOf(e) === Array.prototype) { |
| 13 for (let i = 0; i['<'](_foreign_helper.JS('int', '#.length', e)); i++) { | 13 for (let i = 0; i < e.length; i++) { |
| 14 let item = _foreign_helper.JS('', '#[#]', e, i); | 14 let item = e[i]; |
| 15 _foreign_helper.JS('', '#[#]=#', e, i, reviver(i, walk(item))); | 15 e[i] = reviver(i, walk(item)); |
| 16 } | 16 } |
| 17 return e; | 17 return e; |
| 18 } | 18 } |
| 19 let map = new _JsonMap(e); | 19 let map = new _JsonMap(e); |
| 20 let processed = map._processed; | 20 let processed = map._processed; |
| 21 let keys = map._computeKeys(); | 21 let keys = map._computeKeys(); |
| 22 for (let i = 0; i < keys.length; i++) { | 22 for (let i = 0; i < keys.length; i++) { |
| 23 let key = keys.get(i); | 23 let key = keys.get(i); |
| 24 let revived = reviver(key, walk(_foreign_helper.JS('', '#[#]', e, key))) ; | 24 let revived = reviver(key, walk(e[key])); |
| 25 _foreign_helper.JS('', '#[#]=#', processed, key, revived); | 25 processed[key] = revived; |
| 26 } | 26 } |
| 27 map._original = processed; | 27 map._original = processed; |
| 28 return map; | 28 return map; |
| 29 } | 29 } |
| 30 return reviver(null, walk(json)); | 30 return reviver(null, walk(json)); |
| 31 } | 31 } |
| 32 // Function _convertJsonToDartLazy: (dynamic) → dynamic | 32 // Function _convertJsonToDartLazy: (dynamic) → dynamic |
| 33 function _convertJsonToDartLazy(object) { | 33 function _convertJsonToDartLazy(object) { |
| 34 if (object === null) | 34 if (object === null) |
| 35 return null; | 35 return null; |
| 36 if (_foreign_helper.JS('bool', 'typeof # != "object"', object)) { | 36 if (typeof object != "object") { |
| 37 return object; | 37 return object; |
| 38 } | 38 } |
| 39 if (_foreign_helper.JS('bool', 'Object.getPrototypeOf(#) !== Array.prototype ', object)) { | 39 if (Object.getPrototypeOf(object) !== Array.prototype) { |
| 40 return new _JsonMap(object); | 40 return new _JsonMap(object); |
| 41 } | 41 } |
| 42 for (let i = 0; i['<'](_foreign_helper.JS('int', '#.length', object)); i++) { | 42 for (let i = 0; i < object.length; i++) { |
| 43 let item = _foreign_helper.JS('', '#[#]', object, i); | 43 let item = object[i]; |
| 44 _foreign_helper.JS('', '#[#]=#', object, i, _convertJsonToDartLazy(item)); | 44 object[i] = _convertJsonToDartLazy(item); |
| 45 } | 45 } |
| 46 return object; | 46 return object; |
| 47 } | 47 } |
| 48 class _JsonMap extends dart.Object { | 48 class _JsonMap extends dart.Object { |
| 49 _JsonMap(_original) { | 49 _JsonMap(_original) { |
| 50 this._processed = _newJavaScriptObject(); | 50 this._processed = _newJavaScriptObject(); |
| 51 this._original = _original; | 51 this._original = _original; |
| 52 this._data = null; | 52 this._data = null; |
| 53 } | 53 } |
| 54 get(key) { | 54 get(key) { |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 toString() { | 162 toString() { |
| 163 return collection.Maps.mapToString(this); | 163 return collection.Maps.mapToString(this); |
| 164 } | 164 } |
| 165 get _isUpgraded() { | 165 get _isUpgraded() { |
| 166 return this._processed === null; | 166 return this._processed === null; |
| 167 } | 167 } |
| 168 get _upgradedMap() { | 168 get _upgradedMap() { |
| 169 dart.assert(this._isUpgraded); | 169 dart.assert(this._isUpgraded); |
| 170 return dart.as(_foreign_helper.JS('LinkedHashMap', '#', this._data), core. Map); | 170 return dart.as(this._data, core.Map); |
| 171 } | 171 } |
| 172 _computeKeys() { | 172 _computeKeys() { |
| 173 dart.assert(!dart.notNull(this._isUpgraded)); | 173 dart.assert(!dart.notNull(this._isUpgraded)); |
| 174 let keys = dart.as(this._data, core.List); | 174 let keys = dart.as(this._data, core.List); |
| 175 if (keys === null) { | 175 if (keys === null) { |
| 176 keys = this._data = _getPropertyNames(this._original); | 176 keys = this._data = _getPropertyNames(this._original); |
| 177 } | 177 } |
| 178 return dart.as(_foreign_helper.JS('JSExtendableArray', '#', keys), core.Li st$(core.String)); | 178 return dart.as(keys, core.List$(core.String)); |
| 179 } | 179 } |
| 180 _upgrade() { | 180 _upgrade() { |
| 181 if (this._isUpgraded) | 181 if (this._isUpgraded) |
| 182 return this._upgradedMap; | 182 return this._upgradedMap; |
| 183 let result = dart.map(); | 183 let result = dart.map(); |
| 184 let keys = this._computeKeys(); | 184 let keys = this._computeKeys(); |
| 185 for (let i = 0; i < keys.length; i++) { | 185 for (let i = 0; i < keys.length; i++) { |
| 186 let key = keys.get(i); | 186 let key = keys.get(i); |
| 187 result.set(key, this.get(key)); | 187 result.set(key, this.get(key)); |
| 188 } | 188 } |
| 189 if (keys.isEmpty) { | 189 if (keys.isEmpty) { |
| 190 keys.add(null); | 190 keys.add(null); |
| 191 } else { | 191 } else { |
| 192 keys.clear(); | 192 keys.clear(); |
| 193 } | 193 } |
| 194 this._original = this._processed = null; | 194 this._original = this._processed = null; |
| 195 this._data = result; | 195 this._data = result; |
| 196 dart.assert(this._isUpgraded); | 196 dart.assert(this._isUpgraded); |
| 197 return result; | 197 return result; |
| 198 } | 198 } |
| 199 _process(key) { | 199 _process(key) { |
| 200 if (!dart.notNull(_hasProperty(this._original, key))) | 200 if (!dart.notNull(_hasProperty(this._original, key))) |
| 201 return null; | 201 return null; |
| 202 let result = _convertJsonToDartLazy(_getProperty(this._original, key)); | 202 let result = _convertJsonToDartLazy(_getProperty(this._original, key)); |
| 203 return _setProperty(this._processed, key, result); | 203 return _setProperty(this._processed, key, result); |
| 204 } | 204 } |
| 205 static _hasProperty(object, key) { | 205 static _hasProperty(object, key) { |
| 206 return dart.as(_foreign_helper.JS('bool', 'Object.prototype.hasOwnProperty .call(#,#)', object, key), core.bool); | 206 return Object.prototype.hasOwnProperty.call(object, key); |
| 207 } | 207 } |
| 208 static _getProperty(object, key) { | 208 static _getProperty(object, key) { |
| 209 return _foreign_helper.JS('', '#[#]', object, key); | 209 return object[key]; |
| 210 } | 210 } |
| 211 static _setProperty(object, key, value) { | 211 static _setProperty(object, key, value) { |
| 212 return _foreign_helper.JS('', '#[#]=#', object, key, value); | 212 return object[key] = value; |
| 213 } | 213 } |
| 214 static _getPropertyNames(object) { | 214 static _getPropertyNames(object) { |
| 215 return dart.as(_foreign_helper.JS('JSExtendableArray', 'Object.keys(#)', o bject), core.List); | 215 return dart.as(Object.keys(object), core.List); |
| 216 } | 216 } |
| 217 static _isUnprocessed(object) { | 217 static _isUnprocessed(object) { |
| 218 return dart.as(_foreign_helper.JS('bool', 'typeof(#)=="undefined"', object ), core.bool); | 218 return typeof object == "undefined"; |
| 219 } | 219 } |
| 220 static _newJavaScriptObject() { | 220 static _newJavaScriptObject() { |
| 221 return _foreign_helper.JS('=Object', 'Object.create(null)'); | 221 return Object.create(null); |
| 222 } | 222 } |
| 223 } | 223 } |
| 224 class _JsonMapKeyIterable extends _internal.ListIterable { | 224 class _JsonMapKeyIterable extends _internal.ListIterable { |
| 225 _JsonMapKeyIterable(_parent) { | 225 _JsonMapKeyIterable(_parent) { |
| 226 this._parent = _parent; | 226 this._parent = _parent; |
| 227 super.ListIterable(); | 227 super.ListIterable(); |
| 228 } | 228 } |
| 229 get length() { | 229 get length() { |
| 230 return this._parent.length; | 230 return this._parent.length; |
| 231 } | 231 } |
| (...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1035 bind(stream) { | 1035 bind(stream) { |
| 1036 return dart.as(super.bind(stream), async.Stream$(core.Object)); | 1036 return dart.as(super.bind(stream), async.Stream$(core.Object)); |
| 1037 } | 1037 } |
| 1038 } | 1038 } |
| 1039 // Function _parseJson: (String, (dynamic, dynamic) → dynamic) → dynamic | 1039 // Function _parseJson: (String, (dynamic, dynamic) → dynamic) → dynamic |
| 1040 function _parseJson(source, reviver) { | 1040 function _parseJson(source, reviver) { |
| 1041 if (!(typeof source == string)) | 1041 if (!(typeof source == string)) |
| 1042 throw new core.ArgumentError(source); | 1042 throw new core.ArgumentError(source); |
| 1043 let parsed = null; | 1043 let parsed = null; |
| 1044 try { | 1044 try { |
| 1045 parsed = _foreign_helper.JS('=Object|JSExtendableArray|Null|bool|num|Strin g', 'JSON.parse(#)', source); | 1045 parsed = JSON.parse(source); |
| 1046 } catch (e) { | 1046 } catch (e) { |
| 1047 throw new core.FormatException(dart.as(_foreign_helper.JS('String', 'Strin g(#)', e), core.String)); | 1047 throw new core.FormatException(String(e)); |
| 1048 } | 1048 } |
| 1049 | 1049 |
| 1050 if (reviver === null) { | 1050 if (reviver === null) { |
| 1051 return _convertJsonToDartLazy(parsed); | 1051 return _convertJsonToDartLazy(parsed); |
| 1052 } else { | 1052 } else { |
| 1053 return _convertJsonToDart(parsed, reviver); | 1053 return _convertJsonToDart(parsed, reviver); |
| 1054 } | 1054 } |
| 1055 } | 1055 } |
| 1056 // Function _defaultToEncodable: (dynamic) → Object | 1056 // Function _defaultToEncodable: (dynamic) → Object |
| 1057 function _defaultToEncodable(object) { | 1057 function _defaultToEncodable(object) { |
| (...skipping 1203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2261 convert.ClosableStringSink = ClosableStringSink; | 2261 convert.ClosableStringSink = ClosableStringSink; |
| 2262 convert.StringConversionSinkBase = StringConversionSinkBase; | 2262 convert.StringConversionSinkBase = StringConversionSinkBase; |
| 2263 convert.StringConversionSinkMixin = StringConversionSinkMixin; | 2263 convert.StringConversionSinkMixin = StringConversionSinkMixin; |
| 2264 convert.UNICODE_REPLACEMENT_CHARACTER_RUNE = UNICODE_REPLACEMENT_CHARACTER_RUN E; | 2264 convert.UNICODE_REPLACEMENT_CHARACTER_RUNE = UNICODE_REPLACEMENT_CHARACTER_RUN E; |
| 2265 convert.UNICODE_BOM_CHARACTER_RUNE = UNICODE_BOM_CHARACTER_RUNE; | 2265 convert.UNICODE_BOM_CHARACTER_RUNE = UNICODE_BOM_CHARACTER_RUNE; |
| 2266 convert.UTF8 = UTF8; | 2266 convert.UTF8 = UTF8; |
| 2267 convert.Utf8Codec = Utf8Codec; | 2267 convert.Utf8Codec = Utf8Codec; |
| 2268 convert.Utf8Encoder = Utf8Encoder; | 2268 convert.Utf8Encoder = Utf8Encoder; |
| 2269 convert.Utf8Decoder = Utf8Decoder; | 2269 convert.Utf8Decoder = Utf8Decoder; |
| 2270 })(convert || (convert = {})); | 2270 })(convert || (convert = {})); |
| OLD | NEW |