{
int mt;
MonoClass *klass = NULL;
- if (n == 0 && td->method->signature->hasthis) {
+ if (n == 0 && mono_method_signature (td->method)->hasthis) {
if (td->method->klass->valuetype)
mt = MINT_TYPE_P;
else {
ADD_CODE(td, MINT_LDTHIS);
} else {
MonoType *type;
- n -= td->method->signature->hasthis;
- type = td->method->signature->params [n];
+ n -= mono_method_signature (td->method)->hasthis;
+ type = mono_method_signature (td->method)->params [n];
mt = mint_type (type);
if (mt == MINT_TYPE_VT) {
gint32 size;
- if (td->method->signature->pinvoke)
+ if (mono_method_signature (td->method)->pinvoke)
size = mono_class_native_size (type->data.klass, NULL);
else
size = mono_class_value_size (type->data.klass, NULL);
{
int mt;
CHECK_STACK (td, 1);
- if (n == 0 && td->method->signature->hasthis)
+ if (n == 0 && mono_method_signature (td->method)->hasthis)
ADD_CODE(td, MINT_STTHIS);
else {
MonoType *type;
- n -= td->method->signature->hasthis;
- type = td->method->signature->params [n];
+ n -= mono_method_signature (td->method)->hasthis;
+ type = mono_method_signature (td->method)->params [n];
mt = mint_type (type);
if (mt == MINT_TYPE_VT) {
gint32 size;
- if (td->method->signature->pinvoke)
+ if (mono_method_signature (td->method)->pinvoke)
size = mono_class_native_size (type->data.klass, NULL);
else
size = mono_class_value_size (type->data.klass, NULL);
static void
store_inarg(TransformData *td, int n)
{
- MonoType *type = td->method->signature->params [n];
+ MonoType *type = mono_method_signature (td->method)->params [n];
int mt = mint_type (type);
if (mt == MINT_TYPE_VT) {
gint32 size;
- if (td->method->signature->pinvoke)
+ if (mono_method_signature (td->method)->pinvoke)
size = mono_class_native_size (type->data.klass, NULL);
else
size = mono_class_value_size (type->data.klass, NULL);
static void
generate(MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start)
{
- MonoMethodHeader *header = ((MonoMethodNormal*)method)->header;
- MonoMethodSignature *signature = method->signature;
+ MonoMethodHeader *header = mono_method_get_header (method);
+ MonoMethodSignature *signature = mono_method_signature (method);
MonoImage *image = method->klass->image;
MonoDomain *domain = mono_domain_get ();
MonoGenericContext *generic_context = NULL;
TransformData td;
int generating_code = 1;
- if (method->signature->is_inflated)
+ if (mono_method_signature (method)->is_inflated)
generic_context = ((MonoMethodInflated *) method)->context;
memset(&td, 0, sizeof(td));
m = mono_get_method_full (image, token, NULL, generic_context);
else
m = (MonoMethod *)mono_method_get_wrapper_data (method, token);
- csignature = m->signature;
+ csignature = mono_method_signature (m);
if (m->klass == mono_defaults.string_class) {
if (m->name [0] == 'g') {
if (strcmp (m->name, "get_Chars") == 0)
(m->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) == 0 &&
(m->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) == 0) {
int called_inited = mono_class_vtable (domain, m->klass)->initialized;
- MonoMethodHeader *mheader = ((MonoMethodNormal*)m)->header;
+ MonoMethodHeader *mheader = mono_method_get_header (m);
if (/*mono_metadata_signature_equal (method->signature, m->signature) */ method == m && *(td.ip + 5) == CEE_RET) {
int offset;
td.ip += 5;
break;
} else {
-
- if (*mheader->code == CEE_RET && called_inited) {
+ /* mheader might not exist if this is a delegate invoc, etc */
+ if (mheader && *mheader->code == CEE_RET && called_inited) {
if (mono_interp_traceopt)
g_print ("Inline (empty) call of %s.%s\n", m->klass->name, m->name);
for (i = 0; i < csignature->param_count; i++)
else
m = mono_get_method_full (image, token, NULL, generic_context);
- csignature = m->signature;
+ csignature = mono_method_signature (m);
klass = m->klass;
td.sp -= csignature->param_count;
ADD_CODE(&td, MINT_NEWOBJ);
CHECK_STACK (&td, info->sig->param_count);
switch (info->sig->param_count) {
+ case 0:
+ if (MONO_TYPE_IS_VOID (info->sig->ret))
+ ADD_CODE (&td,MINT_ICALL_V_V);
+ else
+ g_assert_not_reached();
+ break;
case 1:
if (MONO_TYPE_IS_VOID (info->sig->ret))
ADD_CODE (&td,MINT_ICALL_P_V);
break;
}
case CEE_MONO_LDPTR:
+ case CEE_MONO_CLASSCONST:
token = read32 (td.ip + 1);
td.ip += 5;
ADD_CODE(&td, MINT_MONO_LDPTR);
break;
case CEE_MONO_SAVE_LMF:
case CEE_MONO_RESTORE_LMF:
+ case CEE_MONO_NOT_TAKEN:
++td.ip;
break;
default:
int i, align, size, offset;
MonoMethod *method = runtime_method->method;
MonoImage *image = method->klass->image;
- MonoMethodHeader *header = ((MonoMethodNormal*)method)->header;
- MonoMethodSignature *signature = method->signature;
+ MonoMethodHeader *header = mono_method_get_header (method);
+ MonoMethodSignature *signature = mono_method_signature (method);
register const unsigned char *ip, *end;
const MonoOpcode *opcode;
MonoMethod *m;
mono_profiler_method_jit (method); /* sort of... */
- if (method->signature->is_inflated)
+ if (mono_method_signature (method)->is_inflated)
generic_context = ((MonoMethodInflated *) method)->context;
if (method->iflags & (METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL | METHOD_IMPL_ATTRIBUTE_RUNTIME)) {
/* assumes all internal calls with an array this are built in... */
if (method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL &&
- (!method->signature->hasthis || method->klass->rank == 0)) {
+ (! mono_method_signature (method)->hasthis || method->klass->rank == 0)) {
runtime_method->code = g_malloc(sizeof(short));
runtime_method->code[0] = MINT_CALLINT;
- if (method->addr == NULL)
- method->addr = mono_lookup_internal_call (method);
- runtime_method->func = mono_arch_create_trampoline (method->signature, method->string_ctor);
+ if (((MonoMethodPInvoke*) method)->addr == NULL)
+ ((MonoMethodPInvoke*) method)->addr = mono_lookup_internal_call (method);
+ runtime_method->func = mono_arch_create_trampoline (mono_method_signature (method), method->string_ctor);
} else {
const char *name = method->name;
if (method->klass->parent == mono_defaults.multicastdelegate_class) {
return NULL;
}
method = nm;
- header = ((MonoMethodNormal *)nm)->header;
+ header = mono_method_get_header (nm);
LeaveCriticalSection(&calc_section);
}
g_assert ((signature->param_count + signature->hasthis) < 1000);