src/Pure/Tools/codegen_thingol.ML
changeset 18360 a2c9506b62a7
parent 18335 99baddf6b0d0
child 18361 3126d01e9e35
--- a/src/Pure/Tools/codegen_thingol.ML	Tue Dec 06 16:07:10 2005 +0100
+++ b/src/Pure/Tools/codegen_thingol.ML	Tue Dec 06 16:07:25 2005 +0100
@@ -60,6 +60,7 @@
   type gen_defgen = string -> transact -> (def * string list) transact_fin;
   val pretty_def: def -> Pretty.T;
   val pretty_module: module -> Pretty.T; 
+  val pretty_deps: module -> Pretty.T;
   val empty_module: module;
   val get_def: module -> string -> def;
   val merge_module: module * module -> module;
@@ -539,6 +540,24 @@
           Pretty.block [Pretty.str name, Pretty.str " :=", Pretty.brk 1, pretty_def def]
   in pretty ("//", Module modl) end;
 
+fun pretty_deps modl =
+  let
+    fun one_node key =
+      (Pretty.block o Pretty.fbreaks) (
+        Pretty.str key
+        :: (map (fn s => Pretty.str ("<- " ^ s)) o Graph.imm_preds modl) key
+        @ (map (fn s => Pretty.str ("-> " ^ s)) o Graph.imm_succs modl) key
+        @ (the_list oo Option.mapPartial) ((fn Module modl' => SOME (pretty_deps modl') | _ => NONE) o Graph.get_node modl) (SOME key)
+      );
+  in
+    modl
+    |> Graph.strong_conn
+    |> List.concat
+    |> rev
+    |> map one_node
+    |> Pretty.chunks
+  end;
+
 
 (* name handling *)
 
@@ -1139,10 +1158,9 @@
           let
             val _ = writeln ("class 1");
             val varnames_ctxt =
-              sortctxt
-              |> length o Library.flat o map snd
-              |> Term.invent_names ((vars_of_iexprs o map snd) ds @ (vars_of_ipats o Library.flat o map fst) ds) "d"
-              |> unflat (map snd sortctxt);
+              dig
+                (Term.invent_names ((vars_of_iexprs o map snd) ds @ (vars_of_ipats o Library.flat o map fst) ds) "d" o length)
+                (map snd sortctxt);
             val _ = writeln ("class 2");
             val vname_alist = map2 (fn (vt, sort) => fn vs => (vt, vs ~~ sort)) sortctxt varnames_ctxt;
             val _ = writeln ("class 3");
@@ -1293,7 +1311,7 @@
       | seri prfx ds =
           s_def (resolver prfx) (map (fn (name, Def def) => (resolver prfx (prfx @ [name] |> NameSpace.pack), def)) ds)
   in
-    s_module (name_root, (map (seri [])
+    setmp print_mode [] s_module (name_root, (map (seri [])
       ((map (AList.make (Graph.get_node module)) o rev o Graph.strong_conn) module)))
   end;