[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