MonoError error;
MonoMethod *res;
- if (obj == NULL)
- mono_raise_exception (mono_get_exception_null_reference ());
+ if (obj == NULL) {
+ mono_set_pending_exception (mono_get_exception_null_reference ());
+ return NULL;
+ }
res = mono_object_get_virtual_method (obj, method);
void
mono_helper_stelem_ref_check (MonoArray *array, MonoObject *val)
{
- if (!array)
- mono_raise_exception (mono_get_exception_null_reference ());
- if (val && !mono_object_isinst (val, array->obj.vtable->klass->element_class))
- mono_raise_exception (mono_get_exception_array_type_mismatch ());
+ if (!array) {
+ mono_set_pending_exception (mono_get_exception_null_reference ());
+ return;
+ }
+ if (val && !mono_object_isinst (val, array->obj.vtable->klass->element_class)) {
+ mono_set_pending_exception (mono_get_exception_array_type_mismatch ());
+ return;
+ }
}
#if !defined(MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS) || defined(MONO_ARCH_EMULATE_LONG_MUL_OVF_OPTS)
return res;
raise_exception:
- mono_raise_exception (mono_get_exception_overflow ());
+ mono_set_pending_exception (mono_get_exception_overflow ());
return 0;
}
return res;
raise_exception:
- mono_raise_exception (mono_get_exception_overflow ());
+ mono_set_pending_exception (mono_get_exception_overflow ());
return 0;
}
mono_lldiv (gint64 a, gint64 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
- else if (b == -1 && a == (-9223372036854775807LL - 1LL))
- mono_raise_exception (mono_get_exception_arithmetic ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
+ else if (b == -1 && a == (-9223372036854775807LL - 1LL)) {
+ mono_set_pending_exception (mono_get_exception_arithmetic ());
+ return 0;
+ }
#endif
return a / b;
}
mono_llrem (gint64 a, gint64 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
- else if (b == -1 && a == (-9223372036854775807LL - 1LL))
- mono_raise_exception (mono_get_exception_arithmetic ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
+ else if (b == -1 && a == (-9223372036854775807LL - 1LL)) {
+ mono_set_pending_exception (mono_get_exception_arithmetic ());
+ return 0;
+ }
#endif
return a % b;
}
mono_lldiv_un (guint64 a, guint64 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
#endif
return a / b;
}
mono_llrem_un (guint64 a, guint64 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
#endif
return a % b;
}
mono_idiv (gint32 a, gint32 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
- else if (b == -1 && a == (0x80000000))
- mono_raise_exception (mono_get_exception_overflow ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
+ else if (b == -1 && a == (0x80000000)) {
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
+ }
#endif
return a / b;
}
mono_idiv_un (guint32 a, guint32 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
#endif
return a / b;
}
mono_irem (gint32 a, gint32 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
- else if (b == -1 && a == (0x80000000))
- mono_raise_exception (mono_get_exception_overflow ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
+ else if (b == -1 && a == (0x80000000)) {
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
+ }
#endif
-
return a % b;
}
mono_irem_un (guint32 a, guint32 b)
{
#ifdef MONO_ARCH_NEED_DIV_CHECK
- if (!b)
- mono_raise_exception (mono_get_exception_divide_by_zero ());
+ if (!b) {
+ mono_set_pending_exception (mono_get_exception_divide_by_zero ());
+ return 0;
+ }
#endif
return a % b;
}
res = (gint64)a * (gint64)b;
- if ((res > 0x7fffffffL) || (res < -2147483648LL))
- mono_raise_exception (mono_get_exception_overflow ());
+ if ((res > 0x7fffffffL) || (res < -2147483648LL)) {
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
+ }
return res;
}
res = (guint64)a * (guint64)b;
- if ((res >> 32))
- mono_raise_exception (mono_get_exception_overflow ());
+ if (res >> 32) {
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
+ }
return res;
}
res = (gint64)v;
if (isnan(v) || trunc (v) != res) {
- mono_raise_exception (mono_get_exception_overflow ());
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
}
return res;
}
*/
#if defined(__arm__) && defined(MONO_ARCH_SOFT_FLOAT_FALLBACK)
if (isnan (v) || !(v >= -0.5 && v <= ULLONG_MAX+0.5)) {
- mono_raise_exception (mono_get_exception_overflow ());
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
}
res = (guint64)v;
#else
res = (guint64)v;
if (isnan(v) || trunc (v) != res) {
- mono_raise_exception (mono_get_exception_overflow ());
+ mono_set_pending_exception (mono_get_exception_overflow ());
+ return 0;
}
#endif
return res;
mono_jit_stats.generic_virtual_invocations++;
- if (obj == NULL)
- mono_raise_exception (mono_get_exception_null_reference ());
+ if (obj == NULL) {
+ mono_set_pending_exception (mono_get_exception_null_reference ());
+ return NULL;
+ }
vmethod = mono_object_get_virtual_method (obj, method);
g_assert (!vmethod->klass->generic_container);
g_assert (!vmethod->klass->generic_class || !vmethod->klass->generic_class->context.class_inst->is_open);
jit_tls->class_cast_to = klass;
}
- mono_raise_exception (mono_exception_from_name (mono_defaults.corlib,
+ mono_set_pending_exception (mono_exception_from_name (mono_defaults.corlib,
"System", "InvalidCastException"));
return NULL;
jit_tls->class_cast_to = klass;
}
- mono_raise_exception (mono_exception_from_name (mono_defaults.corlib,
+ mono_set_pending_exception (mono_exception_from_name (mono_defaults.corlib,
"System", "InvalidCastException"));
return NULL;
MonoMethod *m;
int vt_slot;
- if (klass->flags & TYPE_ATTRIBUTE_INTERFACE)
- mono_raise_exception (mono_get_exception_execution_engine ("Not yet supported."));
+ if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
+ mono_set_pending_exception (mono_get_exception_execution_engine ("Not yet supported."));
+ return NULL;
+ }
if (mono_method_signature (cmethod)->pinvoke) {
/* Object.GetType () */