[svn] r6027: nemerle/trunk: macros/DesignPatterns.n ncc/typing/MType.n snippets/designpatt/proxy-p.n tools...

nazgul svnadmin at nemerle.org
Mon Dec 19 23:04:08 CET 2005


Log:
Support generic classes in DesignPatterns.ProxyPublicMembers macro

Author: nazgul
Date: Mon Dec 19 23:03:58 2005
New Revision: 6027

Modified:
   nemerle/trunk/macros/DesignPatterns.n
   nemerle/trunk/ncc/typing/MType.n
   nemerle/trunk/snippets/designpatt/proxy-p.n
   nemerle/trunk/tools/cs2n/passing/Makefile

Modified: nemerle/trunk/macros/DesignPatterns.n
==============================================================================
--- nemerle/trunk/macros/DesignPatterns.n	(original)
+++ nemerle/trunk/macros/DesignPatterns.n	Mon Dec 19 23:03:58 2005
@@ -51,7 +51,8 @@
       
           // prepare method invocation parameters
           def parms = meth.GetParameters ().Map(fun (p) {
-            <[ $(t.ParsedName.NewName (p.name) : name) : $(p.ty : typed) ]>
+            <[ $(t.ParsedName.NewName (p.name) : name) :
+               $(f.GetMemType().ConvertTypeFromTypeInfo (p.ty.Fix(), classty) : typed) ]>
           });
           // prepare created method function parameters
           def fparms = parms.Map (Parsetree.Fun_parm);
@@ -59,14 +60,16 @@
 
           // define the wrapper method
           t.Define (<[ decl:
-            public virtual $(member_name : name) (..$fparms) : $(meth.ReturnType : typed) {
+            public virtual $(member_name : name) (..$fparms)
+            : $(f.GetMemType().ConvertTypeFromTypeInfo (meth.ReturnType.Fix(), classty) : typed)
+            {
               this.$(f.Name : dyn).$(member_name : name) (..$parms)
             }
           ]>)
 
         | prop is IProperty when prop.GetGetter() != null && !prop.IsIndexer =>
           t.Define (<[ decl:
-            public virtual $(member_name : name) : $(prop.GetMemType() : typed) {
+            public virtual $(member_name : name) : $(f.GetMemType().TypeOfMember (prop) : typed) {
               get { 
                 this.$(f.Name : dyn).$(member_name : name)
               }

Modified: nemerle/trunk/ncc/typing/MType.n
==============================================================================
--- nemerle/trunk/ncc/typing/MType.n	(original)
+++ nemerle/trunk/ncc/typing/MType.n	Mon Dec 19 23:03:58 2005
@@ -679,6 +679,19 @@
     }
     
 
+    public ConvertTypeFromTypeInfo (ty : MType, from : TypeInfo) : TyVar
+    {
+      match (this) {
+        | Class (ti, args) =>
+          def s1 = ti.SubtypingSubst (from);
+          def s2 = ti.MakeSubst (args);
+          s2.Apply (s1.Apply (ty).Fix ())
+
+        | _ =>
+          Util.ice ($"unsupported type: $this");
+      }
+    }
+      
     public TypeOfMethodWithTyparms (method : IMethod) : TyVar * list [TyVar]
     {
       match (this) {

Modified: nemerle/trunk/snippets/designpatt/proxy-p.n
==============================================================================
--- nemerle/trunk/snippets/designpatt/proxy-p.n	(original)
+++ nemerle/trunk/snippets/designpatt/proxy-p.n	Mon Dec 19 23:03:58 2005
@@ -50,7 +50,7 @@
   }
 }
 
-variant Bubba {
+variant Bubba ['a] {
   | Foo { x : string; }
   | Goo
 
@@ -59,12 +59,13 @@
   }
   public Fire (_x : int) : void {
   }
+  public Gene (x : 'a) : 'a { x }
 }
 
 [Record]
-class BubbaExtend {
+class BubbaExtend ['a] {
   [Nemerle.DesignPatterns.ProxyPublicMembers ()]
-  my_bubba : Bubba;
+  my_bubba : Bubba ['a];
 }
 
 /// <summary>
@@ -87,6 +88,7 @@
     def x = BubbaExtend (Bubba.Foo("a"));
     _ = x.Length;
     _ = x.Fire (1);
+    _ = x.Gene (1);
   }
 }
 

Modified: nemerle/trunk/tools/cs2n/passing/Makefile
==============================================================================
--- nemerle/trunk/tools/cs2n/passing/Makefile	(original)
+++ nemerle/trunk/tools/cs2n/passing/Makefile	Mon Dec 19 23:03:58 2005
@@ -34,7 +34,7 @@
 ############################################################
 
 all:
-	@$(MAKE) TEST_FILES=$(THISDIR)/*.n ADDITIONAL_FLAGS=-nowarn:10003,10001 -C ../../../ncc/testsuite test
+	@$(MAKE) TEST_FILES=$(THISDIR)/*.n ADDITIONAL_FLAGS=-nowarn:10001,10003,649 -C ../../../ncc/testsuite test
 
 clean:
 	rm -f *.exe *.il *.dll *.netmodule ext_test.out core core.[0-9]* *xml



More information about the svn mailing list