Add support for constructors.
authorMartin Baulig <martin@novell.com>
Wed, 6 Sep 2006 15:31:16 +0000 (15:31 -0000)
committerMartin Baulig <martin@novell.com>
Wed, 6 Sep 2006 15:31:16 +0000 (15:31 -0000)
svn path=/branches/martin/anonymous-methods/gmcs/; revision=65010

mcs/gmcs/class.cs
mcs/gmcs/cs-parser.jay

index 09d627f8fa0156fadb9915dfd4ceb7d54eb3afdc..73bfe34336ed16460b3525f6d146c2e085aa6a67 100644 (file)
@@ -1315,6 +1315,18 @@ namespace Mono.CSharp {
                                }
                        }
 
+                       if (instance_constructors != null) {
+                               foreach (Constructor c in instance_constructors) {
+                                       if (!c.ResolveMembers ())
+                                               return false;
+                               }
+                       }
+
+                       if (default_static_constructor != null) {
+                               if (!default_static_constructor.ResolveMembers ())
+                                       return false;
+                       }
+
                        if (operators != null) {
                                foreach (Operator o in operators) {
                                        if (!o.ResolveMembers ())
@@ -4445,10 +4457,11 @@ namespace Mono.CSharp {
                }
        }
        
-       public class Constructor : MethodCore, IMethodData {
+       public class Constructor : MethodCore, IMethodData, IAnonymousHost {
                public ConstructorBuilder ConstructorBuilder;
                public ConstructorInitializer Initializer;
                ListDictionary declarative_security;
+               ArrayList anonymous_methods;
 
                // <summary>
                //   Modifiers allowed for a constructor.
@@ -4521,6 +4534,28 @@ namespace Mono.CSharp {
                        ConstructorBuilder.SetCustomAttribute (cb);
                }
 
+               public void AddAnonymousMethod (AnonymousMethodExpression anonymous)
+               {
+                       if (anonymous_methods == null)
+                               anonymous_methods = new ArrayList ();
+                       anonymous_methods.Add (anonymous);
+               }
+
+               public bool ResolveMembers ()
+               {
+                       if (!CheckBase ())
+                               return false;
+
+                       if (anonymous_methods != null) {
+                               foreach (AnonymousMethodExpression ame in anonymous_methods) {
+                                       if (!ame.CreateAnonymousHelpers ())
+                                               return false;
+                               }
+                       }
+
+                       return true;
+               }
+
                protected override bool CheckForDuplications ()
                {
                        ArrayList ar = ParentContainer.InstanceConstructors;
index 00326eb75c50d86247abb5180cf1e1fde8c4d0cf..e149e91dfe2d99cd96134b989de56bcab67f7d07 100644 (file)
@@ -2197,6 +2197,8 @@ constructor_declarator
                LocatedToken lt = (LocatedToken) $1;
                $$ = new Constructor (current_class, lt.Value, 0, (Parameters) $4,
                                      (ConstructorInitializer) $7, lt.Location);
+
+               anonymous_host = (IAnonymousHost) $$;
          }
        ;