Add nested partial types inside nested partial types to AST. Fixes #13316
authorMarek Safar <marek.safar@gmail.com>
Thu, 18 Jul 2013 12:42:12 +0000 (14:42 +0200)
committerMarek Safar <marek.safar@gmail.com>
Thu, 18 Jul 2013 12:42:12 +0000 (14:42 +0200)
mcs/mcs/class.cs
mcs/mcs/module.cs
mcs/mcs/namespace.cs

index 7fea8af603af0d83359d481a910daa09bb41e697..fe91d81f86f00bd1753854f99b9a2cf2cc57c91b 100644 (file)
@@ -98,9 +98,9 @@ namespace Mono.CSharp
                        get; set;
                }
 
-               public virtual void AddCompilerGeneratedClass (CompilerGeneratedContainer c)
+               public void AddCompilerGeneratedClass (CompilerGeneratedContainer c)
                {
-                       containers.Add (c);
+                       AddTypeContainerMember (c);
                }
 
                public virtual void AddPartial (TypeDefinition next_part)
@@ -187,15 +187,12 @@ namespace Mono.CSharp
 
                        next_part.PartialContainer = existing;
 
-                       if (containers == null)
-                               containers = new List<TypeContainer> ();
-
-                       containers.Add (next_part);
+                       AddTypeContainerMember (next_part);
                }
 
                public virtual void AddTypeContainer (TypeContainer tc)
                {
-                       containers.Add (tc);
+                       AddTypeContainerMember (tc);
 
                        var tparams = tc.MemberName.TypeParameters;
                        if (tparams != null && tc.PartialContainer != null) {
@@ -210,6 +207,11 @@ namespace Mono.CSharp
                        }
                }
 
+               protected virtual void AddTypeContainerMember (TypeContainer tc)
+               {
+                       containers.Add (tc);
+               }
+
                public virtual void CloseContainer ()
                {
                        if (containers != null) {
@@ -749,21 +751,17 @@ namespace Mono.CSharp
                {
                        AddNameToContainer (tc, tc.Basename);
 
-                       if (containers == null)
-                               containers = new List<TypeContainer> ();
-
-                       members.Add (tc);
                        base.AddTypeContainer (tc);
                }
 
-               public override void AddCompilerGeneratedClass (CompilerGeneratedContainer c)
+               protected override void AddTypeContainerMember (TypeContainer tc)
                {
-                       members.Add (c);
+                       members.Add (tc);
 
                        if (containers == null)
                                containers = new List<TypeContainer> ();
 
-                       base.AddCompilerGeneratedClass (c);
+                       base.AddTypeContainerMember (tc);
                }
 
                //
@@ -2093,8 +2091,13 @@ namespace Mono.CSharp
 
                        base.Emit ();
 
-                       for (int i = 0; i < members.Count; i++)
-                               members[i].Emit ();
+                       for (int i = 0; i < members.Count; i++) {
+                               var m = members[i];
+                               if ((m.caching_flags & Flags.CloseTypeCreated) != 0)
+                                       continue;
+
+                               m.Emit ();
+                       }
 
                        EmitIndexerName ();
                        CheckAttributeClsCompliance ();
index 4eeb37d59fa723b135ab002a8072ca581a640446..ceb73afc743f3fade798f311f549721e88ef43fe 100644 (file)
@@ -314,7 +314,7 @@ namespace Mono.CSharp
 
                public override void AddTypeContainer (TypeContainer tc)
                {
-                       containers.Add (tc);
+                       AddTypeContainerMember (tc);
                }
 
                public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa)
index 997422b8b1c1460597888019edefedb6cc5ffc15..38fbac1684ed0ffcf992f653c8f8a6e61e88c15f 100644 (file)
@@ -892,7 +892,7 @@ namespace Mono.CSharp {
                        MemberCore mc;
                        if (names_container.DefinedNames.TryGetValue (name, out mc)) {
                                if (tc is NamespaceContainer && mc is NamespaceContainer) {
-                                       containers.Add (tc);
+                                       AddTypeContainerMember (tc);
                                        return;
                                }