-static gint32
-string_icall_cmp_char (gunichar2 c1, gunichar2 c2, gint32 mode);
-
-MonoString *
-ves_icall_System_String_ctor_charp (gpointer dummy, gunichar2 *value)
-{
- gint32 i, length;
- MonoDomain *domain;
-
- MONO_ARCH_SAVE_REGS;
-
- domain = mono_domain_get ();
-
- if (value == NULL)
- length = 0;
- else {
- for (i = 0; *(value + i) != '\0'; i++);
- length = i;
- }
-
- return mono_string_new_utf16 (domain, value, length);
-}
-
-MonoString *
-ves_icall_System_String_ctor_char_int (gpointer dummy, gunichar2 value, gint32 count)
-{
- MonoDomain *domain;
- MonoString *res;
- gunichar2 *chars;
- gint32 i;
-
- MONO_ARCH_SAVE_REGS;
-
- if (count < 0)
- mono_raise_exception (mono_get_exception_argument_out_of_range ("count"));
-
- domain = mono_domain_get ();
- res = mono_string_new_size (domain, count);
-
- chars = mono_string_chars (res);
- for (i = 0; i < count; i++)
- chars [i] = value;
-
- return res;
-}
-
-MonoString *
-ves_icall_System_String_ctor_charp_int_int (gpointer dummy, gunichar2 *value, gint32 sindex, gint32 length)
-{
- gunichar2 *begin;
- MonoDomain * domain;
-
- MONO_ARCH_SAVE_REGS;
-
- domain = mono_domain_get ();
-
- if ((value == NULL) && (length != 0))
- mono_raise_exception (mono_get_exception_argument_out_of_range ("Out of range"));
-
- if ((sindex < 0) || (length < 0))
- mono_raise_exception (mono_get_exception_argument_out_of_range ("Out of range"));
-
- if (length == 0) { /* fixme: return String.Empty here */
- g_warning ("string doesn't yet support empy strings in char* constructor");
- g_assert_not_reached ();
- }
-
- begin = (gunichar2 *) (value + sindex);
-
- return mono_string_new_utf16 (domain, begin, length);
-}
-
-MonoString *
-ves_icall_System_String_ctor_sbytep (gpointer dummy, gint8 *value)
-{
- MonoDomain *domain;
-
- MONO_ARCH_SAVE_REGS;
-
- domain = mono_domain_get ();
-
- if (NULL == value) { /* fixme: return String.Empty here */
- g_warning ("string doesn't yet support empy strings in char* constructor");
- g_assert_not_reached ();
- }
-
- return mono_string_new (domain, (const char *) value);
-}
-
-MonoString *
-ves_icall_System_String_ctor_sbytep_int_int (gpointer dummy, gint8 *value, gint32 sindex, gint32 length)
-{
- guchar *begin;
- MonoDomain *domain;
- MonoString *res;
- gunichar2 *chars;
- int i;
-
- MONO_ARCH_SAVE_REGS;
-
- domain = mono_domain_get ();
-
- if ((value == NULL) && (length != 0))
- mono_raise_exception (mono_get_exception_argument_out_of_range ("Out of range"));
-
- if ((sindex < 0) || (length < 0))
- mono_raise_exception (mono_get_exception_argument_out_of_range ("Out of range"));
-
- begin = (guchar *) (value + sindex);
- res = mono_string_new_size (domain, length);
- chars = mono_string_chars (res);
- for (i = 0; i < length; ++i)
- chars [i] = begin [i];
-
- return res;
-}
-
-MonoString *
-ves_icall_System_String_ctor_chara (gpointer dummy, MonoArray *value)
-{
- MonoDomain *domain;
-
- MONO_ARCH_SAVE_REGS;
-
- domain = mono_domain_get ();
-
- if (value == NULL)
- return mono_string_new_utf16 (domain, NULL, 0);
- else
- return mono_string_new_utf16 (domain, (gunichar2 *) mono_array_addr(value, gunichar2, 0), value->max_length);
-}
-
-MonoString *
-ves_icall_System_String_ctor_chara_int_int (gpointer dummy, MonoArray *value,
- gint32 sindex, gint32 length)
-{
- MonoDomain *domain;
-
- MONO_ARCH_SAVE_REGS;
-
- if (value == NULL)
- mono_raise_exception (mono_get_exception_argument_null ("value"));
- if (sindex < 0)
- mono_raise_exception (mono_get_exception_argument_out_of_range ("startIndex"));
- if (length < 0)
- mono_raise_exception (mono_get_exception_argument_out_of_range ("length"));
- if (sindex + length > mono_array_length (value))
- mono_raise_exception (mono_get_exception_argument_out_of_range ("Out of range"));
-
- domain = mono_domain_get ();
-
- return mono_string_new_utf16 (domain, (gunichar2 *) mono_array_addr(value, gunichar2, sindex), length);
-}
-
-MonoString *
-ves_icall_System_String_ctor_encoding (gpointer dummy, gint8 *value, gint32 sindex,
- gint32 length, MonoObject *enc)