projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #3749 from BrzVlad/fix-mips-fix
[mono.git]
/
mono
/
metadata
/
marshal.c
diff --git
a/mono/metadata/marshal.c
b/mono/metadata/marshal.c
index 5b290e74947ff5143a963c5a2e891c4d7d71fc3f..d771d22d2ee6833810f31e5b6bbb39fbbf3fdc93 100644
(file)
--- a/
mono/metadata/marshal.c
+++ b/
mono/metadata/marshal.c
@@
-52,6
+52,10
@@
#include <string.h>
#include <errno.h>
#include <string.h>
#include <errno.h>
+#if defined(HOST_WIN32)
+#include <objbase.h>
+#endif
+
/* #define DEBUG_RUNTIME_CODE */
#define OPDEF(a,b,c,d,e,f,g,h,i,j) \
/* #define DEBUG_RUNTIME_CODE */
#define OPDEF(a,b,c,d,e,f,g,h,i,j) \
@@
-778,7
+782,7
@@
mono_free_lparray (MonoArray *array, gpointer* nativeArray)
if (klass->element_class->byval_arg.type == MONO_TYPE_CLASS) {
for(i = 0; i < array->max_length; ++i)
mono_marshal_free_ccw (mono_array_get (array, MonoObject*, i));
if (klass->element_class->byval_arg.type == MONO_TYPE_CLASS) {
for(i = 0; i < array->max_length; ++i)
mono_marshal_free_ccw (mono_array_get (array, MonoObject*, i));
-
free
(nativeArray);
+
g_free
(nativeArray);
}
#endif
}
}
#endif
}
@@
-2691,6
+2695,11
@@
mono_marshal_method_from_wrapper (MonoMethod *wrapper)
return info->d.runtime_invoke.method;
else
return NULL;
return info->d.runtime_invoke.method;
else
return NULL;
+ case MONO_WRAPPER_DELEGATE_INVOKE:
+ if (info)
+ return info->d.delegate_invoke.method;
+ else
+ return NULL;
default:
return NULL;
}
default:
return NULL;
}
@@
-9360,7
+9369,8
@@
mono_marshal_get_synchronized_wrapper (MonoMethod *method)
#endif
if (method->klass->valuetype && !(method->flags & MONO_METHOD_ATTR_STATIC)) {
#endif
if (method->klass->valuetype && !(method->flags & MONO_METHOD_ATTR_STATIC)) {
- mono_class_set_failure (method->klass, MONO_EXCEPTION_TYPE_LOAD, NULL);
+ /* FIXME Is this really the best way to signal an error here? Isn't this called much later after class setup? -AK */
+ mono_class_set_type_load_failure (method->klass, "");
#ifndef DISABLE_JIT
/* This will throw the type load exception when the wrapper is compiled */
mono_mb_emit_byte (mb, CEE_LDNULL);
#ifndef DISABLE_JIT
/* This will throw the type load exception when the wrapper is compiled */
mono_mb_emit_byte (mb, CEE_LDNULL);
@@
-10526,7
+10536,7
@@
mono_marshal_alloc (gulong size, MonoError *error)
#else
res = g_try_malloc ((gulong)size);
if (!res)
#else
res = g_try_malloc ((gulong)size);
if (!res)
- mono_error_set_out_of_memory (error, "Could not allocate %
i
bytes", size);
+ mono_error_set_out_of_memory (error, "Could not allocate %
lu
bytes", size);
#endif
return res;
}
#endif
return res;
}
@@
-11323,6
+11333,9
@@
mono_marshal_load_type_info (MonoClass* klass)
j++;
}
j++;
}
+ if (klass->byval_arg.type == MONO_TYPE_PTR)
+ info->native_size = sizeof (gpointer);
+
if (layout != TYPE_ATTRIBUTE_AUTO_LAYOUT) {
info->native_size = MAX (native_size, info->native_size);
/*
if (layout != TYPE_ATTRIBUTE_AUTO_LAYOUT) {
info->native_size = MAX (native_size, info->native_size);
/*