[svn] r7742: nemerle/trunk/ncc/typing: Typer-DelayedTyping.n Typer.n
divan
svnadmin at nemerle.org
Fri Jul 6 21:50:32 CEST 2007
Log:
Work on delayed operators.
Author: divan
Date: Fri Jul 6 21:50:25 2007
New Revision: 7742
Modified:
nemerle/trunk/ncc/typing/Typer-DelayedTyping.n
nemerle/trunk/ncc/typing/Typer.n
Modified: nemerle/trunk/ncc/typing/Typer-DelayedTyping.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-DelayedTyping.n (original)
+++ nemerle/trunk/ncc/typing/Typer-DelayedTyping.n Fri Jul 6 21:50:25 2007
@@ -619,8 +619,9 @@
Some (res)
| Some (MType.Fun (from, to)) =>
-
+ // Ugly thing, class representing function depends on parameters voidness
match (from.AnyHint) {
+ | None when typer.BadnessAllowed > 2 with args = [MType.Void ()] //seem to work somehow
| Some (MType.Tuple (args))
| Some (MType.Void) with args = []
| Some (x) with args = [x] =>
@@ -630,6 +631,7 @@
match (to.AnyHint) {
| Some (MType.Void) =>
MType.Class (inst.VoidTyCon, args)
+ | None when typer.BadnessAllowed > 2 //seem to work somehow
| Some =>
MType.Class (inst.TyCon, (args + [to]))
| None =>
@@ -729,8 +731,7 @@
if (typer.Expect (expected, expr.func.Type,
"overloaded function call"))
match (overloads) {
- | [one] when hints == 0
- || typer.BadnessAllowed > 1 =>
+ | [one] when hints == 0 && typer.BadnessAllowed < 1 =>
[one] //don't call ResolveOverload early, as it can add wrong hints
| _ => ResolveOverload (overloads, expr.parms, expr.Type)
}
@@ -743,6 +744,8 @@
| [one] when hints == args
|| hints > 0 && typer.BadnessAllowed > 0
|| typer.BadnessAllowed > 1 =>
+ when (expr != null) //ResolveOverload maybe wasn't called, but it should be to set stuff in expr
+ _ = ResolveOverload (overloads, expr.parms, expr.Type);
SetKind (Kind.Resolved (one.Compile ()))
| lst =>
@@ -761,6 +764,7 @@
res = lst + res;
when (LookupOperator (t2, name) is Some (lst))
res = lst + res;
+ res = OverloadPossibility.Unique (res);
res
}
SetKind (Kind.OverloadedOperator (operators, t1, t2, name, env, operators));
Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n (original)
+++ nemerle/trunk/ncc/typing/Typer.n Fri Jul 6 21:50:25 2007
@@ -386,7 +386,7 @@
}
});
- def max_badness = 2;
+ def max_badness = 3;
if (did_something)
RunDelayedTypings ();
More information about the svn
mailing list