Merge pull request #4796 from lambdageek/dev-handles-may04
authorAleksey Kliger (λgeek) <akliger@gmail.com>
Thu, 11 May 2017 14:33:02 +0000 (10:33 -0400)
committerGitHub <noreply@github.com>
Thu, 11 May 2017 14:33:02 +0000 (10:33 -0400)
[runtime] Another batch of coop handles icalls

16 files changed:
mono/metadata/dynamic-image-internals.h
mono/metadata/dynamic-image.c
mono/metadata/icall-def.h
mono/metadata/icall-internals.h
mono/metadata/icall-windows-uwp.c
mono/metadata/icall-windows.c
mono/metadata/icall.c
mono/metadata/locales.c
mono/metadata/locales.h
mono/metadata/mono-security-windows-uwp.c
mono/metadata/mono-security-windows.c
mono/metadata/mono-security.c
mono/metadata/object-internals.h
mono/metadata/security.h
mono/metadata/sre-encode.c
mono/metadata/sre.c

index 8578c24824a376c3b4b54c0991b43adfe9823f22..344d2d6e978efe3467ab9a88b8da6f4e79875812 100644 (file)
@@ -33,6 +33,9 @@ mono_dynamic_image_register_token (MonoDynamicImage *assembly, guint32 token, Mo
 gboolean
 mono_dynamic_image_is_valid_token (MonoDynamicImage *image, guint32 token);
 
+MonoObjectHandle
+mono_dynamic_image_get_registered_token (MonoDynamicImage *dynimage, guint32 token, MonoError *error);
+
 MonoDynamicImage*
 mono_dynamic_image_create (MonoDynamicAssembly *assembly, char *assembly_name, char *module_name);
 
index 440f8094f02ca531f46e0cd60fca494a21974f52..b846347126cb0bf39f5baea7359c3544099cf384 100644 (file)
@@ -185,7 +185,7 @@ dynamic_image_unlock (MonoDynamicImage *image)
        mono_image_unlock ((MonoImage*)image);
 }
 
-#ifndef DISABLE_REFLECTION_INIT
+#ifndef DISABLE_REFLECTION_EMIT
 /*
  * mono_dynamic_image_register_token:
  *
@@ -222,6 +222,22 @@ lookup_dyn_token (MonoDynamicImage *assembly, guint32 token)
        return obj;
 }
 
+#ifndef DISABLE_REFLECTION_EMIT
+MonoObjectHandle
+mono_dynamic_image_get_registered_token (MonoDynamicImage *dynimage, guint32 token, MonoError *error)
+{
+       error_init (error);
+       return MONO_HANDLE_NEW (MonoObject, lookup_dyn_token (dynimage, token));
+}
+#else /* DISABLE_REFLECTION_EMIT */
+MonoObjectHandle
+mono_dynamic_image_get_registered_token (MonoDynamicImage *dynimage, guint32 token, MonoError *error)
+{
+       g_assert_not_reached ();
+       return NULL_HANDLE;
+}
+#endif
+
 /**
  * 
  * mono_dynamic_image_is_valid_token:
index 37e349224a428c2191141a2526e34edae54000f3..b8d6b81b1e76643bf7ea75cdcdfba5500dd831d0 100644 (file)
@@ -281,7 +281,7 @@ ICALL(ENV_14, "get_ProcessorCount", mono_cpu_count)
 ICALL(ENV_15, "get_TickCount", ves_icall_System_Environment_get_TickCount)
 HANDLES(ICALL(ENV_16, "get_UserName", ves_icall_System_Environment_get_UserName))
 HANDLES(ICALL(ENV_16b, "get_bundled_machine_config", ves_icall_System_Environment_get_bundled_machine_config))
-ICALL(ENV_16m, "internalBroadcastSettingChange", ves_icall_System_Environment_BroadcastSettingChange)
+HANDLES(ICALL(ENV_16m, "internalBroadcastSettingChange", ves_icall_System_Environment_BroadcastSettingChange))
 HANDLES(ICALL(ENV_17, "internalGetEnvironmentVariable_native", ves_icall_System_Environment_GetEnvironmentVariable_native))
 HANDLES(ICALL(ENV_18, "internalGetGacPath", ves_icall_System_Environment_GetGacPath))
 HANDLES(ICALL(ENV_19, "internalGetHome", ves_icall_System_Environment_InternalGetHome))
@@ -546,10 +546,10 @@ ICALL_TYPE(DYNM, "System.Reflection.Emit.DynamicMethod", DYNM_1)
 HANDLES(ICALL(DYNM_1, "create_dynamic_method", ves_icall_DynamicMethod_create_dynamic_method))
 
 ICALL_TYPE(ENUMB, "System.Reflection.Emit.EnumBuilder", ENUMB_1)
-ICALL(ENUMB_1, "setup_enum_type", ves_icall_EnumBuilder_setup_enum_type)
+HANDLES(ICALL(ENUMB_1, "setup_enum_type", ves_icall_EnumBuilder_setup_enum_type))
 
 ICALL_TYPE(MODULEB, "System.Reflection.Emit.ModuleBuilder", MODULEB_10)
-ICALL(MODULEB_10, "GetRegisteredToken", ves_icall_ModuleBuilder_GetRegisteredToken)
+HANDLES(ICALL(MODULEB_10, "GetRegisteredToken", ves_icall_ModuleBuilder_GetRegisteredToken))
 HANDLES(ICALL(MODULEB_8, "RegisterToken", ves_icall_ModuleBuilder_RegisterToken))
 ICALL(MODULEB_1, "WriteToFile", ves_icall_ModuleBuilder_WriteToFile)
 HANDLES(ICALL(MODULEB_2, "basic_init", ves_icall_ModuleBuilder_basic_init))
@@ -557,11 +557,11 @@ ICALL(MODULEB_3, "build_metadata", ves_icall_ModuleBuilder_build_metadata)
 HANDLES(ICALL(MODULEB_5, "getMethodToken", ves_icall_ModuleBuilder_getMethodToken))
 HANDLES(ICALL(MODULEB_6, "getToken", ves_icall_ModuleBuilder_getToken))
 HANDLES(ICALL(MODULEB_7, "getUSIndex", ves_icall_ModuleBuilder_getUSIndex))
-ICALL(MODULEB_9, "set_wrappers_type", ves_icall_ModuleBuilder_set_wrappers_type)
+HANDLES(ICALL(MODULEB_9, "set_wrappers_type", ves_icall_ModuleBuilder_set_wrappers_type))
 
 ICALL_TYPE(SIGH, "System.Reflection.Emit.SignatureHelper", SIGH_1)
-ICALL(SIGH_1, "get_signature_field", ves_icall_SignatureHelper_get_signature_field)
-ICALL(SIGH_2, "get_signature_local", ves_icall_SignatureHelper_get_signature_local)
+HANDLES(ICALL(SIGH_1, "get_signature_field", ves_icall_SignatureHelper_get_signature_field))
+HANDLES(ICALL(SIGH_2, "get_signature_local", ves_icall_SignatureHelper_get_signature_local))
 
 ICALL_TYPE(TYPEB, "System.Reflection.Emit.TypeBuilder", TYPEB_1)
 HANDLES(ICALL(TYPEB_1, "create_runtime_class", ves_icall_TypeBuilder_create_runtime_class))
@@ -766,7 +766,7 @@ ICALL(RFH_1, "SetValueDirect", ves_icall_System_RuntimeFieldHandle_SetValueDirec
 ICALL(RFH_2, "SetValueInternal", ves_icall_MonoField_SetValueInternal)
 
 ICALL_TYPE(MHAN, "System.RuntimeMethodHandle", MHAN_1)
-ICALL(MHAN_1, "GetFunctionPointer", ves_icall_RuntimeMethodHandle_GetFunctionPointer)
+HANDLES(ICALL(MHAN_1, "GetFunctionPointer", ves_icall_RuntimeMethodHandle_GetFunctionPointer))
 
 ICALL_TYPE(RT, "System.RuntimeType", RT_1)
 HANDLES(ICALL(RT_1, "CreateInstanceInternal", ves_icall_System_Activator_CreateInstanceInternal))
@@ -830,9 +830,9 @@ ICALL_TYPE(EVID, "System.Security.Policy.Evidence", EVID_1)
 HANDLES(ICALL(EVID_1, "IsAuthenticodePresent", ves_icall_System_Security_Policy_Evidence_IsAuthenticodePresent))
 
 ICALL_TYPE(WINID, "System.Security.Principal.WindowsIdentity", WINID_1)
-ICALL(WINID_1, "GetCurrentToken", ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken)
-ICALL(WINID_2, "GetTokenName", ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName)
-ICALL(WINID_3, "GetUserToken", ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken)
+HANDLES(ICALL(WINID_1, "GetCurrentToken", ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken))
+HANDLES(ICALL(WINID_2, "GetTokenName", ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName))
+HANDLES(ICALL(WINID_3, "GetUserToken", ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken))
 ICALL(WINID_4, "_GetRoles", ves_icall_System_Security_Principal_WindowsIdentity_GetRoles)
 
 ICALL_TYPE(WINIMP, "System.Security.Principal.WindowsImpersonationContext", WINIMP_1)
@@ -872,7 +872,7 @@ ICALL_TYPE(TENC, "System.Text.EncodingHelper", TENC_1)
 HANDLES(ICALL(TENC_1, "InternalCodePage", ves_icall_System_Text_EncodingHelper_InternalCodePage))
 
 ICALL_TYPE(UNORM, "System.Text.Normalization", UNORM_1)
-ICALL(UNORM_1, "load_normalization_resource", ves_icall_System_Text_Normalization_load_normalization_resource)
+HANDLES(ICALL(UNORM_1, "load_normalization_resource", ves_icall_System_Text_Normalization_load_normalization_resource))
 
 ICALL_TYPE(ILOCK, "System.Threading.Interlocked", ILOCK_1)
 ICALL(ILOCK_1, "Add(int&,int)", ves_icall_System_Threading_Interlocked_Add_Int)
index 60cca8316b0ae31da8f794ecc075c71558cdae13..c172b8404bcbf9d646418553d29c3281ee6b9b5a 100644 (file)
@@ -44,8 +44,8 @@ mono_icall_set_environment_variable (MonoString *name, MonoString *value);
 MonoStringHandle
 mono_icall_get_windows_folder_path (int folder, MonoError *error);
 
-void
-mono_icall_broadcast_setting_change (void);
+MonoBoolean
+mono_icall_broadcast_setting_change (MonoError *error);
 
 void
 mono_icall_write_windows_debug_string (MonoString *message);
index 2708e90e26e5b2d2faa2c0f53e1606de13f66efe..918510b1c7b9d66a741a1e798f0ba871b733505c 100644 (file)
@@ -44,20 +44,18 @@ mono_icall_get_logical_drives (void)
        return NULL;
 }
 
-void
-mono_icall_broadcast_setting_change (void)
+MonoBoolean
+mono_icall_broadcast_setting_change (MonoError *error)
 {
-       MonoError mono_error;
-       error_init (&mono_error);
+       error_init (error);
 
        g_unsupported_api ("SendMessageTimeout");
 
-       mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "SendMessageTimeout");
-       mono_error_set_pending_exception (&mono_error);
+       mono_error_set_not_supported (error, G_UNSUPPORTED_API, "SendMessageTimeout");
 
        SetLastError (ERROR_NOT_SUPPORTED);
 
-       return;
+       return is_ok (error);
 }
 
 guint32
index 21a759157c08641bc2d5cfdcac05f8ebd6c738ca..691d1b03b30fa50e3a3c62a02fd439eebe195e96 100644 (file)
@@ -197,10 +197,12 @@ mono_icall_get_windows_folder_path (int folder, MonoError *error)
 #endif /* G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */
 
 #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)
-void
-mono_icall_broadcast_setting_change (void)
+MonoBoolean
+mono_icall_broadcast_setting_change (MonoError *error)
 {
+       error_init (error);
        SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, (WPARAM)NULL, (LPARAM)L"Environment", SMTO_ABORTIFHUNG, 2000, 0);
+       return TRUE;
 }
 
 gint32
index 33376d734921926e39e1d9b1611ccb1bea606cd8..ed071dd099555683c2851f00500137b4fdad6973 100644 (file)
@@ -6885,17 +6885,19 @@ ves_icall_System_Environment_get_HasShutdownStarted (void)
 }
 
 #ifndef HOST_WIN32
-static inline void
-mono_icall_broadcast_setting_change (void)
+static inline MonoBoolean
+mono_icall_broadcast_setting_change (MonoError *error)
 {
-       return;
+       error_init (error);
+       return TRUE;
 }
 #endif /* !HOST_WIN32 */
 
 ICALL_EXPORT void
-ves_icall_System_Environment_BroadcastSettingChange (void)
+ves_icall_System_Environment_BroadcastSettingChange (MonoError *error)
 {
-       mono_icall_broadcast_setting_change ();
+       error_init (error);
+       mono_icall_broadcast_setting_change (error);
 }
 
 ICALL_EXPORT
@@ -7089,12 +7091,10 @@ ves_icall_System_IO_DriveInfo_GetDriveType (MonoString *root_path_name)
 #endif /* PLATFORM_NO_DRIVEINFO */
 
 ICALL_EXPORT gpointer
-ves_icall_RuntimeMethodHandle_GetFunctionPointer (MonoMethod *method)
+ves_icall_RuntimeMethodHandle_GetFunctionPointer (MonoMethod *method, MonoError *error)
 {
-       MonoError error;
-       gpointer result = mono_compile_method_checked (method, &error);
-       mono_error_set_pending_exception (&error);
-       return result;
+       error_init (error);
+       return mono_compile_method_checked (method, error);
 }
 
 ICALL_EXPORT MonoStringHandle
index 205fae8f031919017fbbdc109f1f41edd5c8d230..b0e6135f49a931befbff87178a53a3be7e93953a 100644 (file)
@@ -966,14 +966,16 @@ static gint32 string_invariant_indexof_char (MonoString *source, gint32 sindex,
 }
 
 void ves_icall_System_Text_Normalization_load_normalization_resource (guint8 **argProps,
-                                                                                                                                         guint8 **argMappedChars,
-                                                                                                                                         guint8 **argCharMapIndex,
-                                                                                                                                         guint8 **argHelperIndex,
-                                                                                                                                         guint8 **argMapIdxToComposite,
-                                                                                                                                         guint8 **argCombiningClass)
+                                                                     guint8 **argMappedChars,
+                                                                     guint8 **argCharMapIndex,
+                                                                     guint8 **argHelperIndex,
+                                                                     guint8 **argMapIdxToComposite,
+                                                                     guint8 **argCombiningClass,
+                                                                     MonoError *error)
 {
+       error_init (error);
 #ifdef DISABLE_NORMALIZATION
-       mono_set_pending_exception (mono_get_exception_not_supported ("This runtime has been compiled without string normalization support."));
+       mono_error_set_not_supported (error, "This runtime has been compiled without string normalization support.");
        return;
 #else
        *argProps = (guint8*)props;
index 6987aa316167888695fc6423e8bedaab999854bc..0faee51a1587af83ee382cbfd5e555d9be88e8e5 100644 (file)
@@ -51,6 +51,6 @@ extern MonoString *ves_icall_System_String_InternalToLower_Comp (MonoString *thi
 extern MonoString *ves_icall_System_String_InternalToUpper_Comp (MonoString *this_obj, MonoCultureInfo *cult);
 extern gunichar2 ves_icall_System_Char_InternalToUpper_Comp (gunichar2 c, MonoCultureInfo *cult);
 extern gunichar2 ves_icall_System_Char_InternalToLower_Comp (gunichar2 c, MonoCultureInfo *cult);
-extern void ves_icall_System_Text_Normalization_load_normalization_resource (guint8 **argProps, guint8** argMappedChars, guint8** argCharMapIndex, guint8** argHelperIndex, guint8** argMapIdxToComposite, guint8** argCombiningClass);
+extern void ves_icall_System_Text_Normalization_load_normalization_resource (guint8 **argProps, guint8** argMappedChars, guint8** argCharMapIndex, guint8** argHelperIndex, guint8** argMapIdxToComposite, guint8** argCombiningClass, MonoError *error);
 
 #endif /* _MONO_METADATA_FILEIO_H_ */
index 42f5297aaa627c0373e4ca254d44a1ee78bb3743..72989994c1397eb9c775eb5a6aca8e909b5087c2 100644 (file)
 #include "mono/metadata/mono-security-windows-internals.h"
 
 gpointer
-ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void)
+mono_security_principal_windows_identity_get_current_token ()
 {
-       MonoError mono_error;
-       error_init (&mono_error);
-
        g_unsupported_api ("OpenThreadToken, OpenProcessToken");
 
-       mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "OpenThreadToken, OpenProcessToken");
-       mono_error_set_pending_exception (&mono_error);
-
        SetLastError (ERROR_NOT_SUPPORTED);
-
        return NULL;
 }
 
+gpointer
+ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (MonoError *error)
+{
+       error_init (error);
+
+       mono_error_set_not_supported (error, G_UNSUPPORTED_API, "OpenThreadToken, OpenProcessToken");
+       return mono_security_principal_windows_identity_get_current_token ();
+}
+
 MonoArray*
 ves_icall_System_Security_Principal_WindowsIdentity_GetRoles (gpointer token)
 {
index 7a34c8a1a6186206251169b4a6e0602a3dfa0c98..bfdc96a9bb2804621bd149e99b7d36cd3967ee72 100644 (file)
@@ -69,7 +69,7 @@ GetSidName (gunichar2 *server, PSID sid, gint32 *size)
 }
 
 gpointer
-ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void)
+mono_security_principal_windows_identity_get_current_token (void)
 {
        gpointer token = NULL;
 
@@ -86,6 +86,13 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void)
        return token;
 }
 
+gpointer
+ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (MonoError *error)
+{
+       error_init (error);
+       return mono_security_principal_windows_identity_get_current_token ();
+}
+
 gint32
 mono_security_win_get_token_name (gpointer token, gunichar2 ** uniname)
 {
@@ -104,34 +111,33 @@ mono_security_win_get_token_name (gpointer token, gunichar2 ** uniname)
 }
 #endif /* G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */
 
-MonoString*
-ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token)
+MonoStringHandle
+ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token, MonoError *error)
 {
-       MonoError error;
-       MonoString *result = NULL;
+       MonoStringHandle result;
        gunichar2 *uniname = NULL;
        gint32 size = 0;
 
-       error_init (&error);
+       error_init (error);
 
        size = mono_security_win_get_token_name (token, &uniname);
 
        if (size > 0) {
-               result = mono_string_new_utf16_checked (mono_domain_get (), uniname, size, &error);
+               result = mono_string_new_utf16_handle (mono_domain_get (), uniname, size, error);
        }
        else
-               result = mono_string_new_checked (mono_domain_get (), "", &error);
+               result = mono_string_new_handle (mono_domain_get (), "", error);
 
        if (uniname)
                g_free (uniname);
 
-       mono_error_set_pending_exception (&error);
        return result;
 }
 
 gpointer
-ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *username)
+ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoStringHandle username, MonoError *error)
 {
+       error_init (error);
        gpointer token = NULL;
 
        /* TODO: MS has something like this working in Windows 2003 (client and
@@ -264,7 +270,7 @@ GetCurrentUserSid (void)
 {
        PSID sid = NULL;
        guint32 size = 0;
-       gpointer token = ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken ();
+       gpointer token = mono_security_principal_windows_identity_get_current_token ();
 
        GetTokenInformation (token, TokenUser, NULL, size, (PDWORD)&size);
        if (size > 0) {
index fe043d0a6bfaa861dc0b37a0ac307dd1bc19381d..e3b82bcd61120cd411065aa34771a9879abe8d0b 100644 (file)
@@ -216,11 +216,18 @@ IsMemberOf (gid_t user, struct group *g)
 
 #ifndef HOST_WIN32
 gpointer
-ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void)
+mono_security_principal_windows_identity_get_current_token ()
 {
        return GINT_TO_POINTER (geteuid ());
 }
 
+gpointer
+ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (MonoError *error)
+{
+       error_init (error);
+       return mono_security_principal_windows_identity_get_current_token ();
+}
+
 static gint32
 internal_get_token_name (gpointer token, gunichar2 ** uniname)
 {
@@ -237,38 +244,37 @@ internal_get_token_name (gpointer token, gunichar2 ** uniname)
        return size;
 }
 
-MonoString*
-ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token)
+MonoStringHandle
+ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token, MonoError *error)
 {
-       MonoError error;
-       MonoString *result = NULL;
+       MonoStringHandle result;
        gunichar2 *uniname = NULL;
        gint32 size = 0;
 
-       error_init (&error);
+       error_init (error);
 
        size = internal_get_token_name (token, &uniname);
 
        if (size > 0) {
-               result = mono_string_new_utf16_checked (mono_domain_get (), uniname, size, &error);
+               result = mono_string_new_utf16_handle (mono_domain_get (), uniname, size, error);
        }
        else
-               result = mono_string_new_checked (mono_domain_get (), "", &error);
+               result = mono_string_new_handle (mono_domain_get (), "", error);
 
        if (uniname)
                g_free (uniname);
 
-       mono_error_set_pending_exception (&error);
        return result;
 }
 #endif  /* !HOST_WIN32 */
 
 #ifndef HOST_WIN32
 gpointer
-ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *username)
+ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoStringHandle username, MonoError *error)
 {
        gpointer token = (gpointer)-2;
 
+       error_init (error);
 #ifdef HAVE_PWD_H
 
 #ifdef HAVE_GETPWNAM_R
@@ -281,7 +287,8 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *us
        gchar *utf8_name;
        gboolean result;
 
-       utf8_name = mono_unicode_to_external (mono_string_chars (username));
+       utf8_name = mono_string_handle_to_utf8 (username, error);
+       return_val_if_nok (error, NULL);
 
 #ifdef HAVE_GETPWNAM_R
 #ifdef _SC_GETPW_R_SIZE_MAX
index 9ad68f46a1540eaefe5a6c19bb438c1f7196a846..59b1cc558995810ce60a38bd480b4515d0c5ccbc 100644 (file)
@@ -1465,11 +1465,11 @@ mono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, Mono
 MonoReflectionEvent *
 ves_icall_TypeBuilder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb);
 
-MonoArray *
-ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelper *sig);
+MonoArrayHandle
+ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelperHandle sig, MonoError *error);
 
-MonoArray *
-ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelper *sig);
+MonoArrayHandle
+ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelperHandle sig, MonoError *error);
 
 MonoReflectionMarshalAsAttributeHandle
 mono_reflection_marshal_as_attribute_from_marshal_spec (MonoDomain *domain, MonoClass *klass, MonoMarshalSpec *spec, MonoError *error);
@@ -1880,8 +1880,8 @@ ves_icall_ModuleBuilder_build_metadata (MonoReflectionModuleBuilder *mb);
 void
 ves_icall_ModuleBuilder_RegisterToken (MonoReflectionModuleBuilderHandle mb, MonoObjectHandle obj, guint32 token, MonoError *error);
 
-MonoObject*
-ves_icall_ModuleBuilder_GetRegisteredToken (MonoReflectionModuleBuilder *mb, guint32 token);
+MonoObjectHandle
+ves_icall_ModuleBuilder_GetRegisteredToken (MonoReflectionModuleBuilderHandle mb, guint32 token, MonoError *error);
 
 void
 ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilder *assemblyb);
@@ -1899,8 +1899,9 @@ MonoReflectionTypeHandle
 ves_icall_TypeBuilder_create_runtime_class (MonoReflectionTypeBuilderHandle tb, MonoError *error);
 
 void
-ves_icall_EnumBuilder_setup_enum_type (MonoReflectionType *enumtype,
-                                                                          MonoReflectionType *t);
+ves_icall_EnumBuilder_setup_enum_type (MonoReflectionTypeHandle enumtype,
+                                      MonoReflectionTypeHandle t,
+                                      MonoError *error);
 
 void
 ves_icall_ModuleBuilder_basic_init (MonoReflectionModuleBuilderHandle moduleb, MonoError *error);
@@ -1909,7 +1910,7 @@ guint32
 ves_icall_ModuleBuilder_getUSIndex (MonoReflectionModuleBuilderHandle module, MonoStringHandle str, MonoError *error);
 
 void
-ves_icall_ModuleBuilder_set_wrappers_type (MonoReflectionModuleBuilder *moduleb, MonoReflectionType *type);
+ves_icall_ModuleBuilder_set_wrappers_type (MonoReflectionModuleBuilderHandle moduleb, MonoReflectionTypeHandle type, MonoError *error);
 
 MonoAssembly*
 mono_try_assembly_resolve_handle (MonoDomain *domain, MonoStringHandle fname, MonoAssembly *requesting, gboolean refonly, MonoError *error);
index 44e4b4ea4c1617bfb6763b10c06d931a30e5bbce..e6d57cff5d1f312e1043fae21d9e8c74446c8012 100644 (file)
@@ -26,10 +26,11 @@ extern MonoStringHandle ves_icall_System_Environment_get_UserName (MonoError *er
 
 
 /* System.Security.Principal.WindowsIdentity */
+gpointer mono_security_principal_windows_identity_get_current_token (void);
 extern MonoArray* ves_icall_System_Security_Principal_WindowsIdentity_GetRoles (gpointer token);
-extern gpointer ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void);
-extern MonoString* ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token);
-extern gpointer ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *username);
+extern gpointer ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (MonoError *error);
+extern MonoStringHandle ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token, MonoError *error);
+extern gpointer ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoStringHandle username, MonoError *error);
 
 
 /* System.Security.Principal.WindowsImpersonationContext */
index ecd2339cdf29691da77ff9c7a9ad82858a46ea47..56a484087fd86bd18dab625450bb555f35ee4993 100644 (file)
@@ -948,14 +948,25 @@ mono_dynimage_encode_reflection_sighelper (MonoDynamicImage *assembly, MonoRefle
 }
 #endif /* DISABLE_REFLECTION_EMIT */
 
-static MonoArray *
-reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig, MonoError *error)
+static gboolean
+encode_reflection_types (MonoDynamicImage *assembly, MonoArrayHandle sig_arguments, int i, SigBuffer *buf, MonoError *error)
+{
+       HANDLE_FUNCTION_ENTER ();
+       error_init (error);
+       MonoReflectionTypeHandle type = MONO_HANDLE_NEW (MonoReflectionType, NULL);
+       MONO_HANDLE_ARRAY_GETREF (type, sig_arguments, i);
+       encode_reflection_type (assembly, type, buf, error);
+       HANDLE_FUNCTION_RETURN_VAL (is_ok (error));
+}
+
+static MonoArrayHandle
+reflection_sighelper_get_signature_local (MonoReflectionSigHelperHandle sig, MonoError *error)
 {
-       MonoReflectionModuleBuilder *module = sig->module;
-       MonoDynamicImage *assembly = module != NULL ? module->dynamic_image : NULL;
-       guint32 na = sig->arguments ? mono_array_length (sig->arguments) : 0;
+       MonoReflectionModuleBuilderHandle module = MONO_HANDLE_NEW_GET (MonoReflectionModuleBuilder, sig, module);
+       MonoDynamicImage *assembly = MONO_HANDLE_IS_NULL (module) ? NULL : MONO_HANDLE_GETVAL (module, dynamic_image);
+       MonoArrayHandle sig_arguments = MONO_HANDLE_NEW_GET (MonoArray, sig, arguments);
+       guint32 na = MONO_HANDLE_IS_NULL (sig_arguments) ? 0 : mono_array_handle_length (sig_arguments);
        guint32 buflen, i;
-       MonoArray *result;
        SigBuffer buf;
 
        error_init (error);
@@ -966,30 +977,33 @@ reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig, MonoErro
        sigbuffer_add_value (&buf, na);
        if (assembly != NULL){
                for (i = 0; i < na; ++i) {
-                       MonoReflectionType *type = mono_array_get (sig->arguments, MonoReflectionType*, i);
-                       encode_reflection_type_raw (assembly, type, &buf, error);
-                       if (!is_ok (error)) goto fail;
+                       if (!encode_reflection_types (assembly, sig_arguments, i, &buf, error))
+                               goto fail;
                }
        }
 
        buflen = buf.p - buf.buf;
-       result = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, buflen, error);
+       MonoArrayHandle result = mono_array_new_handle (mono_domain_get (), mono_defaults.byte_class, buflen, error);
        if (!is_ok (error)) goto fail;
-       memcpy (mono_array_addr (result, char, 0), buf.buf, buflen);
+       uint32_t gchandle;
+       void *base = MONO_ARRAY_HANDLE_PIN (result, char, 0, &gchandle);
+       memcpy (base, buf.buf, buflen);
        sigbuffer_free (&buf);
+       mono_gchandle_free (gchandle);
        return result;
 fail:
        sigbuffer_free (&buf);
-       return NULL;
+       return MONO_HANDLE_CAST (MonoArray, NULL_HANDLE);
 }
 
-static MonoArray *
-reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig, MonoError *error)
+static MonoArrayHandle
+reflection_sighelper_get_signature_field (MonoReflectionSigHelperHandle sig, MonoError *error)
 {
-       MonoDynamicImage *assembly = sig->module->dynamic_image;
-       guint32 na = sig->arguments ? mono_array_length (sig->arguments) : 0;
+       MonoReflectionModuleBuilderHandle module = MONO_HANDLE_NEW_GET (MonoReflectionModuleBuilder, sig, module);
+       MonoDynamicImage *assembly = MONO_HANDLE_GETVAL (module, dynamic_image);
+       MonoArrayHandle sig_arguments = MONO_HANDLE_NEW_GET (MonoArray, sig, arguments);
+       guint32 na = MONO_HANDLE_IS_NULL (sig_arguments) ? 0 : mono_array_handle_length (sig_arguments);
        guint32 buflen, i;
-       MonoArray *result;
        SigBuffer buf;
 
        error_init (error);
@@ -998,22 +1012,23 @@ reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig, MonoErro
 
        sigbuffer_add_value (&buf, 0x06);
        for (i = 0; i < na; ++i) {
-               MonoReflectionType *type = mono_array_get (sig->arguments, MonoReflectionType*, i);
-               encode_reflection_type_raw (assembly, type, &buf, error);
-               if (!is_ok (error))
+               if (! encode_reflection_types (assembly, sig_arguments, i, &buf, error))
                        goto fail;
        }
 
        buflen = buf.p - buf.buf;
-       result = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, buflen, error);
+       MonoArrayHandle result = mono_array_new_handle (mono_domain_get (), mono_defaults.byte_class, buflen, error);
        if (!is_ok (error)) goto fail;
-       memcpy (mono_array_addr (result, char, 0), buf.buf, buflen);
+       uint32_t gchandle;
+       void *base = MONO_ARRAY_HANDLE_PIN (result, char, 0, &gchandle);
+       memcpy (base, buf.buf, buflen);
        sigbuffer_free (&buf);
+       mono_gchandle_free (gchandle);
 
        return result;
 fail:
        sigbuffer_free (&buf);
-       return NULL;
+       return MONO_HANDLE_CAST (MonoArray, NULL_HANDLE);
 }
 
 static char*
@@ -1200,36 +1215,34 @@ mono_dynimage_save_encode_property_signature (MonoDynamicImage *assembly, MonoRe
 #endif /*DISABLE_REFLECTION_EMIT_SAVE*/
 
 #ifndef DISABLE_REFLECTION_EMIT
-MonoArray *
-ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelper *sig)
+MonoArrayHandle
+ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelperHandle sig, MonoError *error)
 {
-       MonoError error;
-       MonoArray *result = reflection_sighelper_get_signature_local (sig, &error);
-       mono_error_set_pending_exception (&error);
-       return result;
+       error_init (error);
+       return reflection_sighelper_get_signature_local (sig, error);
 }
 
-MonoArray *
-ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelper *sig)
+MonoArrayHandle
+ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelperHandle sig, MonoError *error)
 {
-       MonoError error;
-       MonoArray *result = reflection_sighelper_get_signature_field (sig, &error);
-       mono_error_set_pending_exception (&error);
-       return result;
+       error_init (error);
+       return reflection_sighelper_get_signature_field (sig, error);
 }
 #else /* DISABLE_REFLECTION_EMIT */
-MonoArray *
-ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelper *sig)
+MonoArrayHandle
+ves_icall_SignatureHelper_get_signature_local (MonoReflectionSigHelperHandle sig, MonoError *error)
 {
+       error_init (error);
        g_assert_not_reached ();
-       return NULL;
+       return MONO_HANDLE_CAST (MonoArray, NULL_HANDLE);
 }
 
-MonoArray *
-ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelper *sig)
+MonoArrayHandle
+ves_icall_SignatureHelper_get_signature_field (MonoReflectionSigHelperHandle sig, MonoError *error)
 {
+       error_init (error);
        g_assert_not_reached ();
-       return NULL;
+       return MONO_HANDLE_CAST (MonoArray, NULL_HANDLE);
 }
 
 #endif /* DISABLE_REFLECTION_EMIT */
index cc40e048493bbc1bf8f9d1ccf55cc14ad2cc7de4..b50434bc1feca744de19cc559bf63b873dac06d3 100644 (file)
@@ -4317,16 +4317,12 @@ ves_icall_ModuleBuilder_RegisterToken (MonoReflectionModuleBuilderHandle mb, Mon
        mono_dynamic_image_register_token (MONO_HANDLE_GETVAL (mb, dynamic_image), token, obj);
 }
 
-MonoObject*
-ves_icall_ModuleBuilder_GetRegisteredToken (MonoReflectionModuleBuilder *mb, guint32 token)
+MonoObjectHandle
+ves_icall_ModuleBuilder_GetRegisteredToken (MonoReflectionModuleBuilderHandle mb, guint32 token, MonoError *error)
 {
-       MonoObject *obj;
-
-       mono_loader_lock ();
-       obj = (MonoObject *)mono_g_hash_table_lookup (mb->dynamic_image->tokens, GUINT_TO_POINTER (token));
-       mono_loader_unlock ();
-
-       return obj;
+       error_init (error);
+       MonoDynamicImage *dynamic_image = MONO_HANDLE_GETVAL (mb, dynamic_image);
+       return mono_dynamic_image_get_registered_token (dynamic_image, token, error);
 }
 
 #ifndef DISABLE_REFLECTION_EMIT
@@ -4347,10 +4343,12 @@ ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
 }
 
 void
-ves_icall_EnumBuilder_setup_enum_type (MonoReflectionType *enumtype,
-                                                                          MonoReflectionType *t)
+ves_icall_EnumBuilder_setup_enum_type (MonoReflectionTypeHandle enumtype,
+                                      MonoReflectionTypeHandle t,
+                                      MonoError *error)
 {
-       enumtype->type = t->type;
+       error_init (error);
+       MONO_HANDLE_SETVAL (enumtype, type, MonoType*, MONO_HANDLE_GETVAL (t, type));
 }
 
 void
@@ -4367,10 +4365,12 @@ ves_icall_ModuleBuilder_getUSIndex (MonoReflectionModuleBuilderHandle module, Mo
 }
 
 void
-ves_icall_ModuleBuilder_set_wrappers_type (MonoReflectionModuleBuilder *moduleb, MonoReflectionType *type)
+ves_icall_ModuleBuilder_set_wrappers_type (MonoReflectionModuleBuilderHandle moduleb, MonoReflectionTypeHandle ref_type, MonoError *error)
 {
-       MonoDynamicImage *image = moduleb->dynamic_image;
+       error_init (error);
+       MonoDynamicImage *image = MONO_HANDLE_GETVAL (moduleb, dynamic_image);
+       MonoType *type = MONO_HANDLE_GETVAL (ref_type, type);
 
-       g_assert (type->type);
-       image->wrappers_type = mono_class_from_mono_type (type->type);
+       g_assert (type);
+       image->wrappers_type = mono_class_from_mono_type (type);
 }