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 #1419 from directhex/bump_msvc_VERSION
[mono.git]
/
mono
/
mini
/
jit-icalls.c
diff --git
a/mono/mini/jit-icalls.c
b/mono/mini/jit-icalls.c
index 45c7689a58ab09bf9e100b53049471ffabae6ab5..fcfcf4f3cd16160c56f2bfacc12e51b9850d1b41 100644
(file)
--- a/
mono/mini/jit-icalls.c
+++ b/
mono/mini/jit-icalls.c
@@
-17,7
+17,7
@@
#endif
#include "jit-icalls.h"
#endif
#include "jit-icalls.h"
-
+#include <mono/utils/mono-error-internals.h>
void*
mono_ldftn (MonoMethod *method)
{
void*
mono_ldftn (MonoMethod *method)
{
@@
-1022,9
+1022,9
@@
mono_helper_ldstr_mscorlib (guint32 idx)
MonoObject*
mono_helper_newobj_mscorlib (guint32 idx)
{
MonoObject*
mono_helper_newobj_mscorlib (guint32 idx)
{
- Mono
Class *klass = mono_class_get (mono_defaults.corlib, MONO_TOKEN_TYPE_DEF | idx)
;
-
-
g_assert (klass
);
+ Mono
Error error
;
+ MonoClass *klass = mono_class_get_checked (mono_defaults.corlib, MONO_TOKEN_TYPE_DEF | idx, &error);
+
mono_error_raise_exception (&error
);
return mono_object_new (mono_domain_get (), klass);
}
return mono_object_new (mono_domain_get (), klass);
}
@@
-1061,6
+1061,7
@@
MonoObject*
mono_object_castclass_unbox (MonoObject *obj, MonoClass *klass)
{
MonoJitTlsData *jit_tls = NULL;
mono_object_castclass_unbox (MonoObject *obj, MonoClass *klass)
{
MonoJitTlsData *jit_tls = NULL;
+ MonoClass *oklass;
if (mini_get_debug_options ()->better_cast_details) {
jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
if (mini_get_debug_options ()->better_cast_details) {
jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
@@
-1070,13
+1071,14
@@
mono_object_castclass_unbox (MonoObject *obj, MonoClass *klass)
if (!obj)
return NULL;
if (!obj)
return NULL;
- if (klass->enumtype && obj->vtable->klass == klass->element_class)
+ oklass = obj->vtable->klass;
+ if ((klass->enumtype && oklass == klass->element_class) || (oklass->enumtype && klass == oklass->element_class))
return obj;
if (mono_object_isinst (obj, klass))
return obj;
if (mini_get_debug_options ()->better_cast_details) {
return obj;
if (mono_object_isinst (obj, klass))
return obj;
if (mini_get_debug_options ()->better_cast_details) {
- jit_tls->class_cast_from = o
bj->vtable->
klass;
+ jit_tls->class_cast_from = oklass;
jit_tls->class_cast_to = klass;
}
jit_tls->class_cast_to = klass;
}