X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fparameter.cs;h=d344c3a8dcdc12a8177c0a90a0d77ee8a67ff681;hb=5f0dc4802f69745ced8f32b39bd770f7bd134b8f;hp=d72fb2f274cb5725273c10b05dacd8399146555c;hpb=8e4f5881fe806d47d938391b49b0a9c30de2815b;p=mono.git diff --git a/mcs/mcs/parameter.cs b/mcs/mcs/parameter.cs index d72fb2f274c..d344c3a8dcd 100755 --- a/mcs/mcs/parameter.cs +++ b/mcs/mcs/parameter.cs @@ -51,20 +51,15 @@ namespace Mono.CSharp { public bool Resolve (DeclSpace ds, Location l) { parameter_type = ds.ResolveType (TypeName, false, l); - return parameter_type != null; - } - // - // ResolveAndDefine is used by delegate declarations, because - // they happen during the initial tree resolution process - // - 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){ @@ -86,7 +81,8 @@ namespace Mono.CSharp { 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: @@ -139,12 +135,13 @@ namespace Mono.CSharp { /// This is used to reuse a set of empty parameters, because they /// are common /// - 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 { @@ -169,7 +166,7 @@ namespace Mono.CSharp { // } - static void error100 (string name) + static void Error_DuplicateParameterName (string name) { Report.Error ( 100, "The parameter name `" + name + "' is a duplicate"); @@ -191,12 +188,12 @@ namespace Mono.CSharp { 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; } } @@ -278,14 +275,16 @@ namespace Mono.CSharp { } } - 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; @@ -319,7 +318,7 @@ namespace Mono.CSharp { 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; @@ -330,7 +329,7 @@ namespace Mono.CSharp { } if (extra > 0){ - if (ArrayParameter.ResolveAndDefine (ds)) + if (ArrayParameter.Resolve (ds, loc)) types [i] = ArrayParameter.ExternalType (ds, loc); else ok_flag = false;