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:
authorEgor Bogatov <egorbo@gmail.com>2018-04-26 20:38:03 +0300
committerAlexander Köplinger <alex.koeplinger@outlook.com>2018-04-26 20:38:03 +0300
commitbce083b1dc73041b65741380aedb60949a9ed991 (patch)
treed8c19863ab654d58eec5b0d900bec9255768c713 /mcs/class/System.Json
parent1320d7512391b8d2288d3ce0dbd909f617b91a6b (diff)
CoreFX: System.Json, System.ServiceModel.Syndication, System.Threading.Tasks.Dataflow (#8246)
Use corefx sources and tests for: - System.Json - System.ServiceModel.Syndication - System.Threading.Tasks.Dataflow
Diffstat (limited to 'mcs/class/System.Json')
-rw-r--r--mcs/class/System.Json/Makefile8
-rw-r--r--mcs/class/System.Json/System.Json.csproj16
-rw-r--r--mcs/class/System.Json/System.Json.dll.sources9
-rw-r--r--mcs/class/System.Json/System.Json/JavaScriptReader.cs333
-rw-r--r--mcs/class/System.Json/System.Json/JsonArray.cs136
-rw-r--r--mcs/class/System.Json/System.Json/JsonObject.cs161
-rw-r--r--mcs/class/System.Json/System.Json/JsonPrimitive.cs183
-rw-r--r--mcs/class/System.Json/System.Json/JsonType.cs11
-rw-r--r--mcs/class/System.Json/System.Json/JsonValue.cs497
-rw-r--r--mcs/class/System.Json/System.Json_xtest.dll.sources2
-rw-r--r--mcs/class/System.Json/corefx/SR.cs24
11 files changed, 45 insertions, 1335 deletions
diff --git a/mcs/class/System.Json/Makefile b/mcs/class/System.Json/Makefile
index b515027edca..01343f223f8 100644
--- a/mcs/class/System.Json/Makefile
+++ b/mcs/class/System.Json/Makefile
@@ -5,7 +5,13 @@ include ../../build/rules.make
LIBRARY = System.Json.dll
LIB_REFS = System System.Xml System.Core
KEYFILE = ../winfx.pub
-LIB_MCS_FLAGS =
+LIB_MCS_FLAGS = \
+ -nowarn:3021
+
+XTEST_LIB_REFS = System System.Core System.Xml Facades/System.Threading.Tasks
+
+RESX_RESOURCE_STRING = \
+ ../../../external/corefx/src/System.Json/src/Resources/Strings.resx
TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
diff --git a/mcs/class/System.Json/System.Json.csproj b/mcs/class/System.Json/System.Json.csproj
index 842156c4ed3..4b3bb16eb41 100644
--- a/mcs/class/System.Json/System.Json.csproj
+++ b/mcs/class/System.Json/System.Json.csproj
@@ -6,7 +6,7 @@
<Platform Condition=" '$(Platform)' == '' ">net_4_x</Platform>
<ProjectGuid>{7C660E7A-C89B-4ACA-9458-492B6D14B168}</ProjectGuid>
<OutputType>Library</OutputType>
- <NoWarn>1699</NoWarn>
+ <NoWarn>1699,3021</NoWarn>
<LangVersion>latest</LangVersion>
<HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Windows_NT'">win32</HostPlatform>
<HostPlatform Condition=" '$(HostPlatform)' == '' and '$(OS)' == 'Unix' and $([System.IO.File]::Exists('/usr/lib/libc.dylib'))">darwin</HostPlatform>
@@ -104,14 +104,16 @@
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
+ <Compile Include="..\..\..\external\corefx\src\System.Json\src\System\Json\JavaScriptReader.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Json\src\System\Json\JsonArray.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Json\src\System\Json\JsonObject.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Json\src\System\Json\JsonPrimitive.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Json\src\System\Json\JsonType.cs" />
+ <Compile Include="..\..\..\external\corefx\src\System.Json\src\System\Json\JsonValue.cs" />
<Compile Include="..\..\build\common\Consts.cs" />
+ <Compile Include="..\..\build\common\SR.cs" />
<Compile Include="Assembly\AssemblyInfo.cs" />
- <Compile Include="System.Json\JavaScriptReader.cs" />
- <Compile Include="System.Json\JsonArray.cs" />
- <Compile Include="System.Json\JsonObject.cs" />
- <Compile Include="System.Json\JsonPrimitive.cs" />
- <Compile Include="System.Json\JsonType.cs" />
- <Compile Include="System.Json\JsonValue.cs" />
+ <Compile Include="corefx\SR.cs" />
</ItemGroup>
<!-- @ALL_SOURCES@ -->
<ItemGroup>
diff --git a/mcs/class/System.Json/System.Json.dll.sources b/mcs/class/System.Json/System.Json.dll.sources
index 6076fc05551..4b2dcf8c14e 100644
--- a/mcs/class/System.Json/System.Json.dll.sources
+++ b/mcs/class/System.Json/System.Json.dll.sources
@@ -1,8 +1,5 @@
../../build/common/Consts.cs
+../../build/common/SR.cs
Assembly/AssemblyInfo.cs
-System.Json/JsonArray.cs
-System.Json/JsonObject.cs
-System.Json/JsonPrimitive.cs
-System.Json/JsonType.cs
-System.Json/JsonValue.cs
-System.Json/JavaScriptReader.cs
+corefx/SR.cs
+../../../external/corefx/src/System.Json/src/System/Json/*.cs
diff --git a/mcs/class/System.Json/System.Json/JavaScriptReader.cs b/mcs/class/System.Json/System.Json/JavaScriptReader.cs
deleted file mode 100644
index 3e97c0bc8ed..00000000000
--- a/mcs/class/System.Json/System.Json/JavaScriptReader.cs
+++ /dev/null
@@ -1,333 +0,0 @@
-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));
- }
- }
-}
diff --git a/mcs/class/System.Json/System.Json/JsonArray.cs b/mcs/class/System.Json/System.Json/JsonArray.cs
deleted file mode 100644
index 524e3e8b750..00000000000
--- a/mcs/class/System.Json/System.Json/JsonArray.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-namespace System.Json
-{
- public class JsonArray : JsonValue, IList<JsonValue>
- {
- List<JsonValue> list;
-
- public JsonArray (params JsonValue [] items)
- {
- list = new List<JsonValue> ();
- AddRange (items);
- }
-
- public JsonArray (IEnumerable<JsonValue> items)
- {
- if (items == null)
- throw new ArgumentNullException ("items");
-
- list = new List<JsonValue> (items);
- }
-
- public override int Count {
- get { return list.Count; }
- }
-
- public bool IsReadOnly {
- get { return false; }
- }
-
- public override sealed JsonValue this [int index] {
- get { return list [index]; }
- set { list [index] = value; }
- }
-
- public override JsonType JsonType {
- get { return JsonType.Array; }
- }
-
- public void Add (JsonValue item)
- {
- list.Add (item);
- }
-
- public void AddRange (IEnumerable<JsonValue> items)
- {
- if (items == null)
- throw new ArgumentNullException ("items");
-
- list.AddRange (items);
- }
-
- public void AddRange (params JsonValue [] items)
- {
- if (items == null)
- return;
-
- list.AddRange (items);
- }
-
- public void Clear ()
- {
- list.Clear ();
- }
-
- public bool Contains (JsonValue item)
- {
- return list.Contains (item);
- }
-
- public void CopyTo (JsonValue [] array, int arrayIndex)
- {
- list.CopyTo (array, arrayIndex);
- }
-
- public int IndexOf (JsonValue item)
- {
- return list.IndexOf (item);
- }
-
- public void Insert (int index, JsonValue item)
- {
- list.Insert (index, item);
- }
-
- public bool Remove (JsonValue item)
- {
- return list.Remove (item);
- }
-
- public void RemoveAt (int index)
- {
- list.RemoveAt (index);
- }
-
- public override void Save (Stream stream)
- {
- if (stream == null)
- throw new ArgumentNullException ("stream");
- stream.WriteByte ((byte) '[');
- for (int i = 0; i < list.Count; i++) {
- JsonValue v = list [i];
- if (v != null)
- v.Save (stream);
- else {
- stream.WriteByte ((byte) 'n');
- stream.WriteByte ((byte) 'u');
- stream.WriteByte ((byte) 'l');
- stream.WriteByte ((byte) 'l');
- }
-
- if (i < Count - 1) {
- stream.WriteByte ((byte) ',');
- stream.WriteByte ((byte) ' ');
- }
- }
- stream.WriteByte ((byte) ']');
- }
-
- IEnumerator<JsonValue> IEnumerable<JsonValue>.GetEnumerator ()
- {
- return list.GetEnumerator ();
- }
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return list.GetEnumerator ();
- }
- }
-}
diff --git a/mcs/class/System.Json/System.Json/JsonObject.cs b/mcs/class/System.Json/System.Json/JsonObject.cs
deleted file mode 100644
index 91366a2243a..00000000000
--- a/mcs/class/System.Json/System.Json/JsonObject.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-using JsonPair = System.Collections.Generic.KeyValuePair<string, System.Json.JsonValue>;
-using JsonPairEnumerable = System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, System.Json.JsonValue>>;
-
-namespace System.Json
-{
- public class JsonObject : JsonValue, IDictionary<string, JsonValue>, ICollection<JsonPair>
- {
- // Use SortedDictionary to make result of ToString() deterministic
- SortedDictionary<string, JsonValue> map;
-
- public JsonObject (params JsonPair [] items)
- {
- map = new SortedDictionary<string, JsonValue> (StringComparer.Ordinal);
-
- if (items != null)
- AddRange (items);
- }
-
- public JsonObject (JsonPairEnumerable items)
- {
- if (items == null)
- throw new ArgumentNullException ("items");
-
- map = new SortedDictionary<string, JsonValue> (StringComparer.Ordinal);
- AddRange (items);
- }
-
- public override int Count {
- get { return map.Count; }
- }
-
- public IEnumerator<JsonPair> GetEnumerator ()
- {
- return map.GetEnumerator ();
- }
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return map.GetEnumerator ();
- }
-
- public override sealed JsonValue this [string key] {
- get { return map [key]; }
- set { map [key] = value; }
- }
-
- public override JsonType JsonType {
- get { return JsonType.Object; }
- }
-
- public ICollection<string> Keys {
- get { return map.Keys; }
- }
-
- public ICollection<JsonValue> Values {
- get { return map.Values; }
- }
-
- public void Add (string key, JsonValue value)
- {
- if (key == null)
- throw new ArgumentNullException ("key");
-
- map.Add (key, value);
- }
-
- public void Add (JsonPair pair)
- {
- Add (pair.Key, pair.Value);
- }
-
- public void AddRange (JsonPairEnumerable items)
- {
- if (items == null)
- throw new ArgumentNullException ("items");
-
- foreach (var pair in items)
- map.Add (pair.Key, pair.Value);
- }
-
- public void AddRange (params JsonPair [] items)
- {
- AddRange ((JsonPairEnumerable) items);
- }
-
- public void Clear ()
- {
- map.Clear ();
- }
-
- bool ICollection<JsonPair>.Contains (JsonPair item)
- {
- return (map as ICollection<JsonPair>).Contains (item);
- }
-
- bool ICollection<JsonPair>.Remove (JsonPair item)
- {
- return (map as ICollection<JsonPair>).Remove (item);
- }
-
- public override bool ContainsKey (string key)
- {
- if (key == null)
- throw new ArgumentNullException ("key");
-
- return map.ContainsKey (key);
- }
-
- public void CopyTo (JsonPair [] array, int arrayIndex)
- {
- (map as ICollection<JsonPair>).CopyTo (array, arrayIndex);
- }
-
- public bool Remove (string key)
- {
- if (key == null)
- throw new ArgumentNullException ("key");
-
- return map.Remove (key);
- }
-
- bool ICollection<JsonPair>.IsReadOnly {
- get { return false; }
- }
-
- public override void Save (Stream stream)
- {
- if (stream == null)
- throw new ArgumentNullException ("stream");
- stream.WriteByte ((byte) '{');
- foreach (JsonPair pair in map) {
- stream.WriteByte ((byte) '"');
- byte [] bytes = Encoding.UTF8.GetBytes (EscapeString (pair.Key));
- stream.Write (bytes, 0, bytes.Length);
- stream.WriteByte ((byte) '"');
- stream.WriteByte ((byte) ',');
- stream.WriteByte ((byte) ' ');
- if (pair.Value == null) {
- stream.WriteByte ((byte) 'n');
- stream.WriteByte ((byte) 'u');
- stream.WriteByte ((byte) 'l');
- stream.WriteByte ((byte) 'l');
- } else
- pair.Value.Save (stream);
- }
- stream.WriteByte ((byte) '}');
- }
-
- public bool TryGetValue (string key, out JsonValue value)
- {
- return map.TryGetValue (key, out value);
- }
- }
-}
diff --git a/mcs/class/System.Json/System.Json/JsonPrimitive.cs b/mcs/class/System.Json/System.Json/JsonPrimitive.cs
deleted file mode 100644
index 24f51ed560a..00000000000
--- a/mcs/class/System.Json/System.Json/JsonPrimitive.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-namespace System.Json
-{
- public class JsonPrimitive : JsonValue
- {
- object value;
-
- public JsonPrimitive (bool value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (byte value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (char value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (decimal value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (double value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (float value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (int value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (long value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (sbyte value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (short value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (string value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (DateTime value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (uint value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (ulong value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (ushort value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (DateTimeOffset value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (Guid value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (TimeSpan value)
- {
- this.value = value;
- }
-
- public JsonPrimitive (Uri value)
- {
- this.value = value;
- }
-
- internal object Value {
- get { return value; }
- }
-
- public override JsonType JsonType {
- get {
- // FIXME: what should we do for null? Handle it as null so far.
- if (value == null)
- return JsonType.String;
-
- switch (Type.GetTypeCode (value.GetType ())) {
- case TypeCode.Boolean:
- return JsonType.Boolean;
- case TypeCode.Char:
- case TypeCode.String:
- case TypeCode.DateTime:
- case TypeCode.Object: // DateTimeOffset || Guid || TimeSpan || Uri
- return JsonType.String;
- default:
- return JsonType.Number;
- }
- }
- }
-
- static readonly byte [] true_bytes = Encoding.UTF8.GetBytes ("true");
- static readonly byte [] false_bytes = Encoding.UTF8.GetBytes ("false");
-
- public override void Save (Stream stream)
- {
- switch (JsonType) {
- case JsonType.Boolean:
- if ((bool) value)
- stream.Write (true_bytes, 0, 4);
- else
- stream.Write (false_bytes, 0, 5);
- break;
- case JsonType.String:
- stream.WriteByte ((byte) '\"');
- byte [] bytes = Encoding.UTF8.GetBytes (EscapeString (value.ToString ()));
- stream.Write (bytes, 0, bytes.Length);
- stream.WriteByte ((byte) '\"');
- break;
- default:
- bytes = Encoding.UTF8.GetBytes (GetFormattedString ());
- stream.Write (bytes, 0, bytes.Length);
- break;
- }
- }
-
- internal string GetFormattedString ()
- {
- switch (JsonType) {
- case JsonType.String:
- if (value is string || value == null)
- return (string) value;
- if (value is char)
- return value.ToString ();
- throw new NotImplementedException ("GetFormattedString from value type " + value.GetType ());
- case JsonType.Number:
- string s;
- if (value is float || value is double)
- // Use "round-trip" format
- s = ((IFormattable) value).ToString ("R", NumberFormatInfo.InvariantInfo);
- else
- s = ((IFormattable) value).ToString ("G", NumberFormatInfo.InvariantInfo);
- if (s == "NaN" || s == "Infinity" || s == "-Infinity")
- return "\"" + s + "\"";
- else
- return s;
- default:
- throw new InvalidOperationException ();
- }
- }
- }
-}
diff --git a/mcs/class/System.Json/System.Json/JsonType.cs b/mcs/class/System.Json/System.Json/JsonType.cs
deleted file mode 100644
index c04f5746c13..00000000000
--- a/mcs/class/System.Json/System.Json/JsonType.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace System.Json
-{
- public enum JsonType
- {
- String,
- Number,
- Object,
- Array,
- Boolean,
- }
-}
diff --git a/mcs/class/System.Json/System.Json/JsonValue.cs b/mcs/class/System.Json/System.Json/JsonValue.cs
deleted file mode 100644
index 450d3bc58b6..00000000000
--- a/mcs/class/System.Json/System.Json/JsonValue.cs
+++ /dev/null
@@ -1,497 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Runtime.Serialization.Json;
-using System.Text;
-
-using JsonPair = System.Collections.Generic.KeyValuePair<string, System.Json.JsonValue>;
-
-
-namespace System.Json
-{
- public abstract class JsonValue : IEnumerable
- {
- public static JsonValue Load (Stream stream)
- {
- if (stream == null)
- throw new ArgumentNullException ("stream");
- return Load (new StreamReader (stream, true));
- }
-
- public static JsonValue Load (TextReader textReader)
- {
- if (textReader == null)
- throw new ArgumentNullException ("textReader");
-
- var ret = new JavaScriptReader (textReader, true).Read ();
-
- return ToJsonValue (ret);
- }
-
- static IEnumerable<KeyValuePair<string,JsonValue>> ToJsonPairEnumerable (IEnumerable<KeyValuePair<string,object>> kvpc)
- {
- foreach (var kvp in kvpc)
- yield return new KeyValuePair<string,JsonValue> (kvp.Key, ToJsonValue (kvp.Value));
- }
-
- static IEnumerable<JsonValue> ToJsonValueEnumerable (IEnumerable<object> arr)
- {
- foreach (var obj in arr)
- yield return ToJsonValue (obj);
- }
-
- static JsonValue ToJsonValue (object ret)
- {
- if (ret == null)
- return null;
- var kvpc = ret as IEnumerable<KeyValuePair<string,object>>;
- if (kvpc != null)
- return new JsonObject (ToJsonPairEnumerable (kvpc));
- var arr = ret as IEnumerable<object>;
- if (arr != null)
- return new JsonArray (ToJsonValueEnumerable (arr));
-
- if (ret is bool)
- return new JsonPrimitive ((bool) ret);
- if (ret is byte)
- return new JsonPrimitive ((byte) ret);
- if (ret is char)
- return new JsonPrimitive ((char) ret);
- if (ret is decimal)
- return new JsonPrimitive ((decimal) ret);
- if (ret is double)
- return new JsonPrimitive ((double) ret);
- if (ret is float)
- return new JsonPrimitive ((float) ret);
- if (ret is int)
- return new JsonPrimitive ((int) ret);
- if (ret is long)
- return new JsonPrimitive ((long) ret);
- if (ret is sbyte)
- return new JsonPrimitive ((sbyte) ret);
- if (ret is short)
- return new JsonPrimitive ((short) ret);
- if (ret is string)
- return new JsonPrimitive ((string) ret);
- if (ret is uint)
- return new JsonPrimitive ((uint) ret);
- if (ret is ulong)
- return new JsonPrimitive ((ulong) ret);
- if (ret is ushort)
- return new JsonPrimitive ((ushort) ret);
- if (ret is DateTime)
- return new JsonPrimitive ((DateTime) ret);
- if (ret is DateTimeOffset)
- return new JsonPrimitive ((DateTimeOffset) ret);
- if (ret is Guid)
- return new JsonPrimitive ((Guid) ret);
- if (ret is TimeSpan)
- return new JsonPrimitive ((TimeSpan) ret);
- if (ret is Uri)
- return new JsonPrimitive ((Uri) ret);
- throw new NotSupportedException (String.Format ("Unexpected parser return type: {0}", ret.GetType ()));
- }
-
- public static JsonValue Parse (string jsonString)
- {
- if (jsonString == null)
- throw new ArgumentNullException ("jsonString");
- return Load (new StringReader (jsonString));
- }
-
- public virtual int Count {
- get { throw new InvalidOperationException (); }
- }
-
- public abstract JsonType JsonType { get; }
-
- public virtual JsonValue this [int index] {
- get { throw new InvalidOperationException (); }
- set { throw new InvalidOperationException (); }
- }
-
- public virtual JsonValue this [string key] {
- get { throw new InvalidOperationException (); }
- set { throw new InvalidOperationException (); }
- }
-
- public virtual bool ContainsKey (string key)
- {
- throw new InvalidOperationException ();
- }
-
- public virtual void Save (Stream stream)
- {
- if (stream == null)
- throw new ArgumentNullException ("stream");
- Save (new StreamWriter (stream));
- }
-
- public virtual void Save (TextWriter textWriter)
- {
- if (textWriter == null)
- throw new ArgumentNullException ("textWriter");
- SaveInternal (textWriter);
- }
-
- void SaveInternal (TextWriter w)
- {
- switch (JsonType) {
- case JsonType.Object:
- w.Write ('{');
- bool following = false;
- foreach (JsonPair pair in ((JsonObject) this)) {
- if (following)
- w.Write (", ");
- w.Write ('\"');
- w.Write (EscapeString (pair.Key));
- w.Write ("\": ");
- if (pair.Value == null)
- w.Write ("null");
- else
- pair.Value.SaveInternal (w);
- following = true;
- }
- w.Write ('}');
- break;
- case JsonType.Array:
- w.Write ('[');
- following = false;
- foreach (JsonValue v in ((JsonArray) this)) {
- if (following)
- w.Write (", ");
- if (v != null)
- v.SaveInternal (w);
- else
- w.Write ("null");
- following = true;
- }
- w.Write (']');
- break;
- case JsonType.Boolean:
- w.Write ((bool) this ? "true" : "false");
- break;
- case JsonType.String:
- w.Write ('"');
- w.Write (EscapeString (((JsonPrimitive) this).GetFormattedString ()));
- w.Write ('"');
- break;
- default:
- w.Write (((JsonPrimitive) this).GetFormattedString ());
- break;
- }
- }
-
- public override string ToString ()
- {
- StringWriter sw = new StringWriter ();
- Save (sw);
- return sw.ToString ();
- }
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- throw new InvalidOperationException ();
- }
-
- // Characters which have to be escaped:
- // - Required by JSON Spec: Control characters, '"' and '\\'
- // - Broken surrogates to make sure the JSON string is valid Unicode
- // (and can be encoded as UTF8)
- // - JSON does not require U+2028 and U+2029 to be escaped, but
- // JavaScript does require this:
- // http://stackoverflow.com/questions/2965293/javascript-parse-error-on-u2028-unicode-character/9168133#9168133
- // - '/' also does not have to be escaped, but escaping it when
- // preceeded by a '<' avoids problems with JSON in HTML <script> tags
- bool NeedEscape (string src, int i) {
- char c = src [i];
- return c < 32 || c == '"' || c == '\\'
- // Broken lead surrogate
- || (c >= '\uD800' && c <= '\uDBFF' &&
- (i == src.Length - 1 || src [i + 1] < '\uDC00' || src [i + 1] > '\uDFFF'))
- // Broken tail surrogate
- || (c >= '\uDC00' && c <= '\uDFFF' &&
- (i == 0 || src [i - 1] < '\uD800' || src [i - 1] > '\uDBFF'))
- // To produce valid JavaScript
- || c == '\u2028' || c == '\u2029'
- // Escape "</" for <script> tags
- || (c == '/' && i > 0 && src [i - 1] == '<');
- }
-
- internal string EscapeString (string src)
- {
- if (src == null)
- return null;
-
- for (int i = 0; i < src.Length; i++)
- if (NeedEscape (src, i)) {
- var sb = new StringBuilder ();
- if (i > 0)
- sb.Append (src, 0, i);
- return DoEscapeString (sb, src, i);
- }
- return src;
- }
-
- string DoEscapeString (StringBuilder sb, string src, int cur)
- {
- int start = cur;
- for (int i = cur; i < src.Length; i++)
- if (NeedEscape (src, i)) {
- sb.Append (src, start, i - start);
- switch (src [i]) {
- case '\b': sb.Append ("\\b"); break;
- case '\f': sb.Append ("\\f"); break;
- case '\n': sb.Append ("\\n"); break;
- case '\r': sb.Append ("\\r"); break;
- case '\t': sb.Append ("\\t"); break;
- case '\"': sb.Append ("\\\""); break;
- case '\\': sb.Append ("\\\\"); break;
- case '/': sb.Append ("\\/"); break;
- default:
- sb.Append ("\\u");
- sb.Append (((int) src [i]).ToString ("x04"));
- break;
- }
- start = i + 1;
- }
- sb.Append (src, start, src.Length - start);
- return sb.ToString ();
- }
-
- // CLI -> JsonValue
-
- public static implicit operator JsonValue (bool value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (byte value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (char value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (decimal value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (double value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (float value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (int value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (long value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (sbyte value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (short value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (string value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (uint value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (ulong value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (ushort value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (DateTime value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (DateTimeOffset value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (Guid value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (TimeSpan value)
- {
- return new JsonPrimitive (value);
- }
-
- public static implicit operator JsonValue (Uri value)
- {
- return new JsonPrimitive (value);
- }
-
- // JsonValue -> CLI
-
- public static implicit operator bool (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToBoolean (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator byte (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToByte (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator char (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToChar (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator decimal (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToDecimal (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator double (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToDouble (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator float (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToSingle (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator int (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToInt32 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator long (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToInt64 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator sbyte (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToSByte (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator short (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToInt16 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator string (JsonValue value)
- {
- if (value == null)
- return null;
- return (string) ((JsonPrimitive) value).Value;
- }
-
- public static implicit operator uint (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToUInt32 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator ulong (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToUInt64(((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator ushort (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return Convert.ToUInt16 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
- }
-
- public static implicit operator DateTime (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return (DateTime) ((JsonPrimitive) value).Value;
- }
-
- public static implicit operator DateTimeOffset (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return (DateTimeOffset) ((JsonPrimitive) value).Value;
- }
-
- public static implicit operator TimeSpan (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return (TimeSpan) ((JsonPrimitive) value).Value;
- }
-
- public static implicit operator Guid (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return (Guid) ((JsonPrimitive) value).Value;
- }
-
- public static implicit operator Uri (JsonValue value)
- {
- if (value == null)
- throw new ArgumentNullException ("value");
- return (Uri) ((JsonPrimitive) value).Value;
- }
- }
-}
diff --git a/mcs/class/System.Json/System.Json_xtest.dll.sources b/mcs/class/System.Json/System.Json_xtest.dll.sources
new file mode 100644
index 00000000000..90d91df6426
--- /dev/null
+++ b/mcs/class/System.Json/System.Json_xtest.dll.sources
@@ -0,0 +1,2 @@
+../../../external/corefx/src/CoreFx.Private.TestUtilities/src/System/AssertExtensions.cs
+../../../external/corefx/src/System.Json/tests/*.cs
diff --git a/mcs/class/System.Json/corefx/SR.cs b/mcs/class/System.Json/corefx/SR.cs
new file mode 100644
index 00000000000..607b7f02f0d
--- /dev/null
+++ b/mcs/class/System.Json/corefx/SR.cs
@@ -0,0 +1,24 @@
+//
+// This file was generated by resx2sr tool
+//
+
+partial class SR
+{
+ public const string ArgumentException_ExtraCharacters = "Extra characters in JSON input.";
+ public const string ArgumentException_IncompleteInput = "Incomplete JSON input.";
+ public const string ArgumentException_UnexpectedCharacter = "Unexpected character '{0}'.";
+ public const string ArgumentException_ArrayMustEndWithBracket = "JSON array must end with ']'.";
+ public const string ArgumentException_LeadingZeros = "Leading zeros are not allowed.";
+ public const string ArgumentException_NoDigitFound = "Invalid JSON numeric literal; no digit found.";
+ public const string ArgumentException_ExtraDot = "Invalid JSON numeric literal; extra dot.";
+ public const string ArgumentException_IncompleteExponent = "Invalid JSON numeric literal; incomplete exponent.";
+ public const string ArgumentException_InvalidLiteralFormat = "Invalid JSON string literal format.";
+ public const string ArgumentException_StringNotClosed = "JSON string is not closed.";
+ public const string ArgumentException_IncompleteEscapeSequence = "Invalid JSON string literal; incomplete escape sequence.";
+ public const string ArgumentException_IncompleteEscapeLiteral = "Incomplete unicode character escape literal.";
+ public const string ArgumentException_UnexpectedEscapeCharacter = "Invalid JSON string literal; unexpected escape character.";
+ public const string ArgumentException_ExpectedXButGotY = "Expected '{0}', got '{1}'.";
+ public const string ArgumentException_ExpectedXDiferedAtY = "Expected '{0}', differed at {1}.";
+ public const string ArgumentException_MessageAt = "{0} At line {1}, column {2}.";
+ public const string NotImplemented_GetFormattedString = "GetFormattedString from value type {0}.";
+}