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

Unified Diff: sdk/lib/_internal/lib/json_patch.dart

Issue 23554004: Made old dart:json library use convert to parse JSON. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addres review comments. Created 7 years, 4 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:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/lib/convert_patch.dart ('k') | sdk/lib/_internal/libraries.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/lib/json_patch.dart
diff --git a/sdk/lib/_internal/lib/json_patch.dart b/sdk/lib/_internal/lib/json_patch.dart
deleted file mode 100644
index ad22ae7d1aa4d8f71b957e8076a147f697bce517..0000000000000000000000000000000000000000
--- a/sdk/lib/_internal/lib/json_patch.dart
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Patch file for dart:json library.
-
-import 'dart:_foreign_helper' show JS;
-import 'dart:_interceptors' show JSExtendableArray;
-
-/**
- * Parses [json] and builds the corresponding parsed JSON value.
- *
- * Parsed JSON values are of the types [num], [String], [bool], [Null],
- * [List]s of parsed JSON values or [Map]s from [String] to parsed
- * JSON values.
- *
- * The optional [reviver] function, if provided, is called once for each object
- * or list property parsed. The arguments are the property name ([String]) or
- * list index ([int]), and the value is the parsed value. The return value of
- * the reviver will be used as the value of that property instead of the parsed
- * value. The top level value is passed to the reviver with the empty string as
- * a key.
- *
- * Throws [FormatException] if the input is not valid JSON text.
- */
-patch parse(String json, [reviver(var key, var value)]) {
- if (json is! String) throw new ArgumentError(json);
-
- var parsed;
- try {
- parsed = JS('=Object|JSExtendableArray|Null|bool|num|String',
- 'JSON.parse(#)',
- json);
- } catch (e) {
- throw new FormatException(JS('String', 'String(#)', e));
- }
-
- return _convertJsonToDart(parsed, reviver);
-}
-
-/**
- * Walks the raw JavaScript value [json], replacing JavaScript Objects with
- * Maps. [json] is expected to be freshly allocated so elements can be replaced
- * in-place.
- */
-_convertJsonToDart(json, reviver(key, value)) {
-
- var revive = reviver == null ? (key, value) => value : reviver;
-
- walk(e) {
- // JavaScript null, string, number, bool are in the correct representation.
- if (JS('bool', '# == null', e) || JS('bool', 'typeof # != "object"', e)) {
- return e;
- }
-
- // This test is needed to avoid identifing '{"__proto__":[]}' as an Array.
- // TODO(sra): Replace this test with cheaper '#.constructor === Array' when
- // bug 621 below is fixed.
- if (JS('bool', 'Object.getPrototypeOf(#) === Array.prototype', e)) {
- var list = JS('JSExtendableArray', '#', e); // Teach compiler the type is known.
- // In-place update of the elements since JS Array is a Dart List.
- for (int i = 0; i < list.length; i++) {
- // Use JS indexing to avoid range checks. We know this is the only
- // reference to the list, but the compiler will likely never be able to
- // tell that this instance of the list cannot have its length changed by
- // the reviver even though it later will be passed to the reviver at the
- // outer level.
- var item = JS('', '#[#]', list, i);
- JS('', '#[#]=#', list, i, revive(i, walk(item)));
- }
- return list;
- }
-
- // Otherwise it is a plain Object, so copy to a Map.
- var keys = JS('JSExtendableArray', 'Object.keys(#)', e);
- Map map = {};
- for (int i = 0; i < keys.length; i++) {
- String key = keys[i];
- map[key] = revive(key, walk(JS('', '#[#]', e, key)));
- }
- // V8 has a bug with properties named "__proto__"
- // https://code.google.com/p/v8/issues/detail?id=621
- var proto = JS('', '#.__proto__', e);
- // __proto__ can be undefined on IE9.
- if (JS('bool',
- 'typeof # !== "undefined" && # !== Object.prototype',
- proto, proto)) {
- map['__proto__'] = revive('__proto__', walk(proto));
- }
- return map;
- }
-
- return revive('', walk(json));
-}
« no previous file with comments | « sdk/lib/_internal/lib/convert_patch.dart ('k') | sdk/lib/_internal/libraries.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698