[corlib] Char from reference sourcers
authorMarek Safar <marek.safar@gmail.com>
Mon, 19 Jan 2015 14:35:47 +0000 (15:35 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 19 Jan 2015 15:23:03 +0000 (16:23 +0100)
mcs/class/corlib/Makefile
mcs/class/corlib/System.Globalization/CharUnicodeInfo.cs
mcs/class/corlib/System.Globalization/TextInfo.cs
mcs/class/corlib/System/AggregateException.cs [deleted file]
mcs/class/corlib/System/Char.cs [deleted file]
mcs/class/corlib/System/Environment.cs
mcs/class/corlib/System/String.cs
mcs/class/corlib/corlib.dll.sources
mono/metadata/appdomain.c
mono/metadata/icall-def.h
mono/metadata/icall.c

index 9a304fe7ec58be56f0a0326e67e02f44fcad761c..1a46243910773cd8bda4e27a24c8b2ad0893a09f 100644 (file)
@@ -33,7 +33,7 @@ RESOURCE_FILES = \
        resources/collation.cjkKO.bin \
        resources/collation.cjkKOlv2.bin
 
-REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL
+REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK
 LOCAL_MCS_FLAGS = -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC $(REFERENCE_SOURCES_FLAGS)
 DEFAULT_REFERENCES =
 
index fd6820d1d4561e70628cd9eb8e6c70544531dce0..e4f6594be8165eb2509491db471900bf07ddc075 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 using System;
+using System.Diagnostics.Contracts;
+using System.Runtime.CompilerServices;
 
 namespace System.Globalization
 {
        public static class CharUnicodeInfo
        {
+               static CharUnicodeInfo ()
+               {
+                       unsafe {
+                               GetDataTablePointers (CategoryDataVersion,
+                                       out category_data, out category_astral_index, out numeric_data,
+                                       out numeric_data_values, out to_lower_data_low, out to_lower_data_high,
+                                       out to_upper_data_low, out to_upper_data_high);
+                               category_check_pair = category_astral_index != null
+                                       ? (byte)UnicodeCategory.Surrogate
+                                       : (byte)0xff;
+                       }
+               }
+
+               private readonly unsafe static byte *category_data;
+               private readonly unsafe static ushort *category_astral_index;
+               private readonly unsafe static byte *numeric_data; // unused
+               private readonly unsafe static double *numeric_data_values;      // unused
+               private readonly unsafe static ushort *to_lower_data_low;
+               private readonly unsafe static ushort *to_lower_data_high;
+               private readonly unsafe static ushort *to_upper_data_low;
+               private readonly unsafe static ushort *to_upper_data_high;
+
+               // UnicodeCategory.Surrogate if astral plane
+               // categories are available, 0xff otherwise.
+               private readonly static byte category_check_pair;
+
+               private const int CategoryDataVersion = 4;
+
+               [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+               private unsafe static extern void GetDataTablePointers (int category_data_version,
+                       out byte *category_data, out ushort *category_astral_index, out byte *numeric_data,
+                       out double *numeric_data_values, out ushort *to_lower_data_low, out ushort *to_lower_data_high,
+                       out ushort *to_upper_data_low, out ushort *to_upper_data_high);
+
                public static int GetDecimalDigitValue (char ch)
                {
                        int i = (int) ch;
@@ -297,16 +333,102 @@ namespace System.Globalization
 
                public static UnicodeCategory GetUnicodeCategory (char ch)
                {
-                       return Char.GetUnicodeCategory (ch);
+                       return (InternalGetUnicodeCategory(ch)) ;
                }
 
                public static UnicodeCategory GetUnicodeCategory (string s, int index)
                {
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-                       if (((uint)index)>=((uint)s.Length))
+                       if (s==null)
+                               throw new ArgumentNullException("s");
+                       if (((uint)index)>=((uint)s.Length)) {
                                throw new ArgumentOutOfRangeException("index");
-                       return Char.GetUnicodeCategory (s, index);
+                       }
+                       Contract.EndContractBlock();
+                       return InternalGetUnicodeCategory(s, index);
+               }
+
+               internal static char ToLowerInvariant (char c)
+               {
+                       unsafe {
+                               if (c <= ((char)0x24cf))
+                                       return (char) to_lower_data_low [c];
+                               if (c >= ((char)0xff21))
+                                       return (char) to_lower_data_high[c - 0xff21];
+                       }
+                       return c;
+               }
+
+               public static char ToUpperInvariant (char c)
+               {
+                       unsafe {
+                               if (c <= ((char)0x24e9))
+                                       return (char) to_upper_data_low [c];
+                               if (c >= ((char)0xff21))
+                                       return (char) to_upper_data_high [c - 0xff21];
+                       }
+                       return c;
+               }
+
+               internal unsafe static UnicodeCategory InternalGetUnicodeCategory (int ch)
+               {
+                       return (UnicodeCategory)(category_data [ch]);
+               }
+
+               internal static UnicodeCategory InternalGetUnicodeCategory (string value, int index) {
+                       Contract.Assert(value != null, "value can not be null");
+                       Contract.Assert(index < value.Length, "index < value.Length");
+
+                       UnicodeCategory c = GetUnicodeCategory (value [index]);
+                       if ((byte)c == category_check_pair &&
+                               Char.IsSurrogatePair (value, index)) {
+                               int u = Char.ConvertToUtf32 (value [index], value [index + 1]);
+                               unsafe {
+                                       // ConvertToUtf32 guarantees 0x10000 <= u <= 0x10ffff
+                                       int x = (category_astral_index [(u - 0x10000) >> 8] << 8) + (u & 0xff);
+
+                                       c = (UnicodeCategory)category_data [x];
+                               }
+                       }
+
+                       return c;
+               }
+
+               internal const char  HIGH_SURROGATE_START  = '\ud800';
+               internal const char  HIGH_SURROGATE_END    = '\udbff';
+               internal const char  LOW_SURROGATE_START   = '\udc00';
+               internal const char  LOW_SURROGATE_END     = '\udfff';
+
+               internal static bool IsWhiteSpace(String s, int index)
+               {
+                       Contract.Assert(s != null, "s!=null");
+                       Contract.Assert(index >= 0 && index < s.Length, "index >= 0 && index < s.Length");
+
+                       UnicodeCategory uc = GetUnicodeCategory(s, index);
+                       // In Unicode 3.0, U+2028 is the only character which is under the category "LineSeparator".
+                       // And U+2029 is th eonly character which is under the category "ParagraphSeparator".
+                       switch (uc) {
+                               case (UnicodeCategory.SpaceSeparator):
+                               case (UnicodeCategory.LineSeparator):
+                               case (UnicodeCategory.ParagraphSeparator):
+                                       return (true);
+                       }
+                       return (false);
+               }
+
+
+               internal static bool IsWhiteSpace(char c)
+               {
+                       UnicodeCategory uc = GetUnicodeCategory(c);
+                       // In Unicode 3.0, U+2028 is the only character which is under the category "LineSeparator".
+                       // And U+2029 is th eonly character which is under the category "ParagraphSeparator".
+                       switch (uc) {
+                               case (UnicodeCategory.SpaceSeparator):
+                               case (UnicodeCategory.LineSeparator):
+                               case (UnicodeCategory.ParagraphSeparator):
+                                       return (true);
+                       }
+
+                       return (false);
                }
        }
 }
index 262c38775fa42bb034a0d82e890a46d2cc15c917..cad47f2e486b6527a7c23cad719b6dc251de10ea 100644 (file)
@@ -311,7 +311,7 @@ namespace System.Globalization {
                                return (char) (c + 0x20);
 
                        if (ci == null || ci.LCID == 0x7F)
-                               return Char.ToLowerInvariant (c);
+                               return CharUnicodeInfo.ToLowerInvariant (c);
 
                        switch (c) {
                        case '\u0049': // Latin uppercase I
@@ -341,7 +341,7 @@ namespace System.Globalization {
                        case '\u03d4':  // ? it is not in ICU
                                return '\u03cb';
                        }
-                       return Char.ToLowerInvariant (c);
+                       return CharUnicodeInfo.ToLowerInvariant (c);
                }
 
                public virtual char ToUpper (char c)
@@ -353,7 +353,7 @@ namespace System.Globalization {
                                return (char) (c - 0x20);
 
                        if (ci == null || ci.LCID == 0x7F)
-                               return Char.ToUpperInvariant (c);
+                               return CharUnicodeInfo.ToUpperInvariant (c);
 
                        switch (c) {
                        case '\u0069': // Latin lowercase i
@@ -391,7 +391,7 @@ namespace System.Globalization {
                        // not handled here.
                        }
 
-                       return Char.ToUpperInvariant (c);
+                       return CharUnicodeInfo.ToUpperInvariant (c);
                }
 
                private char ToTitleCase (char c)
diff --git a/mcs/class/corlib/System/AggregateException.cs b/mcs/class/corlib/System/AggregateException.cs
deleted file mode 100644 (file)
index 7a2d1f4..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-//
-// AggregateException.cs
-//
-// Authors:
-//   Marek Safar (marek.safar@gmail.com)
-//
-// Copyright (c) 2008 Jérémie "Garuma" Laval
-// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-//
-
-using System;
-using System.Collections.ObjectModel;
-using System.Collections.Generic;
-using System.Runtime.Serialization;
-
-namespace System
-{
-       [System.SerializableAttribute]
-       [System.Diagnostics.DebuggerDisplay ("Count = {InnerExceptions.Count}")]
-       public class AggregateException : Exception
-       {
-               List<Exception> innerExceptions = new List<Exception> ();
-               const string defaultMessage = "One or more errors occurred";
-               
-               public AggregateException () : base (defaultMessage)
-               {
-               }
-               
-               public AggregateException (string message): base (message)
-               {
-               }
-               
-               public AggregateException (string message, Exception innerException): base (message, innerException)
-               {
-                       if (innerException == null)
-                               throw new ArgumentNullException ("innerException");
-                       innerExceptions.Add (innerException);
-               }
-               
-               protected AggregateException (SerializationInfo info, StreamingContext context)
-                       : base (info, context)
-               {
-               }
-               
-               public AggregateException (params Exception[] innerExceptions)
-                       : this (defaultMessage, innerExceptions)
-               {
-               }
-               
-               public AggregateException (string message, params Exception[] innerExceptions)
-                       : base (message, innerExceptions == null || innerExceptions.Length == 0 ? null : innerExceptions[0])
-               {
-                       if (innerExceptions == null)
-                               throw new ArgumentNullException ("innerExceptions");
-                       foreach (var exception in innerExceptions)
-                               if (exception == null)
-                                       throw new ArgumentException ("One of the inner exception is null", "innerExceptions");
-
-                       this.innerExceptions.AddRange (innerExceptions);
-               }
-               
-               public AggregateException (IEnumerable<Exception> innerExceptions)
-                       : this (defaultMessage, innerExceptions)
-               {
-               }
-               
-               public AggregateException (string message, IEnumerable<Exception> innerExceptions)
-                       : this (message, new List<Exception> (innerExceptions).ToArray ())
-               {
-               }
-               
-               public AggregateException Flatten ()
-               {
-                       List<Exception> inner = new List<Exception> ();
-                       
-                       foreach (Exception e in innerExceptions) {
-                               AggregateException aggEx = e as AggregateException;
-                               if (aggEx != null) {
-                                       inner.AddRange (aggEx.Flatten ().InnerExceptions);
-                               } else {
-                                       inner.Add (e);
-                               }                               
-                       }
-
-                       return new AggregateException (inner);
-               }
-               
-               public void Handle (Func<Exception, bool> predicate)
-               {
-                       if (predicate == null)
-                               throw new ArgumentNullException ("predicate");
-
-                       List<Exception> failed = new List<Exception> ();
-                       foreach (var e in innerExceptions) {
-                               if (!predicate (e))
-                                       failed.Add (e);
-                       }
-
-                       if (failed.Count > 0)
-                               throw new AggregateException (failed);
-               }
-               
-               public ReadOnlyCollection<Exception> InnerExceptions {
-                       get {
-                               return innerExceptions.AsReadOnly ();
-                       }
-               }
-
-               public override string ToString ()
-               {
-                       System.Text.StringBuilder finalMessage = new System.Text.StringBuilder (base.ToString ());
-
-                       int currentIndex = -1;
-                       foreach (Exception e in innerExceptions) {
-                               finalMessage.Append (Environment.NewLine);
-                               finalMessage.Append (" --> (Inner exception ");
-                               finalMessage.Append (++currentIndex);
-                               finalMessage.Append (") ");
-                               finalMessage.Append (e.ToString ());
-                               finalMessage.Append (Environment.NewLine);
-                       }
-                       return finalMessage.ToString ();
-               }
-
-               public override void GetObjectData (SerializationInfo info,     StreamingContext context)
-               {
-                       if (info == null) {
-                               throw new ArgumentNullException("info");
-                       }
-                       base.GetObjectData(info, context);
-                       info.AddValue ("InnerExceptions", innerExceptions.ToArray(), typeof (Exception[]));
-               }
-
-               public override Exception GetBaseException ()
-               {
-                       Exception inner = this;
-                       for (var ae = this; ae.innerExceptions.Count == 1;) {
-                               inner = ae.InnerExceptions [0];
-
-                               var aei = inner as AggregateException;
-                               if (aei == null)
-                                       break;
-
-                               ae = aei;
-                       }
-
-                       return inner;
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/Char.cs b/mcs/class/corlib/System/Char.cs
deleted file mode 100644 (file)
index 977fdce..0000000
+++ /dev/null
@@ -1,608 +0,0 @@
-//
-// System.Char.cs
-//
-// Authors:
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//   Miguel de Icaza (miguel@ximian.com)
-//   Jackson Harper (jackson@ximian.com)
-//
-// (C) Ximian, Inc.  http://www.ximian.com
-// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-// Note about the ToString()'s. ECMA says there's only a ToString() method, 
-// BUT it is just a wrapper for ToString(null). However there is no other ToString
-// in the docs. Turning to the NET framework sdk reveals that there is a 
-// ToString(formatprovider) method, as well as a 'static ToString (char c)' method, 
-// which appears to just be a Convert.ToString(char c) type method. ECMA also
-// doesn't list this class as implementing IFormattable.
-
-using System.Globalization;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public struct Char : IComparable, IConvertible, IComparable <char>, IEquatable <char>
-       {
-               public const char MaxValue = (char) 0xffff;
-               public const char MinValue = (char) 0;
-
-               internal char m_value;
-
-               static Char ()
-               {
-                       unsafe {
-                               GetDataTablePointers (CategoryDataVersion,
-                                       out category_data, out category_astral_index, out numeric_data,
-                                       out numeric_data_values, out to_lower_data_low, out to_lower_data_high,
-                                       out to_upper_data_low, out to_upper_data_high);
-                               category_check_pair = category_astral_index != null
-                                       ? (byte)UnicodeCategory.Surrogate
-                                       : (byte)0xff;
-                       }
-               }
-
-               private readonly unsafe static byte *category_data;
-               private readonly unsafe static ushort *category_astral_index;
-               private readonly unsafe static byte *numeric_data;
-               private readonly unsafe static double *numeric_data_values;
-               private readonly unsafe static ushort *to_lower_data_low;
-               private readonly unsafe static ushort *to_lower_data_high;
-               private readonly unsafe static ushort *to_upper_data_low;
-               private readonly unsafe static ushort *to_upper_data_high;
-
-               // UnicodeCategory.Surrogate if astral plane
-               // categories are available, 0xff otherwise.
-               private readonly static byte category_check_pair;
-
-               private const int CategoryDataVersion = 4;
-
-               [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
-               private unsafe static extern void GetDataTablePointers (int category_data_version,
-                       out byte *category_data, out ushort *category_astral_index, out byte *numeric_data,
-                       out double *numeric_data_values, out ushort *to_lower_data_low, out ushort *to_lower_data_high,
-                       out ushort *to_upper_data_low, out ushort *to_upper_data_high);
-
-               public int CompareTo (object value)
-               {
-                       if (value == null)
-                               return 1;
-                       
-                       if (!(value is System.Char))
-                               throw new ArgumentException (Locale.GetText ("Value is not a System.Char"));
-
-                       char xv = (char) value;
-                       if (m_value == xv)
-                               return 0;
-
-                       if (m_value > xv)
-                               return 1;
-                       else
-                               return -1;
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (!(obj is Char))
-                               return false;
-
-                       return ((char) obj) == m_value;
-               }
-
-               public int CompareTo (char value)
-               {
-                       if (m_value == value)
-                               return 0;
-
-                       if (m_value > value)
-                               return 1;
-                       else
-                               return -1;
-               }
-
-               public static string ConvertFromUtf32 (int utf32)
-               {
-                       if (utf32 < 0 || utf32 > 0x10FFFF)
-                               throw new ArgumentOutOfRangeException ("utf32", "The argument must be from 0 to 0x10FFFF.");
-                       if (0xD800 <= utf32 && utf32 <= 0xDFFF)
-                               throw new ArgumentOutOfRangeException ("utf32", "The argument must not be in surrogate pair range.");
-                       if (utf32 < 0x10000)
-                               return new string ((char) utf32, 1);
-                       utf32 -= 0x10000;
-                       return new string (
-                               new char [] {(char) ((utf32 >> 10) + 0xD800),
-                               (char) (utf32 % 0x0400 + 0xDC00)});
-               }
-
-               public static int ConvertToUtf32 (char highSurrogate, char lowSurrogate)
-               {
-                       if (highSurrogate < 0xD800 || 0xDBFF < highSurrogate)
-                               throw new ArgumentOutOfRangeException ("highSurrogate");
-                       if (lowSurrogate < 0xDC00 || 0xDFFF < lowSurrogate)
-                               throw new ArgumentOutOfRangeException ("lowSurrogate");
-
-                       return 0x10000 + ((highSurrogate - 0xD800) << 10) + (lowSurrogate - 0xDC00);
-               }
-
-               public static int ConvertToUtf32 (string s, int index)
-               {
-                       CheckParameter (s, index);
-
-                       if (!Char.IsSurrogate (s [index]))
-                               return s [index];
-                       if (!Char.IsHighSurrogate (s [index])
-                           || index == s.Length - 1
-                           || !Char.IsLowSurrogate (s [index + 1]))
-                               throw new ArgumentException (String.Format ("The string contains invalid surrogate pair character at {0}", index));
-                       return ConvertToUtf32 (s [index], s [index + 1]);
-               }
-
-               public bool Equals (char obj)
-               {
-                       return m_value == obj;
-               }
-
-               public static bool IsSurrogatePair (char highSurrogate, char lowSurrogate)
-               {
-                       return '\uD800' <= highSurrogate && highSurrogate <= '\uDBFF'
-                               && '\uDC00' <= lowSurrogate && lowSurrogate <= '\uDFFF';
-               }
-
-               public static bool IsSurrogatePair (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return index + 1 < s.Length && IsSurrogatePair (s [index], s [index + 1]);
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int)m_value | ((int)m_value << 16);
-               }
-
-               public static double GetNumericValue (char c)
-               {
-                       if (c > (char)0x3289) {
-                               if (c >= (char)0xFF10 && c <= (char)0xFF19)
-                                       return (c - 0xFF10); // Numbers 0-9
-
-                               // Default not set data
-                               return -1;
-                       }
-                       else {
-                               unsafe {
-                                       return numeric_data_values [numeric_data [c]];
-                               }
-                       }
-                       
-               }
-
-               public static double GetNumericValue (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return GetNumericValue (s[index]);
-               }
-
-               public static UnicodeCategory GetUnicodeCategory (char c)
-               {
-                       unsafe {
-                               return (UnicodeCategory)(category_data [c]);
-                       }
-               }
-
-               public static UnicodeCategory GetUnicodeCategory (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       UnicodeCategory c = GetUnicodeCategory (s [index]);
-
-                       if ((byte)c == category_check_pair &&
-                           IsSurrogatePair (s, index)) {
-                               int u = ConvertToUtf32 (s [index], s [index + 1]);
-                               unsafe {
-                                       // ConvertToUtf32 guarantees 0x10000 <= u <= 0x10ffff
-                                       int x = (category_astral_index [(u - 0x10000) >> 8] << 8) + (u & 0xff);
-
-                                       c = (UnicodeCategory)category_data [x];
-                               }
-                       }
-
-                       return c;
-               }
-
-               public static bool IsControl (char c)
-               {
-                       unsafe {
-                               return (category_data [c] == (byte)UnicodeCategory.Control);
-                       }
-               }
-
-               public static bool IsControl (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsControl (s[index]);
-               }       
-
-               public static bool IsDigit (char c)
-               {
-                       unsafe {
-                               return (category_data [c] == (byte)UnicodeCategory.DecimalDigitNumber);
-                       }
-               }
-
-               public static bool IsDigit (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsDigit (s[index]);
-               }
-
-               public static bool IsHighSurrogate (char c)
-               {
-                       return c >= '\uD800' && c <= '\uDBFF';
-               }
-
-               public static bool IsHighSurrogate (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsHighSurrogate (s [index]);
-               }
-
-               public static bool IsLetter (char c)
-               {
-                       unsafe {
-                               return category_data [c] <= ((byte)UnicodeCategory.OtherLetter);
-                       }
-               }
-
-               public static bool IsLetter (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsLetter (s[index]);
-               }
-
-               public static bool IsLetterOrDigit (char c)
-               {
-                       unsafe {
-                               int category = category_data [c];
-                               return (category <= ((int)UnicodeCategory.OtherLetter) ||
-                                       category == ((int)UnicodeCategory.DecimalDigitNumber));
-                       }
-               }
-
-               public static bool IsLetterOrDigit (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsLetterOrDigit (s[index]);
-               }
-
-               public static bool IsLower (char c)
-               {
-                       unsafe {
-                               return (category_data [c] == (byte)UnicodeCategory.LowercaseLetter);
-                       }
-               }
-
-               public static bool IsLower (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsLower (s[index]);
-               }
-
-               public static bool IsLowSurrogate (char c)
-               {
-                       return c >= '\uDC00' && c <= '\uDFFF';
-               }
-
-               public static bool IsLowSurrogate (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsLowSurrogate (s [index]);
-               }
-
-               public static bool IsNumber (char c)
-               {
-                       unsafe {
-                               int category = category_data [c];
-                               return (category >= ((int)UnicodeCategory.DecimalDigitNumber) &&
-                                       category <= ((int)UnicodeCategory.OtherNumber));
-                       }
-               }
-
-               public static bool IsNumber (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsNumber (s[index]);
-               }
-
-               public static bool IsPunctuation (char c)
-               {
-                       unsafe {
-                               int category = category_data [c];
-                               return (category >= ((int)UnicodeCategory.ConnectorPunctuation) &&
-                                       category <= ((int)UnicodeCategory.OtherPunctuation));
-                       }
-               }
-
-               public static bool IsPunctuation (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsPunctuation (s[index]);
-               }
-
-               public static bool IsSeparator (char c)
-               {
-                       unsafe {
-                               int category = category_data [c];
-                               return (category >= ((int)UnicodeCategory.SpaceSeparator) &&
-                                       category <= ((int)UnicodeCategory.ParagraphSeparator));
-                       }
-               }
-
-               public static bool IsSeparator (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsSeparator (s[index]);
-               }
-
-               public static bool IsSurrogate (char c)
-               {
-                       unsafe {
-                               return (category_data [c] == (byte)UnicodeCategory.Surrogate);
-                       }
-               }
-
-               public static bool IsSurrogate (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsSurrogate (s[index]);
-               }
-
-               public static bool IsSymbol (char c)
-               {
-                       unsafe {
-                               int category = category_data [c];
-                               return (category >= ((int)UnicodeCategory.MathSymbol) &&
-                                       category <= ((int)UnicodeCategory.OtherSymbol));
-                       }
-               }
-
-               public static bool IsSymbol (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsSymbol (s[index]);
-               }
-
-               public static bool IsUpper (char c)
-               {
-                       unsafe {
-                               return (category_data [c] == (byte)UnicodeCategory.UppercaseLetter);
-                       }
-               }
-
-               public static bool IsUpper (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsUpper (s[index]);
-               }
-               
-               public static bool IsWhiteSpace (char c)
-               {
-                       if (c < 0x1680)
-                               return c == 0x20 || c >= 0x09 && c <= 0x0d || c == 0x85 || c == 0xA0;
-
-                       unsafe {
-                               int category = category_data [c];
-                               return category > (int) UnicodeCategory.OtherNumber && category <= (int) UnicodeCategory.ParagraphSeparator;
-                       }
-               }
-
-               public static bool IsWhiteSpace (string s, int index)
-               {
-                       CheckParameter (s, index);
-                       return IsWhiteSpace (s[index]);
-               }
-
-               private static void CheckParameter (string s, int index)
-               {
-                       if (s == null) 
-                               throw new ArgumentNullException ("s");
-                       
-                       if (index < 0 || index >= s.Length) 
-                               throw new ArgumentOutOfRangeException (
-                                       Locale.GetText ("The value of index is less than zero, or greater than or equal to the length of s."));
-               }
-
-               public static bool TryParse (string s, out char result)
-               {
-                       if (s == null || s.Length != 1) {
-                               result = (char) 0;
-                               return false;
-                       }
-
-                       result = s [0];
-                       return true;
-               }
-
-               public static char Parse (string s)
-               {
-                       if (s == null) 
-                               throw new ArgumentNullException ("s");
-
-                       if (s.Length != 1)
-                               throw new FormatException (Locale.GetText ("s contains more than one character."));
-                       
-                       return s [0];
-               }
-
-               public static char ToLower (char c)
-               {
-                       // CurrentCulture is never null or Invariant
-                       return CultureInfo.CurrentCulture.TextInfo.ToLower (c);
-               }
-
-               public static char ToLowerInvariant (char c)
-               {
-                       unsafe {
-                               if (c <= ((char)0x24cf))
-                                       return (char) to_lower_data_low [c];
-                               if (c >= ((char)0xff21))
-                                       return (char) to_lower_data_high[c - 0xff21];
-                       }
-                       return c;
-               }
-
-               public static char ToLower (char c, CultureInfo culture)
-               {
-                       if (culture == null)
-                               throw new ArgumentNullException ("culture");
-                       if (culture.LCID == 0x007F) // Invariant
-                               return ToLowerInvariant (c);
-
-                       return culture.TextInfo.ToLower (c);
-               }
-
-               public static char ToUpper (char c)
-               {
-                       // CurrentCulture is never null or Invariant
-                       return CultureInfo.CurrentCulture.TextInfo.ToUpper (c);
-               }
-
-               public static char ToUpperInvariant (char c)
-               {
-                       unsafe {
-                               if (c <= ((char)0x24e9))
-                                       return (char) to_upper_data_low [c];
-                               if (c >= ((char)0xff21))
-                                       return (char) to_upper_data_high [c - 0xff21];
-                       }
-                       return c;
-               }
-
-               public static char ToUpper (char c, CultureInfo culture)
-               {
-                       if (culture == null)
-                               throw new ArgumentNullException ("culture");
-                       if (culture.LCID == 0x007F) // Invariant
-                               return ToUpperInvariant (c);
-
-                       return culture.TextInfo.ToUpper (c);
-               }
-
-               public override string ToString ()
-               {
-                       return new String (m_value, 1);
-               }
-
-               public static string ToString (char c)
-               {
-                       return new String (c, 1);
-               }
-
-               public string ToString (IFormatProvider provider)
-               {
-                       return new String (m_value, 1);
-               }
-
-               // =========== IConvertible Methods =========== //
-
-               public TypeCode GetTypeCode ()
-               {
-                       return TypeCode.Char;
-               }
-
-               object IConvertible.ToType (Type type, IFormatProvider provider)
-               {
-                       return Convert.DefaultToType ((IConvertible)this, type, provider);
-               }
-
-               bool IConvertible.ToBoolean (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               byte IConvertible.ToByte (IFormatProvider provider)
-               {
-                       return System.Convert.ToByte (m_value);
-               }
-
-               char IConvertible.ToChar (IFormatProvider provider)
-               {
-                       return m_value;
-               }
-
-               DateTime IConvertible.ToDateTime (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               decimal IConvertible.ToDecimal (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               double IConvertible.ToDouble (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               short IConvertible.ToInt16 (IFormatProvider provider)
-               {
-                       return System.Convert.ToInt16 (m_value);
-               }
-
-               int IConvertible.ToInt32 (IFormatProvider provider)
-               {
-                       return System.Convert.ToInt32 (m_value);
-               }
-
-               long IConvertible.ToInt64 (IFormatProvider provider)
-               {
-                       return System.Convert.ToInt64 (m_value);
-               }
-
-               sbyte IConvertible.ToSByte (IFormatProvider provider)
-               {
-                       return System.Convert.ToSByte (m_value);
-               }
-
-               float IConvertible.ToSingle (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               ushort IConvertible.ToUInt16 (IFormatProvider provider)
-               {
-                       return System.Convert.ToUInt16 (m_value);
-               }
-
-               uint IConvertible.ToUInt32 (IFormatProvider provider)
-               {
-                       return System.Convert.ToUInt32 (m_value);
-               }
-
-               ulong IConvertible.ToUInt64 (IFormatProvider provider)
-               {
-                       return System.Convert.ToUInt64 (m_value);
-               }
-       }
-}
index cedd286827b0694d2bdc7046895d013eb231ec46..b2c18e57add1cdb2d930d0f70770f58dc9678969 100644 (file)
@@ -56,7 +56,7 @@ namespace System {
                 * of icalls, do not require an increment.
                 */
 #pragma warning disable 169
-               private const int mono_corlib_version = 113;
+               private const int mono_corlib_version = 114;
 #pragma warning restore 169
 
                [ComVisible (true)]
index 6a8c9309e71afb01fc0ad431cbe7d8c84cc45c70..42ba5d91bfc007c2b966e4751c3c21409b8ec739 100644 (file)
@@ -66,6 +66,12 @@ namespace System
 
                internal static readonly int LOS_limit = GetLOSLimit ();
 
+               internal static bool LegacyMode {
+                       get {
+                               return false;
+                       }
+               }
+
                public static unsafe bool Equals (string a, string b)
                {
                        if ((a as object) == (b as object))
index 9ee97ebdc47f7b8f7bbb81d9a57446797f8902c1..3c5245b14ff8214969eca7c11551fa5282796540 100644 (file)
@@ -113,7 +113,6 @@ System/Boolean.cs
 System/Buffer.cs
 System/Byte.cs
 System/CannotUnloadAppDomainException.cs
-System/Char.cs
 System/CharEnumerator.cs
 System/CLSCompliantAttribute.cs
 System/CStreamReader.cs
@@ -1577,6 +1576,7 @@ ReferenceSources/JitHelpers.cs
 ../../../external/referencesource/mscorlib/system/__hresults.cs
 ../../../external/referencesource/mscorlib/system/AggregateException.cs
 ../../../external/referencesource/mscorlib/system/arraysegment.cs
+../../../external/referencesource/mscorlib/system/char.cs
 ../../../external/referencesource/mscorlib/system/convert.cs
 ../../../external/referencesource/mscorlib/system/progress.cs
 ../../../external/referencesource/mscorlib/system/Lazy.cs
index 7f67e33128d2b637d49f73b7d8f3929e890db812..a1772e16816a7ec2078b6fd3eb038f25da9b7688 100644 (file)
@@ -78,7 +78,7 @@
  * Changes which are already detected at runtime, like the addition
  * of icalls, do not require an increment.
  */
-#define MONO_CORLIB_VERSION 113
+#define MONO_CORLIB_VERSION 114
 
 typedef struct
 {
index 0cbd2358f303e3cebd086b1be3b87b24ce6587b5..f8dc1e8c5cf979f71d5a0bcccfa1b862b65cb805 100644 (file)
@@ -115,9 +115,6 @@ ICALL(BUFFER_2, "ByteLengthInternal", ves_icall_System_Buffer_ByteLengthInternal
 ICALL(BUFFER_3, "GetByteInternal", ves_icall_System_Buffer_GetByteInternal)
 ICALL(BUFFER_4, "SetByteInternal", ves_icall_System_Buffer_SetByteInternal)
 
-ICALL_TYPE(CHAR, "System.Char", CHAR_1)
-ICALL(CHAR_1, "GetDataTablePointers", ves_icall_System_Char_GetDataTablePointers)
-
 ICALL_TYPE (COMPO_W, "System.ComponentModel.Win32Exception", COMPO_W_1)
 ICALL (COMPO_W_1, "W32ErrorMessage", ves_icall_System_ComponentModel_Win32Exception_W32ErrorMessage)
 
@@ -272,6 +269,9 @@ ICALL(GC_7, "get_MaxGeneration", mono_gc_max_generation)
 ICALL(GC_9, "get_ephemeron_tombstone", ves_icall_System_GC_get_ephemeron_tombstone)
 ICALL(GC_8, "register_ephemeron_array", ves_icall_System_GC_register_ephemeron_array)
 
+ICALL_TYPE(CHARINFO, "System.Globalization.CharUnicodeInfo", CHARINFO_1)
+ICALL(CHARINFO_1, "GetDataTablePointers", ves_icall_System_Globalization_CharUnicodeInfo_GetDataTablePointers)
+
 ICALL_TYPE(COMPINF, "System.Globalization.CompareInfo", COMPINF_1)
 ICALL(COMPINF_1, "assign_sortkey(object,string,System.Globalization.CompareOptions)", ves_icall_System_Globalization_CompareInfo_assign_sortkey)
 ICALL(COMPINF_2, "construct_compareinfo(string)", ves_icall_System_Globalization_CompareInfo_construct_compareinfo)
index cc9fd80bd5975d310fb34577232c96a02f37990e..8841d8d7f2400a942284e6a63204b7dcfc32c040 100644 (file)
@@ -7412,9 +7412,9 @@ get_category_data (int version,
 #endif
 }
 
-/* These parameters are "readonly" in corlib/System/Char.cs */
+/* These parameters are "readonly" in corlib/System/Globalization/CharUnicodeInfo.cs */
 ICALL_EXPORT void
-ves_icall_System_Char_GetDataTablePointers (int category_data_version,
+ves_icall_System_Globalization_CharUnicodeInfo_GetDataTablePointers (int category_data_version,
                                            guint8 const **category_data,
                                            guint16 const **category_astral_index,
                                            guint8 const **numeric_data,