fun writeD nodes =
let
- val files = map (fn node => aliasesDF node) nodes
+ fun files () = map (fn node => aliasesDF node) nodes
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) =>
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";
- aliasesD := openInAll "aliases.default"))
+ reopenAliasesD ()))
val _ = Domain.registerAfter
(fn _ => (SM.app (fn file => #close file ()) (!aliases);
datatype aliasSource =
User of string
| Default
- | CatchAll
val source = fn (EApp ((EVar "userSource", _), e), _) =>
Option.map User (Env.string e)
| (EVar "defaultSource", _) => SOME Default
- | (EVar "catchAllSource", _) => SOME CatchAll
| _ => NONE
datatype aliasTarget =
write ": ";
writeTarget (write, t);
write "\n")
- | Default => (write "*@";
- writeDom ();
- write ": ";
- writeTarget (write, t);
- write "\n")
- | CatchAll => (writeD "*@";
- writeDomD ();
- writeD ": ";
- writeTarget (writeD, t);
- writeD "\n")
+ | Default => (reopenAliasesD ();
+ writeD "*@";
+ writeDomD ();
+ writeD ": ";
+ writeTarget (writeD, t);
+ writeD "\n")
end
val _ = Env.actionV_two "aliasPrim"