Advertisement
Miki_bro

Snäns

Nov 20th, 2022
512
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.90 KB | None | 0 0
  1. | Ast.If (e, b1, b2) ->
  2.       let ifHelper c rt exp b1 b2 : stream =
  3.         let _,e_b1 = cmp_block c rt b1 in
  4.         if List.length b2 <> 0 then begin
  5.           let _,e_b2 = cmp_block c rt b2 in
  6.           let if_label = (gensym "if") in
  7.           let else_label = (gensym "else") in
  8.           let merge_label = (gensym "merge") in
  9.      
  10.           [T (Cbr (exp, if_label, else_label))] >@
  11.           [L if_label] >@ e_b1 >@ [T (Br merge_label)] >@
  12.           [L else_label] >@ e_b2 >@ [T (Br merge_label)] >@
  13.           [L merge_label]
  14.         end
  15.         else begin
  16.           let if_label = (gensym "if") in
  17.           let merge_label = (gensym "merge") in
  18.      
  19.           [T (Cbr (exp, if_label, merge_label))] >@
  20.           [L if_label] >@ e_b1 >@ [T (Br merge_label)]>@
  21.           [L merge_label]
  22.         end in
  23.       let (t1, o1, s1) = (cmp_exp c e) in
  24.       c, s1 >@ (ifHelper c rt o1 b1 b2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement