[Mono-dev] Change how mono_method_get_param_names works
Robert Jordan
robertj at gmx.net
Tue Aug 18 11:37:07 EDT 2009
Hi Rodrigo,
Rodrigo Kumpera wrote:
> Hi Paolo,
>
> I think that mono_method_get_param_names should be changed to not require
> the caller to
> figure out the number of parameters. In adition to that, this function has
> no way to return an
> error back to the caller.
>
> My suggestion is to change it to
> MonoError mono_method_get_param_names (MonoMethod *method, char **names, int
> *params)
>
> On success names points to a g_malloc'd array of *params strings that come
> from assembly memory.
> On failure names and params are left untouched.
Speaking of which, besides the param names there is another
bit of information not available from mono_method_* or
mono_signature_*: the param attributes. I'm using this function
to obtain them:
/*
* same semantics like mono_method_get_param_names
*/
void
mono_method_get_param_attrs (MonoMethod *method, guint32 *attrs)
{
MonoClass *clazz = mono_method_get_class (method);
MonoImage *image = mono_class_get_image (clazz);
const MonoTableInfo *methodt, *paramt;
guint32 idx;
methodt = mono_image_get_table_info (image, MONO_TABLE_METHOD);
paramt = mono_image_get_table_info (image, MONO_TABLE_PARAM);
idx = mono_method_get_index (method);
if (idx > 0) {
guint param_index = mono_metadata_decode_row_col (methodt, idx - 1,
MONO_METHOD_PARAMLIST);
guint32 cols [MONO_PARAM_SIZE];
int i, lastp;
if (idx < mono_table_info_get_rows (methodt))
lastp = mono_metadata_decode_row_col (methodt, idx,
MONO_METHOD_PARAMLIST);
else
lastp = mono_table_info_get_rows (paramt) + 1;
for (i = param_index; i < lastp; i++) {
mono_metadata_decode_row (paramt, i - 1, cols, MONO_PARAM_SIZE);
if (cols [MONO_PARAM_SEQUENCE])
attrs [cols [MONO_PARAM_SEQUENCE] - 1] = cols [MONO_PARAM_FLAGS];
}
}
}
It would be nice to have a function which is able to obtain
these infos at a time, maybe mono_method_get_param_infos ()
returning a MonoParamInfo* (TBD) array.
Robert
More information about the Mono-devel-list
mailing list