227 |
VARexp result])) |
VARexp result])) |
228 |
end |
end |
229 |
end |
end |
230 |
| i_exp tail loc (A.HANDLEexp (e, A.HANDLER (A.FNexp (rl, t)))) = let |
| i_exp tail loc (A.HANDLEexp (e, (rl, t))) = let |
231 |
val restore = tmpvar ("tmprestore", u_u_Ty) |
val restore = tmpvar ("tmprestore", u_u_Ty) |
232 |
fun rule (r as A.RULE (p, e)) = |
fun rule (r as A.RULE (p, e)) = |
233 |
if is_raise_exp e then r |
if is_raise_exp e then r |
234 |
else A.RULE (p, A.SEQexp [AUexp restore, i_exp tail loc e]) |
else A.RULE (p, A.SEQexp [AUexp restore, i_exp tail loc e]) |
235 |
in |
in |
236 |
LETexp (restore, saveexp, |
LETexp (restore, saveexp, |
237 |
A.HANDLEexp (i_exp false loc e, |
A.HANDLEexp (i_exp false loc e, (map rule rl, t))) |
|
A.HANDLER (A.FNexp (map rule rl, t)))) |
|
238 |
end |
end |
|
| i_exp _ _ (A.HANDLEexp _) = impossible "bad HANDLEexp" |
|
239 |
| i_exp _ loc (A.RAISEexp (e, t)) = |
| i_exp _ loc (A.RAISEexp (e, t)) = |
240 |
A.RAISEexp (i_exp false loc e, t) |
A.RAISEexp (i_exp false loc e, t) |
241 |
| i_exp tail loc (A.CASEexp (e, rl, b)) = |
| i_exp tail loc (A.CASEexp (e, rl, b)) = |
278 |
A.CONSTRAINTexp (i_exp tail loc e, t) |
A.CONSTRAINTexp (i_exp tail loc e, t) |
279 |
| i_exp tail (n, _) (A.MARKexp (e, r)) = |
| i_exp tail (n, _) (A.MARKexp (e, r)) = |
280 |
A.MARKexp (i_exp tail (n, r) e, r) |
A.MARKexp (i_exp tail (n, r) e, r) |
281 |
| i_exp _ _ e = e |
| i_exp _ _ (e as (A.VARexp _ | A.CONexp _ | A.INTexp _ | |
282 |
|
A.WORDexp _ | A.REALexp _ | A.STRINGexp _ | |
283 |
|
A.CHARexp _)) = e |
284 |
|
|
285 |
and i_dec loc (A.VALdec l) = A.VALdec (map (i_vb loc) l) |
and i_dec loc (A.VALdec l) = A.VALdec (map (i_vb loc) l) |
286 |
| i_dec loc (A.VALRECdec l) = A.VALRECdec (map (i_rvb loc) l) |
| i_dec loc (A.VALRECdec l) = A.VALRECdec (map (i_rvb loc) l) |
295 |
A.LOCALdec (i_dec loc d, i_dec loc d') |
A.LOCALdec (i_dec loc d, i_dec loc d') |
296 |
| i_dec loc (A.SEQdec l) = A.SEQdec (map (i_dec loc) l) |
| i_dec loc (A.SEQdec l) = A.SEQdec (map (i_dec loc) l) |
297 |
| i_dec (n, _) (A.MARKdec (d, r)) = A.MARKdec (i_dec (n, r) d, r) |
| i_dec (n, _) (A.MARKdec (d, r)) = A.MARKdec (i_dec (n, r) d, r) |
298 |
| i_dec _ d = d |
| i_dec _ (d as (A.TYPEdec _ | A.DATATYPEdec _ | |
299 |
|
A.SIGdec _ | A.FSIGdec _ | A.OPENdec _ | |
300 |
|
A.OVLDdec _ | A.FIXdec _)) = d |
301 |
|
|
302 |
and i_rule tail loc (A.RULE (p, e)) = A.RULE (p, i_exp tail loc e) |
and i_rule tail loc (A.RULE (p, e)) = A.RULE (p, i_exp tail loc e) |
303 |
|
|