Author: zoltan
Date: 2007-12-23 16:47:34 -0500 (Sun, 23 Dec 2007)
New Revision: 91845
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/marshal.c
trunk/mono/mono/metadata/marshal.h
Log:
2007-12-23 Zoltan Varga <[EMAIL PROTECTED]>
* marshal.h marshal.c: Export some mono_mb_... functions.
* marshal.c: Use mono_mb_get_label () and mono_mb_patch_branch () in
all places.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2007-12-23 21:44:04 UTC (rev 91844)
+++ trunk/mono/mono/metadata/ChangeLog 2007-12-23 21:47:34 UTC (rev 91845)
@@ -1,5 +1,9 @@
2007-12-23 Zoltan Varga <[EMAIL PROTECTED]>
+ * marshal.h marshal.c: Export some mono_mb_... functions.
+
+ * marshal.c: Use mono_mb_get_label () and mono_mb_patch_branch () in
all places.
+
* loader.c (field_from_memberref): Remove the dynamic case, it is
handled in
the caller.
Modified: trunk/mono/mono/metadata/marshal.c
===================================================================
--- trunk/mono/mono/metadata/marshal.c 2007-12-23 21:44:04 UTC (rev 91844)
+++ trunk/mono/mono/metadata/marshal.c 2007-12-23 21:47:34 UTC (rev 91845)
@@ -1489,7 +1489,7 @@
mb->pos += 2;
}
-static inline void
+void
mono_mb_emit_op (MonoMethodBuilder *mb, guint8 op, gpointer data)
{
mono_mb_emit_byte (mb, op);
@@ -1614,7 +1614,7 @@
return res;
}
-static void
+void
mono_mb_patch_branch (MonoMethodBuilder *mb, guint32 pos)
{
mono_mb_patch_addr (mb, pos, mb->pos - (pos + 4));
@@ -1633,7 +1633,7 @@
mono_mb_emit_op (mb, CEE_MONO_LDPTR, ptr);
}
-static void
+void
mono_mb_emit_calli (MonoMethodBuilder *mb, MonoMethodSignature *sig)
{
mono_mb_emit_op (mb, CEE_CALLI, sig);
@@ -1678,7 +1678,7 @@
mono_mb_emit_byte (mb, CEE_MONO_RESTORE_LMF);
}
-static void
+void
mono_mb_emit_exception_full (MonoMethodBuilder *mb, const char *exc_nspace,
const char *exc_name, const char *msg)
{
MonoMethod *ctor = NULL;
@@ -1912,7 +1912,7 @@
mono_mb_emit_stloc (mb, index_var);
/* Loop header */
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldloc (mb, array_var);
mono_mb_emit_byte (mb, CEE_LDLEN);
@@ -2340,7 +2340,7 @@
mono_mb_emit_stloc (mb, index_var);
/* Loop header */
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldloc (mb, array_var);
mono_mb_emit_byte (mb, CEE_LDLEN);
@@ -2803,7 +2803,7 @@
mono_mb_emit_icall (mb, checkpoint_func);
- mono_mb_patch_addr (mb, pos_noabort, mb->pos - (pos_noabort + 4));
+ mono_mb_patch_branch (mb, pos_noabort);
}
static void
@@ -4070,7 +4070,7 @@
mono_loader_lock ();
main_clause = mono_mempool_alloc0 (method->klass->image->mempool,
sizeof (MonoExceptionClause));
mono_loader_unlock ();
- main_clause->try_offset = mb->pos;
+ main_clause->try_offset = mono_mb_get_label (mb);
/* Clean the call context */
@@ -4093,7 +4093,7 @@
else
mono_mb_emit_byte (mb, CEE_POP);
- mono_mb_patch_addr_s (mb, pos, mb->pos - (pos + 1));
+ mono_mb_patch_short_branch (mb, pos);
/* Get the target object */
@@ -4246,7 +4246,7 @@
main_clause->data.catch_class = mono_defaults.object_class;
/* handler code */
- main_clause->handler_offset = mb->pos;
+ main_clause->handler_offset = mono_mb_get_label (mb);
mono_mb_emit_managed_call (mb, method_rs_serialize_exc, NULL);
mono_mb_emit_stloc (mb, loc_serialized_exc);
mono_mb_emit_ldarg (mb, 2);
@@ -4256,7 +4256,7 @@
main_clause->handler_len = mb->pos - main_clause->handler_offset;
/* end catch */
- mono_mb_patch_addr (mb, pos_leave, mb->pos - (pos_leave + 4));
+ mono_mb_patch_branch (mb, pos_leave);
if (copy_return)
mono_mb_emit_ldloc (mb, loc_return);
@@ -4509,7 +4509,7 @@
mono_mb_emit_op (mb, CEE_CASTCLASS, mono_defaults.exception_class);
mono_mb_emit_managed_call (mb, method_exc_fixexc, NULL);
mono_mb_emit_byte (mb, CEE_THROW);
- mono_mb_patch_addr_s (mb, pos_noex, mb->pos - pos_noex - 1);
+ mono_mb_patch_short_branch (mb, pos_noex);
/* copy back non-serialized output parameters */
@@ -4579,7 +4579,7 @@
pos = mono_mb_emit_short_branch (mb, CEE_BRFALSE_S);
mono_marshal_emit_xdomain_copy_value (mb, byte_array_class);
- mono_mb_patch_addr_s (mb, pos, mb->pos - (pos + 1));
+ mono_mb_patch_short_branch (mb, pos);
mono_mb_emit_managed_call (mb, method_rs_deserialize, NULL);
mono_mb_emit_byte (mb, CEE_POP);
}
@@ -4656,7 +4656,7 @@
mono_mb_emit_managed_call (mb, native, mono_method_signature
(native));
mono_mb_emit_byte (mb, CEE_RET);
- mono_mb_patch_addr (mb, pos_rem, mb->pos - (pos_rem + 4));
+ mono_mb_patch_branch (mb, pos_rem);
}
/* wrapper for normal remote calls */
native = mono_marshal_get_remoting_invoke (method);
@@ -5219,10 +5219,10 @@
clause = mono_mempool_alloc0 (target_klass->image->mempool, sizeof
(MonoExceptionClause));
mono_loader_unlock ();
clause->flags = MONO_EXCEPTION_CLAUSE_FILTER;
- clause->try_len = mb->pos;
+ clause->try_len = mono_mb_get_label (mb);
/* filter code */
- clause->data.filter_offset = mb->pos;
+ clause->data.filter_offset = mono_mb_get_label (mb);
mono_mb_emit_byte (mb, CEE_POP);
mono_mb_emit_byte (mb, CEE_LDARG_2);
@@ -5232,7 +5232,7 @@
mono_mb_emit_byte (mb, CEE_PREFIX1);
mono_mb_emit_byte (mb, CEE_ENDFILTER);
- clause->handler_offset = mb->pos;
+ clause->handler_offset = mono_mb_get_label (mb);
/* handler code */
/* store exception */
@@ -6674,7 +6674,7 @@
label_next = mono_mb_emit_branch (mb, CEE_BRFALSE);
mono_mb_emit_ldarg (mb, argnum);
mono_mb_emit_managed_call (mb, sh_dangerous_release,
NULL);
- mono_mb_patch_addr (mb, label_next, mb->pos -
(label_next + 4));
+ mono_mb_patch_branch (mb, label_next);
}
break;
}
@@ -7730,7 +7730,7 @@
index_var = mono_mb_add_local (mb,
&mono_defaults.int_class->byval_arg);
mono_mb_emit_byte (mb, CEE_LDC_I4_0);
mono_mb_emit_stloc (mb, index_var);
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldloc (mb, src_var);
mono_mb_emit_byte (mb, CEE_LDLEN);
@@ -7813,7 +7813,7 @@
index_var = mono_mb_add_local (mb,
&mono_defaults.int_class->byval_arg);
mono_mb_emit_byte (mb, CEE_LDC_I4_0);
mono_mb_emit_stloc (mb, index_var);
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldarg (mb, argnum);
if (t->byref)
@@ -8052,7 +8052,7 @@
index_var = mono_mb_add_local (mb,
&mono_defaults.int_class->byval_arg);
mono_mb_emit_byte (mb, CEE_LDC_I4_0);
mono_mb_emit_stloc (mb, index_var);
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldloc (mb, conv_arg);
mono_mb_emit_byte (mb, CEE_LDLEN);
@@ -8170,7 +8170,7 @@
index_var = mono_mb_add_local (mb,
&mono_defaults.int_class->byval_arg);
mono_mb_emit_byte (mb, CEE_LDC_I4_0);
mono_mb_emit_stloc (mb, index_var);
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldloc (mb, conv_arg);
mono_mb_emit_byte (mb, CEE_LDLEN);
@@ -8266,7 +8266,7 @@
index_var = mono_mb_add_local (mb,
&mono_defaults.int_class->byval_arg);
mono_mb_emit_byte (mb, CEE_LDC_I4_0);
mono_mb_emit_stloc (mb, index_var);
- label2 = mb->pos;
+ label2 = mono_mb_get_label (mb);
mono_mb_emit_ldloc (mb, index_var);
mono_mb_emit_ldloc (mb, src);
mono_mb_emit_byte (mb, CEE_LDLEN);
@@ -9279,20 +9279,20 @@
/* fail */
- mono_mb_patch_addr (mb, pos_failed, mb->pos - (pos_failed + 4));
+ mono_mb_patch_branch (mb, pos_failed);
mono_mb_emit_byte (mb, CEE_LDNULL);
pos_end2 = mono_mb_emit_branch (mb, CEE_BR);
/* success */
- mono_mb_patch_addr (mb, pos_was_ok, mb->pos - (pos_was_ok + 4));
+ mono_mb_patch_branch (mb, pos_was_ok);
mono_mb_emit_byte (mb, CEE_POP);
mono_mb_emit_ldarg (mb, 0);
/* the end */
- mono_mb_patch_addr (mb, pos_end, mb->pos - (pos_end + 4));
- mono_mb_patch_addr (mb, pos_end2, mb->pos - (pos_end2 + 4));
+ mono_mb_patch_branch (mb, pos_end);
+ mono_mb_patch_branch (mb, pos_end2);
mono_mb_emit_byte (mb, CEE_RET);
res = mono_mb_create_and_cache (cache, klass, mb, isint_sig,
isint_sig->param_count + 16);
@@ -9360,8 +9360,8 @@
mono_mb_emit_exception (mb, "InvalidCastException", NULL);
/* success */
- mono_mb_patch_addr (mb, pos_was_ok, mb->pos - (pos_was_ok + 4));
- mono_mb_patch_addr (mb, pos_was_ok2, mb->pos - (pos_was_ok2 + 4));
+ mono_mb_patch_branch (mb, pos_was_ok);
+ mono_mb_patch_branch (mb, pos_was_ok2);
mono_mb_emit_ldarg (mb, 0);
/* the end */
@@ -9435,12 +9435,12 @@
/* fail */
- mono_mb_patch_addr (mb, pos_failed, mb->pos - (pos_failed + 4));
+ mono_mb_patch_branch (mb, pos_failed);
mono_mb_emit_byte (mb, CEE_LDNULL);
/* the end */
- mono_mb_patch_addr (mb, pos_end, mb->pos - (pos_end + 4));
+ mono_mb_patch_branch (mb, pos_end);
mono_mb_emit_byte (mb, CEE_RET);
res = mono_mb_create_and_cache (cache, klass, mb, isint_sig,
isint_sig->param_count + 16);
@@ -9659,7 +9659,7 @@
mono_mb_emit_ldloc (mb, this_local);
mono_mb_emit_managed_call (mb, enter_method, NULL);
- clause->try_offset = mb->pos;
+ clause->try_offset = mono_mb_get_label (mb);
/* Call the method */
if (sig->hasthis)
@@ -9678,7 +9678,7 @@
pos = mono_mb_emit_branch (mb, CEE_LEAVE);
clause->try_len = mb->pos - clause->try_offset;
- clause->handler_offset = mb->pos;
+ clause->handler_offset = mono_mb_get_label (mb);
/* Call Monitor::Exit() */
mono_mb_emit_ldloc (mb, this_local);
@@ -9856,7 +9856,7 @@
b3 = mono_mb_emit_branch (mb, CEE_BNE_UN);
- copy_pos = mb->pos;
+ copy_pos = mono_mb_get_label (mb);
/* do_store */
mono_mb_patch_branch (mb, b1);
mono_mb_emit_ldloc (mb, array_slot_addr);
@@ -11944,7 +11944,7 @@
/* try */
main_clause = g_new0 (MonoExceptionClause, 1);
- main_clause->try_offset = mb->pos;
+ main_clause->try_offset = mono_mb_get_label (mb);
}
/* load last param to store result if not preserve_sig and not void */
@@ -11974,14 +11974,14 @@
main_clause->data.catch_class = mono_defaults.object_class;
/* handler code */
- main_clause->handler_offset = mb->pos;
+ main_clause->handler_offset = mono_mb_get_label (mb);
mono_mb_emit_managed_call (mb, get_hr_for_exception, NULL);
mono_mb_emit_stloc (mb, hr);
mono_mb_emit_branch (mb, CEE_LEAVE);
main_clause->handler_len = mb->pos -
main_clause->handler_offset;
/* end catch */
- mono_mb_patch_addr (mb, pos_leave, mb->pos - (pos_leave + 4));
+ mono_mb_patch_branch (mb, pos_leave);
mono_mb_emit_ldloc (mb, hr);
}
Modified: trunk/mono/mono/metadata/marshal.h
===================================================================
--- trunk/mono/mono/metadata/marshal.h 2007-12-23 21:44:04 UTC (rev 91844)
+++ trunk/mono/mono/metadata/marshal.h 2007-12-23 21:47:34 UTC (rev 91845)
@@ -108,6 +108,9 @@
mono_mb_patch_addr_s (MonoMethodBuilder *mb, int pos, gint8 value)
MONO_INTERNAL;
void
+mono_mb_patch_branch (MonoMethodBuilder *mb, guint32 pos) MONO_INTERNAL;
+
+void
mono_mb_patch_short_branch (MonoMethodBuilder *mb, guint32 pos) MONO_INTERNAL;
int
@@ -117,6 +120,9 @@
mono_mb_add_data (MonoMethodBuilder *mb, gpointer data) MONO_INTERNAL;
void
+mono_mb_emit_calli (MonoMethodBuilder *mb, MonoMethodSignature *sig)
MONO_INTERNAL;
+
+void
mono_mb_emit_native_call (MonoMethodBuilder *mb, MonoMethodSignature *sig,
gpointer func) MONO_INTERNAL;
void
@@ -150,6 +156,9 @@
mono_mb_emit_exception (MonoMethodBuilder *mb, const char *exc_name, const
char *msg) MONO_INTERNAL;
void
+mono_mb_emit_exception_full (MonoMethodBuilder *mb, const char *exc_nspace,
const char *exc_name, const char *msg) MONO_INTERNAL;
+
+void
mono_mb_emit_icon (MonoMethodBuilder *mb, gint32 value) MONO_INTERNAL;
guint32
@@ -174,6 +183,9 @@
mono_mb_emit_i4 (MonoMethodBuilder *mb, gint32 data) MONO_INTERNAL;
void
+mono_mb_emit_op (MonoMethodBuilder *mb, guint8 op, gpointer data)
MONO_INTERNAL;
+
+void
mono_mb_emit_ldstr (MonoMethodBuilder *mb, char *str) MONO_INTERNAL;
guint
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches