Add cleanup call.
[mono.git] / mcs / mcs / parameter.cs
index ea9b07425262bb4c5e05f46933741fb67a1b6536..d344c3a8dcdc12a8177c0a90a0d77ee8a67ff681 100755 (executable)
@@ -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;
-               }
 
-               // <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){
@@ -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:
@@ -322,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;
@@ -333,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;