[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