223 |
val nenv = S.add(env, tf) |
val nenv = S.add(env, tf) |
224 |
val (leE,leI,fvI,leRet) = sexp nenv le |
val (leE,leI,fvI,leRet) = sexp nenv le |
225 |
in case (bodyI, S.listItems(S.difference(fvbI, env))) |
in case (bodyI, S.listItems(S.difference(fvbI, env))) |
226 |
of ((F.RET _ | F.RECORD(_,_,_,F.RET _)),_) => |
of (_,[]) => |
|
(* split failed *) |
|
|
(fn e => F.TFN((tfk, tf, args, bodyE bodyRet), leE e), |
|
|
leI, fvI, leRet) |
|
|
| (_,[]) => |
|
227 |
(* everything was split out *) |
(* everything was split out *) |
228 |
let val ntfdec = ({inline=F.IH_ALWAYS}, tf, args, bodyE bodyRet) |
let val ntfdec = ({inline=F.IH_ALWAYS}, tf, args, bodyE bodyRet) |
229 |
val nlE = fn e => F.TFN(ntfdec, leE e) |
val nlE = fn e => F.TFN(ntfdec, leE e) |
231 |
else (nlE, F.TFN(ntfdec, leI), |
else (nlE, F.TFN(ntfdec, leI), |
232 |
S_rmv(tf, S.union(fvI, fvbI)), leRet) |
S_rmv(tf, S.union(fvI, fvbI)), leRet) |
233 |
end |
end |
234 |
|
| ((F.RET _ | F.RECORD(_,_,_,F.RET _)),_) => |
235 |
|
(* split failed *) |
236 |
|
(fn e => F.TFN((tfk, tf, args, bodyE bodyRet), leE e), |
237 |
|
leI, fvI, leRet) |
238 |
| (_,fvbIs) => |
| (_,fvbIs) => |
239 |
let (* tfdecE *) |
let (* tfdecE *) |
240 |
val tfE = cplv tf |
val tfE = cplv tf |