Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Safar <marek.safar@gmail.com>2015-07-20 16:26:07 +0300
committerMarek Safar <marek.safar@gmail.com>2015-07-20 16:26:07 +0300
commit55b4897568cf6c882032970641ae3d052707aba4 (patch)
tree36a5b0d76da18e38a2d7b1f835933b6d94e91963 /mcs/class/System.Json
parent929c7de580ece73b61e5be61b0759df5c6a40946 (diff)
[build] Clean up cross referenced files
Diffstat (limited to 'mcs/class/System.Json')
-rw-r--r--mcs/class/System.Json/Makefile9
-rw-r--r--mcs/class/System.Json/System.Json.dll.sources2
-rw-r--r--mcs/class/System.Json/System.Json/JavaScriptReader.cs333
3 files changed, 334 insertions, 10 deletions
diff --git a/mcs/class/System.Json/Makefile b/mcs/class/System.Json/Makefile
index f16983c58cb..4a4b5c80e68 100644
--- a/mcs/class/System.Json/Makefile
+++ b/mcs/class/System.Json/Makefile
@@ -10,13 +10,4 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
EXTRA_DISTFILES =
-VALID_PROFILE := $(filter 2 4, $(FRAMEWORK_VERSION_MAJOR))
-
-ifndef VALID_PROFILE
-LIBRARY_NAME = dummy-System.Json.dll
-NO_INSTALL = yes
-NO_SIGN_ASSEMBLY = yes
-NO_TEST = yes
-endif
-
include ../../build/library.make
diff --git a/mcs/class/System.Json/System.Json.dll.sources b/mcs/class/System.Json/System.Json.dll.sources
index 47a9ceed63a..3eee0529785 100644
--- a/mcs/class/System.Json/System.Json.dll.sources
+++ b/mcs/class/System.Json/System.Json.dll.sources
@@ -5,4 +5,4 @@ System.Json/JsonObject.cs
System.Json/JsonPrimitive.cs
System.Json/JsonType.cs
System.Json/JsonValue.cs
-../System.ServiceModel.Web/System.Runtime.Serialization.Json/JavaScriptReader.cs \ No newline at end of file
+System.Json/JavaScriptReader.cs \ No newline at end of file
diff --git a/mcs/class/System.Json/System.Json/JavaScriptReader.cs b/mcs/class/System.Json/System.Json/JavaScriptReader.cs
new file mode 100644
index 00000000000..3e97c0bc8ed
--- /dev/null
+++ b/mcs/class/System.Json/System.Json/JavaScriptReader.cs
@@ -0,0 +1,333 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace System.Runtime.Serialization.Json
+{
+ internal class JavaScriptReader
+ {
+ TextReader r;
+ int line = 1, column = 0;
+// bool raise_on_number_error; // FIXME: use it
+
+ public JavaScriptReader (TextReader reader, bool raiseOnNumberError)
+ {
+ if (reader == null)
+ throw new ArgumentNullException ("reader");
+ this.r = reader;
+// raise_on_number_error = raiseOnNumberError;
+ }
+
+ public object Read ()
+ {
+ object v = ReadCore ();
+ SkipSpaces ();
+ if (ReadChar () >= 0)
+ throw JsonError (String.Format ("extra characters in JSON input"));
+ return v;
+ }
+
+ object ReadCore ()
+ {
+ SkipSpaces ();
+ int c = PeekChar ();
+ if (c < 0)
+ throw JsonError ("Incomplete JSON input");
+ switch (c) {
+ case '[':
+ ReadChar ();
+ var list = new List<object> ();
+ SkipSpaces ();
+ if (PeekChar () == ']') {
+ ReadChar ();
+ return list;
+ }
+ while (true) {
+ list.Add (ReadCore ());
+ SkipSpaces ();
+ c = PeekChar ();
+ if (c != ',')
+ break;
+ ReadChar ();
+ continue;
+ }
+ if (ReadChar () != ']')
+ throw JsonError ("JSON array must end with ']'");
+ return list.ToArray ();
+ case '{':
+ ReadChar ();
+ var obj = new Dictionary<string,object> ();
+ SkipSpaces ();
+ if (PeekChar () == '}') {
+ ReadChar ();
+ return obj;
+ }
+ while (true) {
+ SkipSpaces ();
+ if (PeekChar () == '}') {
+ ReadChar ();
+ break;
+ }
+ string name = ReadStringLiteral ();
+ SkipSpaces ();
+ Expect (':');
+ SkipSpaces ();
+ obj [name] = ReadCore (); // it does not reject duplicate names.
+ SkipSpaces ();
+ c = ReadChar ();
+ if (c == ',')
+ continue;
+ if (c == '}')
+ break;
+ }
+#if MONOTOUCH
+ int idx = 0;
+ KeyValuePair<string, object> [] ret = new KeyValuePair<string, object>[obj.Count];
+ foreach (KeyValuePair <string, object> kvp in obj)
+ ret [idx++] = kvp;
+
+ return ret;
+#else
+ return obj.ToArray ();
+#endif
+ case 't':
+ Expect ("true");
+ return true;
+ case 'f':
+ Expect ("false");
+ return false;
+ case 'n':
+ Expect ("null");
+ // FIXME: what should we return?
+ return (string) null;
+ case '"':
+ return ReadStringLiteral ();
+ default:
+ if ('0' <= c && c <= '9' || c == '-')
+ return ReadNumericLiteral ();
+ else
+ throw JsonError (String.Format ("Unexpected character '{0}'", (char) c));
+ }
+ }
+
+ int peek;
+ bool has_peek;
+ bool prev_lf;
+
+ int PeekChar ()
+ {
+ if (!has_peek) {
+ peek = r.Read ();
+ has_peek = true;
+ }
+ return peek;
+ }
+
+ int ReadChar ()
+ {
+ int v = has_peek ? peek : r.Read ();
+
+ has_peek = false;
+
+ if (prev_lf) {
+ line++;
+ column = 0;
+ prev_lf = false;
+ }
+
+ if (v == '\n')
+ prev_lf = true;
+ column++;
+
+ return v;
+ }
+
+ void SkipSpaces ()
+ {
+ while (true) {
+ switch (PeekChar ()) {
+ case ' ': case '\t': case '\r': case '\n':
+ ReadChar ();
+ continue;
+ default:
+ return;
+ }
+ }
+ }
+
+ // It could return either int, long or decimal, depending on the parsed value.
+ object ReadNumericLiteral ()
+ {
+ var sb = new StringBuilder ();
+
+ if (PeekChar () == '-') {
+ sb.Append ((char) ReadChar ());
+ }
+
+ int c;
+ int x = 0;
+ bool zeroStart = PeekChar () == '0';
+ for (; ; x++) {
+ c = PeekChar ();
+ if (c < '0' || '9' < c)
+ break;
+ sb.Append ((char) ReadChar ());
+ if (zeroStart && x == 1)
+ throw JsonError ("leading zeros are not allowed");
+ }
+ if (x == 0) // Reached e.g. for "- "
+ throw JsonError ("Invalid JSON numeric literal; no digit found");
+
+ // fraction
+ bool hasFrac = false;
+ int fdigits = 0;
+ if (PeekChar () == '.') {
+ hasFrac = true;
+ sb.Append ((char) ReadChar ());
+ if (PeekChar () < 0)
+ throw JsonError ("Invalid JSON numeric literal; extra dot");
+ while (true) {
+ c = PeekChar ();
+ if (c < '0' || '9' < c)
+ break;
+ sb.Append ((char) ReadChar ());
+ fdigits++;
+ }
+ if (fdigits == 0)
+ throw JsonError ("Invalid JSON numeric literal; extra dot");
+ }
+
+ c = PeekChar ();
+ if (c != 'e' && c != 'E') {
+ if (!hasFrac) {
+ int valueInt;
+ if (int.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueInt))
+ return valueInt;
+
+ long valueLong;
+ if (long.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueLong))
+ return valueLong;
+
+ ulong valueUlong;
+ if (ulong.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueUlong))
+ return valueUlong;
+ }
+ decimal valueDecimal;
+ if (decimal.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueDecimal) && valueDecimal != 0)
+ return valueDecimal;
+ } else {
+ // exponent
+ sb.Append ((char) ReadChar ());
+ if (PeekChar () < 0)
+ throw new ArgumentException ("Invalid JSON numeric literal; incomplete exponent");
+
+ c = PeekChar ();
+ if (c == '-') {
+ sb.Append ((char) ReadChar ());
+ }
+ else if (c == '+')
+ sb.Append ((char) ReadChar ());
+
+ if (PeekChar () < 0)
+ throw JsonError ("Invalid JSON numeric literal; incomplete exponent");
+ while (true) {
+ c = PeekChar ();
+ if (c < '0' || '9' < c)
+ break;
+ sb.Append ((char) ReadChar ());
+ }
+ }
+
+ return double.Parse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture);
+ }
+
+ StringBuilder vb = new StringBuilder ();
+
+ string ReadStringLiteral ()
+ {
+ if (PeekChar () != '"')
+ throw JsonError ("Invalid JSON string literal format");
+
+ ReadChar ();
+ vb.Length = 0;
+ while (true) {
+ int c = ReadChar ();
+ if (c < 0)
+ throw JsonError ("JSON string is not closed");
+ if (c == '"')
+ return vb.ToString ();
+ else if (c != '\\') {
+ vb.Append ((char) c);
+ continue;
+ }
+
+ // escaped expression
+ c = ReadChar ();
+ if (c < 0)
+ throw JsonError ("Invalid JSON string literal; incomplete escape sequence");
+ switch (c) {
+ case '"':
+ case '\\':
+ case '/':
+ vb.Append ((char) c);
+ break;
+ case 'b':
+ vb.Append ('\x8');
+ break;
+ case 'f':
+ vb.Append ('\f');
+ break;
+ case 'n':
+ vb.Append ('\n');
+ break;
+ case 'r':
+ vb.Append ('\r');
+ break;
+ case 't':
+ vb.Append ('\t');
+ break;
+ case 'u':
+ ushort cp = 0;
+ for (int i = 0; i < 4; i++) {
+ cp <<= 4;
+ if ((c = ReadChar ()) < 0)
+ throw JsonError ("Incomplete unicode character escape literal");
+ if ('0' <= c && c <= '9')
+ cp += (ushort) (c - '0');
+ if ('A' <= c && c <= 'F')
+ cp += (ushort) (c - 'A' + 10);
+ if ('a' <= c && c <= 'f')
+ cp += (ushort) (c - 'a' + 10);
+ }
+ vb.Append ((char) cp);
+ break;
+ default:
+ throw JsonError ("Invalid JSON string literal; unexpected escape character");
+ }
+ }
+ }
+
+ void Expect (char expected)
+ {
+ int c;
+ if ((c = ReadChar ()) != expected)
+ throw JsonError (String.Format ("Expected '{0}', got '{1}'", expected, (char) c));
+ }
+
+ void Expect (string expected)
+ {
+ for (int i = 0; i < expected.Length; i++)
+ if (ReadChar () != expected [i])
+ throw JsonError (String.Format ("Expected '{0}', differed at {1}", expected, i));
+ }
+
+ Exception JsonError (string msg)
+ {
+ return new ArgumentException (String.Format ("{0}. At line {1}, column {2}", msg, line, column));
+ }
+ }
+}