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 |