n = MAX (n, meta->tables [MONO_TABLE_METHOD].rows);
n = MAX (n, meta->tables [MONO_TABLE_MODULEREF].rows);
n = MAX (n, meta->tables [MONO_TABLE_TYPESPEC].rows);
- n = MAX (n, meta->tables [MONO_TABLE_MEMBERREF].rows);
/* 3 bits to encode */
field_size = rtsize (n, 16 - 3);
}
#endif
-#ifndef __GNUC__
-/*#define __alignof__(a) sizeof(a)*/
-#define __alignof__(type) G_STRUCT_OFFSET(struct { char c; type x; }, x)
-#endif
+#define abi__alignof__(type) G_STRUCT_OFFSET(struct { char c; type x; }, x)
/*
* mono_type_size:
return 0;
}
if (t->byref) {
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
}
*align = 1;
return 0;
case MONO_TYPE_BOOLEAN:
- *align = __alignof__(gint8);
+ *align = abi__alignof__(gint8);
return 1;
case MONO_TYPE_I1:
case MONO_TYPE_U1:
- *align = __alignof__(gint8);
+ *align = abi__alignof__(gint8);
return 1;
case MONO_TYPE_CHAR:
case MONO_TYPE_I2:
case MONO_TYPE_U2:
- *align = __alignof__(gint16);
+ *align = abi__alignof__(gint16);
return 2;
case MONO_TYPE_I4:
case MONO_TYPE_U4:
- *align = __alignof__(gint32);
+ *align = abi__alignof__(gint32);
return 4;
case MONO_TYPE_R4:
- *align = __alignof__(float);
+ *align = abi__alignof__(float);
return 4;
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- *align = __alignof__(gint64);
+ *align = abi__alignof__(gint64);
return 8;
case MONO_TYPE_R8:
- *align = __alignof__(double);
+ *align = abi__alignof__(double);
return 8;
case MONO_TYPE_I:
case MONO_TYPE_U:
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
case MONO_TYPE_STRING:
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
case MONO_TYPE_OBJECT:
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
case MONO_TYPE_VALUETYPE: {
if (t->data.klass->enumtype)
case MONO_TYPE_PTR:
case MONO_TYPE_FNPTR:
case MONO_TYPE_ARRAY:
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
case MONO_TYPE_TYPEDBYREF:
return mono_class_value_size (mono_defaults.typed_reference_class, (guint32*)align);
else
return mono_class_value_size (mono_class_from_mono_type (t), (guint32*)align);
} else {
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
}
}
case MONO_TYPE_VAR:
case MONO_TYPE_MVAR:
/* FIXME: Martin, this is wrong. */
- *align = __alignof__(gpointer);
+ *align = abi__alignof__(gpointer);
return sizeof (gpointer);
default:
g_error ("mono_type_size: type 0x%02x unknown", t->type);
int tmp;
#if SIZEOF_VOID_P == SIZEOF_REGISTER
int stack_slot_size = sizeof (gpointer);
- int stack_slot_align = __alignof__ (gpointer);
+ int stack_slot_align = abi__alignof__ (gpointer);
#elif SIZEOF_VOID_P < SIZEOF_REGISTER
int stack_slot_size = SIZEOF_REGISTER;
int stack_slot_align = SIZEOF_REGISTER;
*align = stack_slot_align;
return stack_slot_size * 3;
case MONO_TYPE_R4:
- *align = __alignof__(float);
+ *align = abi__alignof__(float);
return sizeof (float);
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- *align = __alignof__(gint64);
+ *align = abi__alignof__(gint64);
return sizeof (gint64);
case MONO_TYPE_R8:
- *align = __alignof__(double);
+ *align = abi__alignof__(double);
return sizeof (double);
case MONO_TYPE_VALUETYPE: {
guint32 size;
return TRUE;
if (mono_generic_param_num (p1) != mono_generic_param_num (p2))
return FALSE;
+ if (p1->serial != p2->serial)
+ return FALSE;
/*
* We have to compare the image as well because if we didn't,
if (signature_only &&
(c1->byval_arg.type == MONO_TYPE_SZARRAY) && (c2->byval_arg.type == MONO_TYPE_SZARRAY))
return mono_metadata_class_equal (c1->byval_arg.data.klass, c2->byval_arg.data.klass, signature_only);
+ if (signature_only &&
+ (c1->byval_arg.type == MONO_TYPE_ARRAY) && (c2->byval_arg.type == MONO_TYPE_ARRAY))
+ return do_mono_metadata_type_equal (&c1->byval_arg, &c2->byval_arg, signature_only);
return FALSE;
}