54 |
val e = BF.exec (bfc, mkdyn ()) |
val e = BF.exec (bfc, mkdyn ()) |
55 |
val de = E.dynamicPart e |
val de = E.dynamicPart e |
56 |
in |
in |
57 |
|
BF.discardCode bfc; |
58 |
memo de; |
memo de; |
59 |
SOME (thunkify de, sl, bl) |
SOME (thunkify de, sl, bl) |
60 |
end handle exn => let |
end handle exn => let |
70 |
fun dostable (i, mkbenv, gp) = |
fun dostable (i, mkbenv, gp) = |
71 |
case mkbenv () of |
case mkbenv () of |
72 |
NONE => NONE |
NONE => NONE |
73 |
| SOME (benv, sl, bl) => |
| SOME (benv, sl, bl) => let |
74 |
(case PS.exec_look_stable (i, gp) of |
val bfc = PS.bfc_fetch_stable i |
75 |
SOME m => SOME (thunkify m, [], [i]) |
in |
76 |
| NONE => (execute (PS.bfc_fetch_stable i, benv, |
case PS.exec_look_stable (i, gp, BF.exportPidOf bfc) of |
77 |
|
SOME m => |
78 |
|
(BF.discardCode bfc; |
79 |
|
SOME (thunkify m, [], [i])) |
80 |
|
| NONE => (execute (bfc, benv, |
81 |
BinInfo.error i EM.COMPLAIN, |
BinInfo.error i EM.COMPLAIN, |
82 |
BinInfo.describe i, |
BinInfo.describe i, |
83 |
fn e => PS.exec_memo_stable (i, e, bl), |
fn e => PS.exec_memo_stable (i, e, bl), |
84 |
[], [i]))) |
[], [i])) |
85 |
|
end |
|
fun fetch_sml i = |
|
|
PS.bfc_fetch_sml i handle e => (print "!!! fetch_sml\n"; raise e) |
|
86 |
|
|
87 |
fun dosml (i, (env, sl, bl), gp) = |
fun dosml (i, (env, sl, bl), gp) = let |
88 |
case PS.exec_look_sml (i, gp) of |
val bfc = PS.bfc_fetch_sml i |
89 |
SOME m => SOME (thunkify m, [i], []) |
handle e => (print "!!! fetch_sml\n"; raise e) |
90 |
| NONE => (execute (fetch_sml i, env, |
in |
91 |
|
case PS.exec_look_sml (i, gp, BF.exportPidOf bfc) of |
92 |
|
SOME m => |
93 |
|
(BF.discardCode bfc; |
94 |
|
SOME (thunkify m, [i], [])) |
95 |
|
| NONE => (execute (bfc, env, |
96 |
SmlInfo.error gp i EM.COMPLAIN, |
SmlInfo.error gp i EM.COMPLAIN, |
97 |
SmlInfo.descr i, |
SmlInfo.descr i, |
98 |
fn m => PS.exec_memo_sml (i, m, sl, bl), |
fn m => PS.exec_memo_sml (i, m, sl, bl), |
99 |
[i], [])) |
[i], [])) |
100 |
end |
end |
101 |
|
end |