public bool Resolve (DeclSpace ds, Location l)
{
parameter_type = ds.ResolveType (TypeName, false, l);
- return parameter_type != null;
- }
- // <summary>
- // ResolveAndDefine is used by delegate declarations, because
- // they happen during the initial tree resolution process
- // </summary>
- public bool ResolveAndDefine (DeclSpace ds)
- {
- // FIXME: Should use something else instead of Location.Null
- parameter_type = ds.ResolveType (TypeName, true, Location.Null);
+ if (parameter_type == TypeManager.void_type){
+ Report.Error (1536, l, "`void' parameter is not permitted");
+ return false;
+ }
+
return parameter_type != null;
}
-
+
public Type ExternalType (DeclSpace ds, Location l)
{
if ((ModFlags & Parameter.Modifier.ISBYREF) != 0){
public ParameterAttributes Attributes {
get {
- switch (ModFlags){
+ int flags = ((int) ModFlags) & ~((int) Parameter.Modifier.ISBYREF);
+ switch ((Modifier) flags) {
case Modifier.NONE:
return ParameterAttributes.None;
case Modifier.REF:
/// This is used to reuse a set of empty parameters, because they
/// are common
/// </summary>
- public static Parameters GetEmptyReadOnlyParameters ()
- {
- if (empty_parameters == null)
- empty_parameters = new Parameters (null, null, Location.Null);
+ public static Parameters EmptyReadOnlyParameters {
+ get {
+ if (empty_parameters == null)
+ empty_parameters = new Parameters (null, null, Location.Null);
- return empty_parameters;
+ return empty_parameters;
+ }
}
public bool Empty {
//
}
- static void error100 (string name)
+ static void Error_DuplicateParameterName (string name)
{
Report.Error (
100, "The parameter name `" + name + "' is a duplicate");
for (j = i + 1; j < count; j++){
if (base_name != FixedParameters [j].Name)
continue;
- error100 (base_name);
+ Error_DuplicateParameterName (base_name);
return false;
}
if (base_name == array_par_name){
- error100 (base_name);
+ Error_DuplicateParameterName (base_name);
return false;
}
}
}
}
- if (failed)
- types = null;
-
if (extra > 0){
if (ArrayParameter.Resolve (ds, loc))
types [i] = ArrayParameter.ExternalType (ds, loc);
- else
- return false;
+ else
+ failed = true;
+ }
+
+ if (failed){
+ types = null;
+ return false;
}
return true;
foreach (Parameter p in FixedParameters){
Type t = null;
- if (p.ResolveAndDefine (ds))
+ if (p.Resolve (ds, loc))
t = p.ExternalType (ds, loc);
else
ok_flag = false;
}
if (extra > 0){
- if (ArrayParameter.ResolveAndDefine (ds))
+ if (ArrayParameter.Resolve (ds, loc))
types [i] = ArrayParameter.ExternalType (ds, loc);
else
ok_flag = false;