Improved implementation of Defs.is_overloaded.
authorobua
Mon, 11 Jul 2005 14:52:55 +0200
changeset 16766 ea667a5426fe
parent 16765 b8b1f310877f
child 16767 2d4433759b8d
Improved implementation of Defs.is_overloaded.
src/Pure/defs.ML
--- a/src/Pure/defs.ML	Fri Jul 08 11:57:15 2005 +0200
+++ b/src/Pure/defs.ML	Mon Jul 11 14:52:55 2005 +0200
@@ -667,10 +667,16 @@
         SOME (ty, map translate (Symtab.dest defnodes), state)
     end
       
-fun is_overloaded g c = 
-    case overloading_info g c of
-      NONE => false
-    | SOME (_, l, _) => length l >= 2
+exception Overloaded;
+fun is_overloaded (_, _, _, graph) c = 
+    let 
+      fun count (c, _) = if c = 1 then raise Overloaded else c+1
+    in
+      case Symtab.lookup (graph, c) of
+        NONE => false
+      | SOME (Node (_, defnodes, _, _, _)) =>
+        ((Symtab.foldl count (0, defnodes); false) handle Overloaded => true)
+    end
 
 end;