WRAPPER_SUBTYPE_GENERIC_ARRAY_HELPER,
/* Subtypes of MONO_WRAPPER_DELEGATE_INVOKE */
WRAPPER_SUBTYPE_DELEGATE_INVOKE_VIRTUAL,
- WRAPPER_SUBTYPE_DELEGATE_INVOKE_BOUND
+ WRAPPER_SUBTYPE_DELEGATE_INVOKE_BOUND,
+ /* Subtypes of MONO_WRAPPER_UNKNOWN */
+ WRAPPER_SUBTYPE_GSHAREDVT_IN_SIG,
+ WRAPPER_SUBTYPE_GSHAREDVT_OUT_SIG,
} WrapperSubtype;
typedef struct {
MonoMethod *method;
} ManagedToNativeWrapperInfo;
+typedef struct {
+ MonoMethod *method;
+} SynchronizedWrapperInfo;
+
typedef struct {
MonoMethod *method;
} SynchronizedInnerWrapperInfo;
MonoClass *klass;
} ProxyWrapperInfo;
+typedef struct {
+ const char *gc_name;
+ int alloc_type;
+} AllocatorWrapperInfo;
+
+typedef struct {
+ MonoMethod *method;
+} UnboxWrapperInfo;
+
+typedef struct {
+ MonoMethod *method;
+} RemotingWrapperInfo;
+
+typedef struct {
+ MonoMethodSignature *sig;
+} GsharedvtWrapperInfo;
+
/*
* This structure contains additional information to uniquely identify a given wrapper
* method. It can be retrieved by mono_marshal_get_wrapper_info () for certain types
NativeToManagedWrapperInfo native_to_managed;
/* MONO_WRAPPER_MANAGED_TO_NATIVE */
ManagedToNativeWrapperInfo managed_to_native;
+ /* SYNCHRONIZED */
+ SynchronizedWrapperInfo synchronized;
/* SYNCHRONIZED_INNER */
SynchronizedInnerWrapperInfo synchronized_inner;
/* GENERIC_ARRAY_HELPER */
ArrayAccessorWrapperInfo array_accessor;
/* PROXY_ISINST etc. */
ProxyWrapperInfo proxy;
+ /* ALLOC */
+ AllocatorWrapperInfo alloc;
+ /* UNBOX */
+ UnboxWrapperInfo unbox;
+ /* MONO_WRAPPER_REMOTING_INVOKE/MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK/MONO_WRAPPER_XDOMAIN_INVOKE */
+ RemotingWrapperInfo remoting;
+ /* GSHAREDVT_IN_SIG/GSHAREDVT_OUT_SIG */
+ GsharedvtWrapperInfo gsharedvt;
} d;
} WrapperInfo;
mono_wrapper_info_create (MonoMethodBuilder *mb, WrapperSubtype subtype);
void
-mono_marshal_set_wrapper_info (MonoMethod *method, gpointer data);
+mono_marshal_set_wrapper_info (MonoMethod *method, WrapperInfo *info);
-gpointer
+WrapperInfo*
mono_marshal_get_wrapper_info (MonoMethod *wrapper);
MonoMethod *
MonoMethod*
mono_marshal_get_runtime_invoke_dynamic (void);
+MonoMethod *
+mono_marshal_get_runtime_invoke_for_sig (MonoMethodSignature *sig);
+
MonoMethodSignature*
mono_marshal_get_string_ctor_signature (MonoMethod *method);
ves_icall_System_Runtime_InteropServices_Marshal_ReAllocCoTaskMem (gpointer ptr, int size);
void*
-ves_icall_System_Runtime_InteropServices_Marshal_AllocHGlobal (int size);
+ves_icall_System_Runtime_InteropServices_Marshal_AllocHGlobal (gpointer size);
gpointer
-ves_icall_System_Runtime_InteropServices_Marshal_ReAllocHGlobal (gpointer ptr, int size);
+ves_icall_System_Runtime_InteropServices_Marshal_ReAllocHGlobal (gpointer ptr, gpointer size);
void
ves_icall_System_Runtime_InteropServices_Marshal_FreeHGlobal (void *ptr);