{
if (last_arg_is_params && pos >= pi.Length - 1)
return pi [pi.Length - 1].ParameterType;
- else
- return pi [pos].ParameterType;
+ else {
+ Type t = pi [pos].ParameterType;
+
+ if (t.IsByRef)
+ return t.GetElementType ();
+ else
+ return t;
+ }
}
public string ParameterName (int pos)
public Parameter.Modifier ParameterModifier (int pos)
{
int len = pi.Length;
-
+
if (pos >= len - 1)
if (last_arg_is_params)
return Parameter.Modifier.PARAMS;
}
}
- public Type ParameterType (int pos)
+ Parameter GetParameter (int pos)
{
- if (param_types == null)
- return null;
-
Parameter [] fixed_pars = Parameters.FixedParameters;
if (fixed_pars != null){
int len = fixed_pars.Length;
if (pos < len)
- return Parameters.FixedParameters [pos].ParameterType;
- else
- return Parameters.ArrayParameter.ParameterType;
- } else
- return Parameters.ArrayParameter.ParameterType;
+ return Parameters.FixedParameters [pos];
+ }
+
+ return Parameters.ArrayParameter;
}
- public string ParameterName (int pos)
+ public Type ParameterType (int pos)
{
- Parameter p;
+ if (param_types == null)
+ return null;
+
+ return GetParameter (pos).ParameterType;
+ }
- if (pos >= Parameters.FixedParameters.Length)
- p = Parameters.ArrayParameter;
- else
- p = Parameters.FixedParameters [pos];
- return p.Name;
+ public string ParameterName (int pos)
+ {
+ return GetParameter (pos).Name;
}
public string ParameterDesc (int pos)
{
string tmp = String.Empty;
- Parameter p;
-
- if (pos >= Parameters.FixedParameters.Length)
- p = Parameters.ArrayParameter;
- else
- p = Parameters.FixedParameters [pos];
+ Parameter p = GetParameter (pos);
//
// We need to and for REF/OUT, because if either is set the
public Parameter.Modifier ParameterModifier (int pos)
{
- Parameter.Modifier mod;
-
- if (Parameters.FixedParameters == null) {
- if (Parameters.ArrayParameter != null)
- mod = Parameters.ArrayParameter.ModFlags;
- else
- mod = Parameter.Modifier.NONE;
- } else if (pos >= Parameters.FixedParameters.Length)
- mod = Parameters.ArrayParameter.ModFlags;
- else
- mod = Parameters.FixedParameters [pos].ModFlags;
+ Parameter.Modifier mod = GetParameter (pos).ModFlags;
if ((mod & (Parameter.Modifier.REF | Parameter.Modifier.OUT)) != 0)
mod |= Parameter.Modifier.ISBYREF;
Second = s;
}
}
+
}