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

Unified Diff: sdk/lib/convert/json.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/libraries.dart ('k') | sdk/lib/json/json.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/convert/json.dart
diff --git a/sdk/lib/convert/json.dart b/sdk/lib/convert/json.dart
index 035a89e46eadc760edb811d0071046131d2ab09d..845d53fc791a0c1c883b8c2f3b8f0cab5c24f9b4 100644
--- a/sdk/lib/convert/json.dart
+++ b/sdk/lib/convert/json.dart
@@ -5,6 +5,47 @@
part of dart.convert;
/**
+ * Error thrown by JSON serialization if an object cannot be serialized.
+ *
+ * The [unsupportedObject] field holds that object that failed to be serialized.
+ *
+ * If an object isn't directly serializable, the serializer calls the 'toJson'
+ * method on the object. If that call fails, the error will be stored in the
+ * [cause] field. If the call returns an object that isn't directly
+ * serializable, the [cause] is be null.
+ */
+class JsonUnsupportedObjectError extends Error {
+ /** The object that could not be serialized. */
+ final unsupportedObject;
+ /** The exception thrown by object's [:toJson:] method, if any. */
+ final cause;
+
+ JsonUnsupportedObjectError(this.unsupportedObject, { this.cause });
+
+ String toString() {
+ if (cause != null) {
+ return "Calling toJson method on object failed.";
+ } else {
+ return "Object toJson method returns non-serializable value.";
+ }
+ }
+}
+
+
+/**
+ * Reports that an object could not be stringified due to cyclic references.
+ *
+ * An object that references itself cannot be serialized by [stringify].
+ * When the cycle is detected, a [JsonCyclicError] is thrown.
+ */
+class JsonCyclicError extends JsonUnsupportedObjectError {
+ /** The first object that was detected as part of a cycle. */
+ JsonCyclicError(Object object): super(object);
+ String toString() => "Cyclic error in JSON stringify";
+}
+
+
+/**
* An instance of the default implementation of the [JsonCodec].
*
* This instance provides a convenient access to the most common JSON
@@ -181,7 +222,7 @@ class JsonDecoder extends Converter<String, Object> {
*
* Throws [FormatException] if the input is not valid JSON text.
*/
- Object convert(String input) => OLD_JSON_LIB.parse(input, _reviver);
+ Object convert(String input) => _parseJson(input, _reviver);
/**
* Starts a conversion from a chunked JSON string to its corresponding
@@ -217,8 +258,11 @@ class _JsonDecoderSink extends _StringSinkConversionSink {
StringBuffer buffer = _stringSink;
String accumulated = buffer.toString();
buffer.clear();
- Object decoded = OLD_JSON_LIB.parse(accumulated, _reviver);
+ Object decoded = _parseJson(accumulated, _reviver);
_chunkedSink.add(decoded);
_chunkedSink.close();
}
}
+
+// Internal optimized JSON parsing implementation.
+external _parseJson(String source, reviver(key, value));
« no previous file with comments | « sdk/lib/_internal/libraries.dart ('k') | sdk/lib/json/json.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698