get { return types; }
set { types = value; }
}
+
+#if MS_COMPATIBLE
+ public AParametersCollection InflateTypes (Type[] genArguments, Type[] argTypes)
+ {
+ AParametersCollection p = (AParametersCollection) MemberwiseClone (); // Clone ();
+
+ for (int i = 0; i < Count; ++i) {
+ if (types[i].IsGenericType) {
+ Type[] gen_arguments_open = new Type[types[i].GetGenericTypeDefinition ().GetGenericArguments ().Length];
+ Type[] gen_arguments = types[i].GetGenericArguments ();
+ for (int ii = 0; ii < gen_arguments_open.Length; ++ii) {
+ if (gen_arguments[ii].IsGenericParameter) {
+ Type t = argTypes[gen_arguments[ii].GenericParameterPosition];
+ gen_arguments_open[ii] = t;
+ } else
+ gen_arguments_open[ii] = gen_arguments[ii];
+ }
+
+ p.types[i] = types[i].GetGenericTypeDefinition ().MakeGenericType (gen_arguments_open);
+ continue;
+ }
+
+ if (types[i].IsGenericParameter) {
+ Type gen_argument = argTypes[types[i].GenericParameterPosition];
+ p.types[i] = gen_argument;
+ continue;
+ }
+ }
+
+ return p;
+ }
+#endif
}
//
if (base_name != parameters [j].Name)
continue;
- Report.Error (100, parameters [i].Location,
- "The parameter name `{0}' is a duplicate", base_name);
+ ErrorDuplicateName (parameters [i]);
i = j;
}
}
return parameters;
}
- /// <summary>
- /// Returns the paramenter information based on the name
- /// </summary>
- public Parameter GetParameterByName (string name, out int idx)
+ protected virtual void ErrorDuplicateName (Parameter p)
{
- idx = 0;
-
- if (Count == 0)
- return null;
-
- int i = 0;
-
- foreach (Parameter par in FixedParameters){
- if (par.Name == name){
- idx = i;
- return par;
- }
- i++;
- }
- return null;
+ Report.Error (100, p.Location, "The parameter name `{0}' is a duplicate", p.Name);
}
- public Parameter GetParameterByName (string name)
+ /// <summary>
+ /// Returns the parameter information based on the name
+ /// </summary>
+ public int GetParameterIndexByName (string name)
{
- int idx;
+ for (int idx = 0; idx < Count; ++idx) {
+ if (parameters [idx].Name == name)
+ return idx;
+ }
- return GetParameterByName (name, out idx);
+ return -1;
}
-
+
public bool Resolve (IResolveContext ec)
{
if (types != null)
}
}
-#if MS_COMPATIBLE
- public AParametersCollection InflateTypes (Type[] genArguments, Type[] argTypes)
- {
- Parameters p = Clone ();
- for (int i = 0; i < Count; ++i) {
- if (types[i].IsGenericType) {
- Type[] gen_arguments_open = new Type [types[i].GetGenericTypeDefinition ().GetGenericArguments ().Length];
- Type[] gen_arguments = types[i].GetGenericArguments ();
- for (int ii = 0; ii < gen_arguments_open.Length; ++ii) {
- if (gen_arguments[ii].IsGenericParameter) {
- Type t = argTypes[gen_arguments[ii].GenericParameterPosition];
- gen_arguments_open[ii] = t;
- } else
- gen_arguments_open[ii] = gen_arguments[ii];
- }
-
- p.types[i] = types[i].GetGenericTypeDefinition ().MakeGenericType (gen_arguments_open);
- continue;
- }
-
- if (types[i].IsGenericParameter) {
- Type gen_argument = argTypes[types[i].GenericParameterPosition];
- p.types[i] = gen_argument;
- continue;
- }
- }
-
- return p;
- }
-#endif
-
public void VerifyClsCompliance ()
{
foreach (Parameter p in FixedParameters)
public Parameters Clone ()
{
- Parameter [] parameters_copy = new Parameter [FixedParameters.Length];
- int i = 0;
- foreach (Parameter p in FixedParameters)
- parameters_copy [i++] = p.Clone ();
- Parameters ps = new Parameters (parameters_copy, HasArglist);
- if (types != null)
- ps.types = (Type[])types.Clone ();
- return ps;
+ Parameters p = (Parameters) MemberwiseClone ();
+
+ p.parameters = new IParameterData [parameters.Length];
+ for (int i = 0; i < Count; ++i)
+ p.parameters [i] = this [i].Clone ();
+
+ return p;
}
}
}