[coop] Add mono_error_set_exception_handle
authorAleksey Kliger <aleksey@xamarin.com>
Thu, 17 Nov 2016 20:18:30 +0000 (15:18 -0500)
committerAleksey Kliger <aleksey@xamarin.com>
Fri, 18 Nov 2016 15:08:36 +0000 (10:08 -0500)
mono/metadata/handle.h
mono/metadata/object-internals.h
mono/utils/mono-error.c

index 25ce103a09ca6fb7be63832b8ca3fae5fb823a38..612dc4046ecd28cd3cfced0a570cbedac54d26cb 100644 (file)
@@ -306,6 +306,7 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot
 TYPED_HANDLE_DECL (MonoString);
 TYPED_HANDLE_DECL (MonoArray);
 TYPED_HANDLE_DECL (MonoObject);
+TYPED_HANDLE_DECL (MonoException);
 
 #define NULL_HANDLE_STRING MONO_HANDLE_CAST(MonoString, NULL_HANDLE)
 
@@ -348,6 +349,9 @@ mono_array_handle_pin_with_size (MonoArrayHandle handle, int size, uintptr_t ind
 
 #define MONO_ARRAY_HANDLE_PIN(handle,type,index,gchandle_out) mono_array_handle_pin_with_size (MONO_HANDLE_CAST(MonoArray,(handle)), sizeof (type), (index), (gchandle_out))
 
+void
+mono_error_set_exception_handle (MonoError *error, MonoExceptionHandle exc);
+
 G_END_DECLS
 
 #endif /* __MONO_HANDLE_H__ */
index b3ad83d12e7825b0b1064b61ded4f15bbf8b1673..a09832e8f36379e08167c28ddeec516608945dc2 100644 (file)
@@ -219,9 +219,6 @@ struct _MonoException {
        MonoArray  *native_trace_ips;
 };
 
-/* Safely access System.Exception from native code */
-TYPED_HANDLE_DECL (MonoException);
-
 typedef struct {
        MonoException base;
 } MonoSystemException;
index 66a3e169ab77d80ec5cb8d25832debc848c2afe1..55f84ffd8e8f1de87aab2c64464ebab9d3955ea6 100644 (file)
@@ -480,6 +480,16 @@ mono_error_set_exception_instance (MonoError *oerror, MonoException *exc)
        error->exn.instance_handle = mono_gchandle_new (exc ? &exc->object : NULL, FALSE);
 }
 
+void
+mono_error_set_exception_handle (MonoError *oerror, MonoExceptionHandle exc)
+{
+       MonoErrorInternal *error = (MonoErrorInternal*)oerror;
+
+       mono_error_prepare (error);
+       error->error_code = MONO_ERROR_EXCEPTION_INSTANCE;
+       error->exn.instance_handle = mono_gchandle_from_handle (MONO_HANDLE_CAST(MonoObject, exc), FALSE);
+}
+
 void
 mono_error_set_out_of_memory (MonoError *oerror, const char *msg_format, ...)
 {