Index: sdk/lib/_internal/compiler/implementation/lib/json_patch.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/lib/json_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/json_patch.dart |
deleted file mode 100644 |
index 01cce1a0acf915537b717b57237cf0a44e174cfb..0000000000000000000000000000000000000000 |
--- a/sdk/lib/_internal/compiler/implementation/lib/json_patch.dart |
+++ /dev/null |
@@ -1,91 +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; |
- |
-/** |
- * 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|=List|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('=List', '#', 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('=List', '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)); |
-} |