[svn] r5995: nemerle/trunk/ncc: generation/ILEmitter.n testsuite/positive/generics.n

malekith svnadmin at nemerle.org
Mon Dec 5 22:58:07 CET 2005


Log:
Pass correct type (this or base) to this()/base() invocations. Resolves #583.

Author: malekith
Date: Mon Dec  5 22:58:05 2005
New Revision: 5995

Modified:
   nemerle/trunk/ncc/generation/ILEmitter.n
   nemerle/trunk/ncc/testsuite/positive/generics.n

Modified: nemerle/trunk/ncc/generation/ILEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/ILEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/ILEmitter.n	Mon Dec  5 22:58:05 2005
@@ -950,7 +950,12 @@
           emit_parms (ctor_params);
           Mark (expr.loc);
 
-          def ctr_inf = GetConstructorInfo (_type_of_this.BaseType, base_ctor);
+          def from =
+            if (base_ctor.DeclaringType.Equals (_parent_type_builder))
+              _type_of_this
+            else _type_of_this.BaseType;
+
+          def ctr_inf = GetConstructorInfo (from, base_ctor);
           _ilg.Emit (OpCodes.Call, ctr_inf);
 
         /* create a new object */

Modified: nemerle/trunk/ncc/testsuite/positive/generics.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/generics.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/generics.n	Mon Dec  5 22:58:05 2005
@@ -155,6 +155,29 @@
     }
 }
 
+namespace Bug583 {
+    class Blobby: System.Collections.ObjectModel.KeyedCollection[System.Object, System.Object]
+    {
+        public
+        this()
+        {
+            base()
+        }
+        
+        private
+        this(_x: System.Int32)
+        {
+            this()
+        }
+        
+        protected override
+        GetKeyForItem(item: System.Object): System.Object
+        {
+            item
+        }
+    } 
+}
+
 /*
 BEGIN-OUTPUT
 System.Collections.Generic.List`1[System.Int32]



More information about the svn mailing list