2002-12-20 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / mcs / support.cs
index e8558d8d574beee950f84ed9526fd1bf00b8a1a8..93ff972d7b60667a42c4d49292b26d687cbbb21a 100755 (executable)
@@ -53,8 +53,14 @@ namespace Mono.CSharp {
                {
                        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)
@@ -87,7 +93,7 @@ namespace Mono.CSharp {
                public Parameter.Modifier ParameterModifier (int pos)
                {
                        int len = pi.Length;
-                       
+
                        if (pos >= len - 1)
                                if (last_arg_is_params)
                                        return Parameter.Modifier.PARAMS;
@@ -136,43 +142,36 @@ namespace Mono.CSharp {
                        }
                }
 
-               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
@@ -192,17 +191,7 @@ namespace Mono.CSharp {
 
                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;
@@ -262,4 +251,5 @@ namespace Mono.CSharp {
                        Second = s;
                }
        }
+
 }