[svn] r6270: nemerle/trunk/ncc: hierarchy/TypeBuilder.n
testsuite/negative/void-parm2.n testsuite/positive...
malekith
svnadmin at nemerle.org
Sun May 14 15:08:21 CEST 2006
Log:
Immediatly save error after void is unified with S.Object. Accomodate for that change elsewhere. Resolves #674.
Author: malekith
Date: Sun May 14 15:08:20 2006
New Revision: 6270
Modified:
nemerle/trunk/ncc/hierarchy/TypeBuilder.n
nemerle/trunk/ncc/testsuite/negative/void-parm2.n
nemerle/trunk/ncc/testsuite/positive/delegate.n
nemerle/trunk/ncc/typing/MType.n
nemerle/trunk/ncc/typing/Subst.n
nemerle/trunk/ncc/typing/TyVar.n
nemerle/trunk/ncc/typing/Typer-CallTyper.n
nemerle/trunk/ncc/typing/Typer.n
Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n (original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n Sun May 14 15:08:20 2006
@@ -881,11 +881,10 @@
when (check_parms)
List.Iter2 (typarms, args, fun (tp : StaticTyVar, val : TyVar) {
- unless (val.Require (res.Apply (tp.LowerBound))) {
- if (val.Fix () is MType.Void)
+ when (val.Equals (InternalType.Void))
ReportError (messenger,
$ "cannot use `void' as a generic parameter of $tc");
- else
+ unless (val.Require (res.Apply (tp.LowerBound))) {
ReportError (messenger,
$ "typing constraint on $(tp.Name) not satisfied, "
"upon instantiation of $tc");
Modified: nemerle/trunk/ncc/testsuite/negative/void-parm2.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/negative/void-parm2.n (original)
+++ nemerle/trunk/ncc/testsuite/negative/void-parm2.n Sun May 14 15:08:20 2006
@@ -1,7 +1,7 @@
module M {
public Main () : void // OK
{
- [()].Iter ( // E: cannot use `void' as a generic parameter of Nemerle.Core.list
+ [()].Iter ( // E: void is not a subtype of System.Object
fun (_) {
}
);
@@ -10,7 +10,9 @@
def f (_)
{}
- [1,2].Map (f).ToString (" ") // E: cannot use `void' as a generic parameter of Nemerle.Core.list
+ [1,2].Map (f).ToString (" "); // E: cannot use `void' as a generic parameter of Nemerle.Core.list
+ mutable q = 7;
+ System.Console.WriteLine ("{0}", q++); // E: void is not a subtype of System.Object
}
}
Modified: nemerle/trunk/ncc/testsuite/positive/delegate.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/delegate.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/delegate.n Sun May 14 15:08:20 2006
@@ -1,3 +1,4 @@
+using System;
using Nemerle.IO;
delegate Foo () : void;
@@ -21,7 +22,6 @@
// Test for covariance support in delegates
//
-using System;
public class A {
protected mutable name : string;
@@ -165,6 +165,25 @@
public delegate GenDel[X] (x : X) : int;
+namespace Bug674 {
+delegate fn[T] () : T;
+delegate fn[R,T] (_:R) : T;
+delegate fn[R,S,T] (_:R,_:S) : T;
+
+module X {
+ public wh[T](_predicate : fn[T, int, bool]) : void
+ { }
+ public wh[T](_predicate : fn[T, bool]) : void
+ { }
+
+ public foobar () : void
+ {
+ X.wh (x => x % 2 == 0);
+ }
+}
+}
+
+
public module M {
public delegate MyPrintDelegate (s : string) : void;
Modified: nemerle/trunk/ncc/typing/MType.n
==============================================================================
--- nemerle/trunk/ncc/typing/MType.n (original)
+++ nemerle/trunk/ncc/typing/MType.n Sun May 14 15:08:20 2006
@@ -252,7 +252,10 @@
def s = Passes.Solver;
match ((this, t)) {
- | (Void, Class) => false
+ | (Void, Class) =>
+ SaveError (s.CurrentMessenger,
+ $ "$(this) is not a subtype of $t");
+ false
| (_, Class (tc, _))
when tc.Equals (InternalType.Object_tc) => true
@@ -308,7 +311,10 @@
| (Array, Class (_, []) as ct) =>
InternalType.Array.Require (ct)
- | (Array, _) => false
+ | (Array, _) =>
+ SaveError (s.CurrentMessenger,
+ $ "$(this) is not a subtype of $t");
+ false
| (TyVarRef (tv1), TyVarRef (tv2))
when tv1.Equals (tv2) => true
Modified: nemerle/trunk/ncc/typing/Subst.n
==============================================================================
--- nemerle/trunk/ncc/typing/Subst.n (original)
+++ nemerle/trunk/ncc/typing/Subst.n Sun May 14 15:08:20 2006
@@ -206,8 +206,10 @@
});
List.Iter2 (vars, vars', fun (v : StaticTyVar, tv : TyVar) {
+ when (!v.LowerBound.Equals (InternalType.Object)) {
def ok = tv.Require (res.Apply (v.LowerBound));
Util.cassert (was_error || ok, $ "req fail, $tv $(res.Apply (v.LowerBound))");
+ }
});
(res, vars')
}
Modified: nemerle/trunk/ncc/typing/TyVar.n
==============================================================================
--- nemerle/trunk/ncc/typing/TyVar.n (original)
+++ nemerle/trunk/ncc/typing/TyVar.n Sun May 14 15:08:20 2006
@@ -34,7 +34,7 @@
using Nemerle.Compiler.SolverMacros;
-//#define VERB
+// #define VERB
#if VERB
[assembly: LogFlag (SOLVER, true)]
@@ -695,7 +695,7 @@
WillWrite ();
assert (Self : object == this);
- log (SOLVER, $ "Alias: $(this) ---> $tv");
+ log (SOLVER, $ "Alias: $(this) ---> $tv, fresh=$(IsFresh)");
if (tv.Self : object != this) {
if (IsFromNull && !tv.CanBeNull) {
@@ -865,7 +865,7 @@
else {
high.WillWrite ();
whenlogging (SOLVER) {
- def tv = if (high.lower_bound == null) "(null)" else high.lower_bound.ToString ();
+ //def tv = if (high.lower_bound == null) "(null)" else high.lower_bound.ToString ();
//Message.Debug ($"new bound $tv * $low = $new_bound");
}
when (high.lower_bound == null ||
Modified: nemerle/trunk/ncc/typing/Typer-CallTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-CallTyper.n (original)
+++ nemerle/trunk/ncc/typing/Typer-CallTyper.n Sun May 14 15:08:20 2006
@@ -283,8 +283,7 @@
"$(fparm.kind) parameter, got $(aparm.kind)")
| x =>
- Message.Warning ("oops");
- assert (false, x.ToString ())
+ Util.ice (x.ToString ())
}
loop (header.parms, formals_types, call_parms)
@@ -331,7 +330,7 @@
else
LoopWithHeader ();
- log (TYPING, $"end parm loop $imethod, res=$result_type");
+ log (TYPING, $"end parm loop $imethod, res=$result_type localerr=$(messenger.LocalError)");
unless (messenger.LocalError) {
_ = typer.Expect (expected_type, result_type, "call result");
Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n (original)
+++ nemerle/trunk/ncc/typing/Typer.n Sun May 14 15:08:20 2006
@@ -893,6 +893,7 @@
else null;
if (del_tc != null) {
+ log (TYPING, $ "delegate conversion, $(expr.Type) ---> $del_tc");
def name = Util.ExprOfQid (del_tc.FullName);
def expr = TryTyping (fun () {
TypeExpr (<[ $name ($(expr : typed)) ]>)
@@ -904,6 +905,7 @@
expr
}
} else if (SubtypingOrImplicitConv (expr.Type, target, out meth)) {
+ log (TYPING, $ "got subtyping, $(expr.Type) ---> $target, meth=$meth");
if (meth == null)
expr
else
@@ -924,6 +926,7 @@
} else if (target.Hint is Some (Fun) &&
expr.Type.Hint is Some (Fun) &&
expr.Type.Fix ().TrySigRequire (target.Fix ())) {
+ log (TYPING, $ "function subtyping, $(expr.Type) ---> $target, meth=$meth");
def target = target.Fix ();
_ = expr.Type.FixedValue.SigRequire (target);
def srctypes = Option.UnSome (target.FunReturnTypeAndParms ()) [0];
More information about the svn
mailing list