[svn] r7710: nemerle/trunk/ncc: generation/Typer4.n testsuite/negative/void-parm3.n

divan svnadmin at nemerle.org
Sun Jun 17 23:54:15 CEST 2007


Log:
Add void in tuples check (fix 863, 925).

Author: divan
Date: Sun Jun 17 23:54:13 2007
New Revision: 7710

Modified:
   nemerle/trunk/ncc/generation/Typer4.n
   nemerle/trunk/ncc/testsuite/negative/void-parm3.n

Modified: nemerle/trunk/ncc/generation/Typer4.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer4.n	(original)
+++ nemerle/trunk/ncc/generation/Typer4.n	Sun Jun 17 23:54:13 2007
@@ -211,6 +211,7 @@
     NoDeepVoid (expr : TExpr, t : TyVar) : void
     {
       match (t.Fix ()) {
+        | Tuple (tp)
         | Class (_, tp) =>
           foreach (t in tp)
             when (t.Fix ().Equals (InternalType.Void))
@@ -504,6 +505,8 @@
     DoWalk (expr : TExpr) : TExpr
     {
       // Message.Debug ($ "dowalk: $(expr.GetType()) $(expr.Type)");
+      when (expr.ty != null)
+        NoDeepVoid (expr, expr.ty);
       def res =
         match (expr) {
           | FieldMember (obj, fld) when ! expr.IsAssigned =>
@@ -566,7 +569,6 @@
               TExpr.DefValIn (decl, e1, e2)
             
           | Call (ImplicitValueTypeCtor, [], _) =>
-            NoDeepVoid (expr, expr.Type);
             null
           
           | Call (OpCode ("==.ref"), [p1, p2], _)
@@ -676,7 +678,7 @@
                 else parm;
               res = parm :: res;
             }
-            TExpr.Array (res.Rev (), dimensions)
+            TExpr.Array (res.Rev (), dimensions.Map (Walk))
 
           | TryFinally (body, handler) =>
             TExpr.TryFinally (WalkTry (body), Walk (handler))

Modified: nemerle/trunk/ncc/testsuite/negative/void-parm3.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/negative/void-parm3.n	(original)
+++ nemerle/trunk/ncc/testsuite/negative/void-parm3.n	Sun Jun 17 23:54:13 2007
@@ -24,4 +24,22 @@
     Pipe (d2i, print); //E: cannot use `void' in generic specifier 
   }
 }
-()
+
+module Program
+{
+  Main() : void
+  {
+    System.Console.WriteLine(Foo((1,2)));
+    _ = System.Console.ReadKey()
+  }
+
+  Foo(x : object) : string { //E:
+   | x is _ * int => //E: cannot use `void' in generic specifier 
+        mutable a = x[0];   //E: cannot use `void' in generic specifier 
+        a = ();
+        "_"
+   | _ => "Other"
+ }
+}
+
+_ = (1, ()); //E: cannot use `void' in generic specifier 



More information about the svn mailing list