Only one default alias per domain
authorAdam Chlipala <adamc@hcoop.net>
Tue, 1 Jan 2008 22:19:27 +0000 (22:19 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Tue, 1 Jan 2008 22:19:27 +0000 (22:19 +0000)
src/plugins/alias.sml

index b96d57d..139c2fb 100644 (file)
@@ -40,10 +40,10 @@ fun write nodes =
 
 fun writeD nodes =
     let
 
 fun writeD nodes =
     let
-       val files = map (fn node => aliasesDF node) nodes
+       fun files () = map (fn node => aliasesDF node) nodes
     in
     in
-       (fn s => app (fn file => #write file s) files,
-        fn () => app (fn file => #writeDom file ()) files)
+       (fn s => app (fn file => #write file s) (files ()),
+        fn () => app (fn file => #writeDom file ()) (files ()))
     end
 
 fun openInAll base = foldl (fn (node, r) =>
     end
 
 fun openInAll base = foldl (fn (node, r) =>
@@ -52,9 +52,12 @@ fun openInAll base = foldl (fn (node, r) =>
                                          Domain.domainsFile {node = node, name = base}))
                           SM.empty Domain.nodes
 
                                          Domain.domainsFile {node = node, name = base}))
                           SM.empty Domain.nodes
 
+fun reopenAliasesD () = (SM.app (fn {close, ...} => close ()) (!aliasesD);
+                        aliasesD := openInAll "aliases.default")
+
 val _ = Domain.registerBefore
            (fn _ => (aliases := openInAll "aliases";
 val _ = Domain.registerBefore
            (fn _ => (aliases := openInAll "aliases";
-                     aliasesD := openInAll "aliases.default"))
+                     reopenAliasesD ()))
        
 val _ = Domain.registerAfter
        (fn _ => (SM.app (fn file => #close file ()) (!aliases);
        
 val _ = Domain.registerAfter
        (fn _ => (SM.app (fn file => #close file ()) (!aliases);
@@ -134,7 +137,8 @@ fun writeSource (env, s, t) =
                       write ": ";
                       writeTarget (write, t);
                       write "\n")
                       write ": ";
                       writeTarget (write, t);
                       write "\n")
-         | Default => (writeD "*@";
+         | Default => (reopenAliasesD ();
+                       writeD "*@";
                        writeDomD ();
                        writeD ": ";
                        writeTarget (writeD, t);
                        writeDomD ();
                        writeD ": ";
                        writeTarget (writeD, t);