[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