114 |
fun nofilter (ed: envdelta) = let |
fun nofilter (ed: envdelta) = let |
115 |
val { statenv, symenv, statpid, sympid } = ed |
val { statenv, symenv, statpid, sympid } = ed |
116 |
in |
in |
117 |
{ envs = fn () => { stat = statenv (), sym = symenv () }, |
{ envs = fn () => { stat = #env (statenv ()), sym = symenv () }, |
118 |
pids = pidset (statpid, sympid) } |
pids = pidset (statpid, sympid) } |
119 |
end |
end |
120 |
|
|
123 |
|
|
124 |
fun filter (ii, s) = let |
fun filter (ii, s) = let |
125 |
val { statenv, symenv, statpid, sympid } = ii |
val { statenv, symenv, statpid, sympid } = ii |
126 |
val ste = statenv () |
val { env = ste, ctxt } = statenv () |
127 |
in |
in |
128 |
if exportsNothingBut s ste then |
if exportsNothingBut s ste then |
129 |
{ envs = fn () => { stat = ste, sym = symenv () }, |
{ envs = fn () => { stat = ste, sym = symenv () }, |
138 |
(* We re-pickle the filtered ste relative to |
(* We re-pickle the filtered ste relative to |
139 |
* the original one. This should give a fairly |
* the original one. This should give a fairly |
140 |
* minimal pickle. *) |
* minimal pickle. *) |
141 |
val statpid' = |
val statpid' = GenericVC.Rehash.rehash |
142 |
GenericVC.MakePid.makePid (ste, ste') |
{ context = ctxt, |
143 |
|
env = GenericVC.CoerceEnv.es2bs ste', |
144 |
|
orig_hash = statpid } |
145 |
in |
in |
146 |
filtermap := |
filtermap := |
147 |
FilterMap.insert (!filtermap, key, statpid'); |
FilterMap.insert (!filtermap, key, statpid'); |
402 |
val eo = layerwork k Concur.wait (SOME emptyEnv) eo_cl |
val eo = layerwork k Concur.wait (SOME emptyEnv) eo_cl |
403 |
in |
in |
404 |
case eo of |
case eo of |
405 |
NONE => NONE |
NONE => (Servers.reset false; NONE) |
406 |
| SOME e => SOME (#envs e ()) |
| SOME e => SOME (#envs e ()) |
407 |
end |
end |
408 |
fun mkExport ie gp = |
fun mkExport ie gp = |
409 |
case impexp gp ie of |
case impexp gp ie of |
410 |
NONE => NONE |
NONE => (Servers.reset false; NONE) |
411 |
| SOME e => SOME (#envs e ()) |
| SOME e => SOME (#envs e ()) |
412 |
in |
in |
413 |
{ group = group, |
{ group = group, |
418 |
val { sbnode, ... } = mkTraversal (fn _ => fn _ => (), |
val { sbnode, ... } = mkTraversal (fn _ => fn _ => (), |
419 |
fn _ => (), |
fn _ => (), |
420 |
fn _ => 0) |
fn _ => 0) |
421 |
|
fun sbn_trav gp g = let |
422 |
|
val r = sbnode gp g |
423 |
|
in |
424 |
|
if isSome r then () else Servers.reset false; |
425 |
|
r |
426 |
|
end |
427 |
in |
in |
428 |
sbnode |
sbn_trav |
429 |
end |
end |
430 |
|
|
431 |
fun evict i = |
fun evict i = |