63 |
|
|
64 |
fun cand x = (get x; true) handle _ => false |
fun cand x = (get x; true) handle _ => false |
65 |
|
|
66 |
fun lpfd d (FK_FUN {isrec=SOME _,...}, v, vts, e) = lple d e |
fun lpfd d ({isrec=SOME _,...}, v, vts, e) = lple d e |
67 |
| lpfd d (_, v, vts, e) = (enter(v, d); lple d e) |
| lpfd d (_, v, vts, e) = (enter(v, d); lple d e) |
68 |
|
|
69 |
and lple d e = |
and lple d e = |
255 |
and lpfd (fk, v, vts, e) = |
and lpfd (fk, v, vts, e) = |
256 |
let val nfk = |
let val nfk = |
257 |
case fk |
case fk |
258 |
of FK_FUN{isrec=SOME t, known, inline, fixed} => |
of {isrec=SOME(t,lk), known, inline, cconv} => |
259 |
FK_FUN{isrec=SOME(map ltf t), known=known, inline=inline, |
{isrec=SOME(map ltf t, lk), known=known, inline=inline, |
260 |
fixed=fixed} |
cconv=cconv} |
261 |
| _ => fk |
| _ => fk |
262 |
in (nfk, v, map (fn (v,t) => (v,ltf t)) vts, #1(loop e)) |
in (nfk, v, map (fn (v,t) => (v,ltf t)) vts, #1(loop e)) |
263 |
end |
end |
311 |
end |
end |
312 |
|
|
313 |
| FIX(fdecs, e) => |
| FIX(fdecs, e) => |
314 |
let fun g (FK_FUN {isrec=SOME _, ...} :fkind, v, _, _) = |
let fun g ({isrec=SOME _, ...} :fkind, v, _, _) = |
315 |
chkIn(v, StdExp) |
chkIn(v, StdExp) |
316 |
| g ((_, v, vts, xe) : fundec) = |
| g ((_, v, vts, xe) : fundec) = |
317 |
chkIn(v, if isCand v then FunExp(od, map #1 vts, xe) |
chkIn(v, if isCand v then FunExp(od, map #1 vts, xe) |