MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_INTRINS_BYREFERENCE_CTOR) {
- MonoMethodSignature *csig;
- guint32 token;
-
- frame->ip = ip;
- token = ip [1];
- ip += 2;
-
- InterpMethod *cmethod = (InterpMethod*)frame->imethod->data_items [token];
- csig = mono_method_signature_internal (cmethod->method);
-
- g_assert (csig->hasthis);
- sp -= csig->param_count;
-
- gpointer arg0 = sp [0].data.p;
-
+ gpointer arg0 = sp [-1].data.p;
gpointer *byreference_this = (gpointer*)vt_sp;
*byreference_this = arg0;
/* Followed by a VTRESULT opcode which will push the result on the stack */
- ++sp;
+ /* FIXME kill MINT_VTRESULT */
+ ip++;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_INTRINS_BYREFERENCE_GET_VALUE) {
OPDEF(MINT_INTRINS_ENUM_HASFLAG, "intrins_enum_hasflag", 2, Pop2, Push1, MintOpClassToken)
OPDEF(MINT_INTRINS_GET_HASHCODE, "intrins_get_hashcode", 1, Pop1, Push1, MintOpNoArgs)
OPDEF(MINT_INTRINS_GET_TYPE, "intrins_get_type", 1, Pop1, Push1, MintOpNoArgs)
-OPDEF(MINT_INTRINS_BYREFERENCE_CTOR, "intrins_byreference_ctor", 2, VarPop, Push1, MintOpClassToken)
+OPDEF(MINT_INTRINS_BYREFERENCE_CTOR, "intrins_byreference_ctor", 1, Pop1, Push1, MintOpClassToken)
OPDEF(MINT_INTRINS_BYREFERENCE_GET_VALUE, "intrins_byreference_get_value", 1, Pop1, Push1, MintOpNoArgs)
OPDEF(MINT_INTRINS_UNSAFE_ADD_BYTE_OFFSET, "intrins_unsafe_add_byte_offset", 1, Pop2, Push1, MintOpNoArgs)
OPDEF(MINT_INTRINS_UNSAFE_BYTE_OFFSET, "intrins_unsafe_byte_offset", 1, Pop2, Push1, MintOpNoArgs)
/* public ByReference(ref T value) */
g_assert (csignature->hasthis && csignature->param_count == 1);
interp_add_ins (td, MINT_INTRINS_BYREFERENCE_CTOR);
- td->last_ins->data [0] = get_data_item_index (td, mono_interp_get_imethod (domain, m, error));
} else if (klass != mono_defaults.string_class &&
!mono_class_is_marshalbyref (klass) &&
!mono_class_has_finalizer (klass) &&
*push = 1;
break;
}
- case MINT_INTRINS_BYREFERENCE_CTOR: {
- InterpMethod *imethod = (InterpMethod*) td->data_items [ins->data [0]];
- *pop = imethod->param_count;
- *push = 1;
- break;
- }
default:
g_assert_not_reached ();
}