[svn] r5792: nemerle/trunk/ncc: generation/Typer4.n testsuite/positive/valuetype-conv.n

malekith svnadmin at nemerle.org
Sun Oct 2 21:19:24 CEST 2005


Log:
Generate proper code, when void-type parameter is passed. Resolves #540.

Author: malekith
Date: Sun Oct  2 21:19:23 2005
New Revision: 5792

Modified:
   nemerle/trunk/ncc/generation/Typer4.n
   nemerle/trunk/ncc/testsuite/positive/valuetype-conv.n

Modified: nemerle/trunk/ncc/generation/Typer4.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer4.n	(original)
+++ nemerle/trunk/ncc/generation/Typer4.n	Sun Oct  2 21:19:23 2005
@@ -552,6 +552,14 @@
                       def t = f.Fix ();
                       parm.expr = Walk (parm.expr);
                       if (parm.kind == ParmKind.Normal) {
+                        if (parm.expr.MType is MType.Void)
+                          parm.expr =
+                            TExpr.Sequence (
+                              InternalType.Object,
+                              parm.expr,
+                              TExpr.Literal (InternalType.Object,
+                                             Literal.Null ()))
+                        else
                         when (NeedBoxing (t, parm.expr))
                           parm.expr = Box (t, parm.expr);
                       } else {

Modified: nemerle/trunk/ncc/testsuite/positive/valuetype-conv.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/valuetype-conv.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/valuetype-conv.n	Sun Oct  2 21:19:23 2005
@@ -1,4 +1,5 @@
 using System.Globalization;
+using System.Console;
 
 [Record]
 struct A {
@@ -23,6 +24,19 @@
     foo (array [1, 2, 3]); 
     foo (array [1 : object, 2, 3]); 
     foo (array [A(1.0), A(2.3)]); 
+
+    def f['a] (_ : 'a) : void
+    {
+      Write ($ "f [$(typeof ('a))] called\n");
+    }
+
+    def g () {
+      Write ($ "g called\n");
+      
+    }
+
+    f ( () );
+    f (g ());
   }
 }
 
@@ -38,5 +52,8 @@
 3
 1
 2.3
+f [System.Object] called
+g called
+f [System.Object] called
 END-OUTPUT
 */



More information about the svn mailing list