[svn] r7111: nemerle/trunk/ncc/typing: Messenger.n TyVar.n

malekith svnadmin at nemerle.org
Sun Dec 17 16:49:47 CET 2006


Log:
Improve error messages a bit. Resolves #811.

Author: malekith
Date: Sun Dec 17 16:49:46 2006
New Revision: 7111

Modified:
   nemerle/trunk/ncc/typing/Messenger.n
   nemerle/trunk/ncc/typing/TyVar.n

Modified: nemerle/trunk/ncc/typing/Messenger.n
==============================================================================
--- nemerle/trunk/ncc/typing/Messenger.n	(original)
+++ nemerle/trunk/ncc/typing/Messenger.n	Sun Dec 17 16:49:46 2006
@@ -41,7 +41,7 @@
     mutable previous : Messenger;
     mutable in_error_mode : bool;
     mutable saved_error : string;
-    mutable local_error : bool;
+    mutable local_error : int;
     
 
     CopyFrom (other : Messenger) : void
@@ -68,7 +68,7 @@
       saved_error = null;
       need_message = false;
       throw_on_error = false;
-      local_error = false;
+      local_error = 0;
     }
 
 
@@ -91,7 +91,7 @@
       assert (NeedMessage);
 
       seen_error = true;
-      local_error = true;
+      local_error++;
 
       when (first_error == null)
         first_error = msg;
@@ -117,7 +117,7 @@
 
     public CleanLocalError () : void
     {
-      local_error = false;
+      local_error = 0;
       when (saved_error != null) {
         Message.Error ($ "during cleanup: $saved_error");
         saved_error = null;
@@ -133,7 +133,7 @@
       when (!in_error_mode)
         throw RestartInErrorMode ();
         
-      local_error = true;
+      local_error++;
       seen_error = true;
       saved_error = msg;
     }
@@ -157,7 +157,7 @@
       when (previous == null && !in_error_mode)
         throw RestartInErrorMode ();
       
-      local_error = true;
+      local_error++;
       seen_error = true;
     }
     
@@ -197,6 +197,12 @@
 
     public LocalError : bool
     {
+      get { local_error != 0 }
+    }
+
+
+    public LocalErrorCount : int
+    {
       get { local_error }
     }
     #endregion

Modified: nemerle/trunk/ncc/typing/TyVar.n
==============================================================================
--- nemerle/trunk/ncc/typing/TyVar.n	(original)
+++ nemerle/trunk/ncc/typing/TyVar.n	Sun Dec 17 16:49:46 2006
@@ -190,6 +190,7 @@
       else if (IsFresh) {
         Alias (t)
       } else {
+        def prev = LocalErrorCount;
         assert (IsFree);
         when (Alias (t)) {
           when (lower_bound != null)
@@ -202,7 +203,7 @@
           SetUpperBound (t);
         }
 
-        !LocalError
+        prev == LocalErrorCount
       }
     }
 
@@ -610,6 +611,8 @@
       if (low : object == high : object || high.IsIn (low.upper_tyvars))
         true
       else {
+        def prev = LocalErrorCount;
+
         low.WillWrite ();
         high.WillWrite ();
         
@@ -692,7 +695,7 @@
             _ = low.Provide (high.upper_bound);
         }
 
-        !LocalError
+        prev == LocalErrorCount
       }
     }
 
@@ -850,6 +853,8 @@
                    $ "the `null' literal is not a valid value of type $low");
         false
       } else {
+        def prev = LocalErrorCount;
+
         if (rev) {
           def new_bound = Manager.Solver.Sum (high.upper_bound, low);
           log (SOLVER, $ "new_bound=$new_bound ($(high.upper_bound) X $low) $LocalError");
@@ -902,7 +907,7 @@
 
         // Message.Debug ($"error=$(LocalError)");
 
-        !LocalError
+        prev == LocalErrorCount
       }
     }
 
@@ -1019,6 +1024,12 @@
     {
       get { Manager.Solver.CurrentMessenger.LocalError }
     }
+
+
+    LocalErrorCount : int
+    {
+      get { Manager.Solver.CurrentMessenger.LocalErrorCount }
+    }
     #endregion
 
     



More information about the svn mailing list