Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- | Ast.If (e, b1, b2) ->
- let ifHelper c rt exp b1 b2 : stream =
- let _,e_b1 = cmp_block c rt b1 in
- if List.length b2 <> 0 then begin
- let _,e_b2 = cmp_block c rt b2 in
- let if_label = (gensym "if") in
- let else_label = (gensym "else") in
- let merge_label = (gensym "merge") in
- [T (Cbr (exp, if_label, else_label))] >@
- [L if_label] >@ e_b1 >@ [T (Br merge_label)] >@
- [L else_label] >@ e_b2 >@ [T (Br merge_label)] >@
- [L merge_label]
- end
- else begin
- let if_label = (gensym "if") in
- let merge_label = (gensym "merge") in
- [T (Cbr (exp, if_label, merge_label))] >@
- [L if_label] >@ e_b1 >@ [T (Br merge_label)]>@
- [L merge_label]
- end in
- let (t1, o1, s1) = (cmp_exp c e) in
- c, s1 >@ (ifHelper c rt o1 b1 b2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement