* lambda.cs: Simplified little bit.
* parameter.cs: Introduced ImplicitLambdaParameter.
(Parameters.CreateFullyResolved): New factory instead of ctor.
* anonymous.cs,
* class.cs,
* delegate.cs: Updated parameter creation.
svn path=/trunk/mcs/; revision=81268
+2007-07-03 Marek Safar <marek.safar@gmail.com>
+
+ * lambda.cs: Simplified little bit.
+
+ * parameter.cs: Introduced ImplicitLambdaParameter.
+ (Parameters.CreateFullyResolved): New factory instead of ctor.
+
+ * anonymous.cs,
+ * class.cs,
+ * delegate.cs: Updated parameter creation.
+
2007-07-03 Marek Safar <marek.safar@gmail.com>
* ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
inflated_types [i] = it;
inflated_params [i] = new Parameter (it, p.Name, p.ModFlags, p.OptAttributes, p.Location);
}
- return new Parameters (inflated_params, inflated_types);
+ return Parameters.CreateFullyResolved (inflated_params, inflated_types);
}
public TypeExpr InflateType (Type it)
protected virtual void DefineParameters ()
{
- parameters = new Parameters (
- new Parameter[] { new Parameter (method.MemberType, "value", Parameter.Modifier.NONE, null, Location) },
- new Type[] { method.MemberType });
+ parameters = Parameters.CreateFullyResolved (
+ new Parameter (method.MemberType, "value", Parameter.Modifier.NONE, null, Location));
}
public override MethodBuilder Define (DeclSpace parent)
return false;
}
- parameters = new Parameters (
- new Parameter[] { new Parameter (MemberType, "value", Parameter.Modifier.NONE, null, Location) },
- new Type[] { MemberType } );
+ parameters = Parameters.CreateFullyResolved (
+ new Parameter (MemberType, "value", Parameter.Modifier.NONE, null, Location));
if (!CheckBase ())
return false;
end_params [param] = p;
++param;
}
- end_parameters = new Parameters (end_params, end_param_types);
+ end_parameters = Parameters.CreateFullyResolved (end_params, end_param_types);
}
else {
end_parameters = Parameters.EmptyReadOnlyParameters;
bool explicit_parameters;
//
- // The parameter list can either be:
- // null: no parameters
- // arraylist of Parameter (explicitly typed parameters)
- // arraylist of strings (implicitly typed parameters)
+ // The parameters can either be:
+ // A list of Parameters (explicitly typed parameters)
+ // An ImplicitLambdaParameter
//
public LambdaExpression (AnonymousMethodExpression parent,
GenericMethod generic, TypeContainer host,
Location loc)
: base (parent, generic, host, parameters, container, loc)
{
- explicit_parameters = (parameters != null && parameters.Count > 0 && parameters [0].TypeName != null);
- if (parameters == null)
- Parameters = Parameters.EmptyReadOnlyParameters;
- }
-
- public bool HasImplicitParameters {
- get {
- return !explicit_parameters;
- }
+ explicit_parameters = parameters.FixedParameters [0].TypeName != null;
}
public bool HasExplicitParameters {
public override Expression DoResolve (EmitContext ec)
{
- eclass = ExprClass.Value;
- type = TypeManager.anonymous_method_type;
-
- if (explicit_parameters){
+ //
+ // Only explicit parameters can be resolved at this point
+ //
+ if (explicit_parameters) {
if (!Parameters.Resolve (ec))
return null;
}
-
- // We will resolve parameters later, we do not
- // have information at this point.
-
- return this;
- }
- public override void Emit (EmitContext ec)
- {
- base.Emit (ec);
+ eclass = ExprClass.Value;
+ type = TypeManager.anonymous_method_type;
+ return this;
}
public override bool ImplicitStandardConversionExists (Type delegate_type)
}
}
+ public class ImplicitLambdaParameter : Parameter
+ {
+ public ImplicitLambdaParameter (string name, Location loc)
+ : base ((Type)null, name, Modifier.NONE, null, loc)
+ {
+ }
+ }
+
public class ParamsParameter : Parameter {
public ParamsParameter (Expression type, string name, Attributes attrs, Location loc):
base (type, name, Parameter.Modifier.PARAMS, attrs, loc)
base.ApplyAttributeBuilder (a, cb);
}
-
+
public virtual bool CheckAccessibility (InterfaceMemberBase member)
{
if (IsTypeParameter)
types = new Type [0];
}
- public Parameters (Parameter[] parameters, Type[] types)
+ private Parameters (Parameter[] parameters, Type[] types)
{
FixedParameters = parameters;
this.types = types;
{
HasArglist = has_arglist;
}
+
+ public static Parameters CreateFullyResolved (Parameter p)
+ {
+ return new Parameters (new Parameter [] { p }, new Type [] { p.ParameterType });
+ }
+
+ public static Parameters CreateFullyResolved (Parameter[] parameters, Type[] types)
+ {
+ return new Parameters (parameters, types);
+ }
/// <summary>
/// Use this method when you merge compiler generated argument with user arguments