let rec print_il = function
ILstmtIf( IFNOT, n, m ) -> Printf.sprintf "ifnot %s goto %d\n" (print_id n) m
| ILstmtIf( IFTRUE, n, m ) -> Printf.sprintf "if %s goto %d\n" (print_id n) m
| ILstmtSwitch( n, jump_table ) ->
let print = function
CASE n, m -> (Big_int.string_of_big_int n)^"=>"^(string_of_int m)
| DEFAULT, m -> "_=>"^(string_of_int m)
in
"switch "^(print_id n)^" {"^(Ctt_printer.print_list print "," jump_table)^"}\n"
| ILstmtGoto n -> Printf.sprintf "goto %d\n" n
| ILstmtReturn None -> "return\n"
| ILstmtReturn (Some n) -> Printf.sprintf "return %s\n" (print_id n)
| ILstmtAssign( n, t, e ) -> (print_id n)^" : "^(print_c_type t)^" = "^(print_expr e)^"\n"
| ILstmtRead( n, t, lv, l ) -> (print_id n)^" : "^(print_c_type t)^" = "^(print_lvalue_field (lv, l))^"\n"
| ILstmtWrite( lv, l, n ) -> (print_lvalue_field (lv, l))^" = "^(print_id n)^"\n"
| ILstmtInitialize( n, t, i ) -> (print_id n)^" : "^(print_c_type t)^" = [init]\n"
| ILstmtSequence l -> "begin\n"^(Ctt_printer.print_list print_il "" l)^"end\n"
| ILstmtParallel l -> "parallel begin\n"^(Ctt_printer.print_list print_il "" l)^"parallel end\n"