let print_expr = function
    ILexpCoerce( t, n ) -> "("^(print_c_type t)^")"^(print_id n)
  | ILexpConstant c -> print_c_constants c
  | ILexpBinop( o, n1, n2 ) -> (print_id n1)^" "^(print_binary_operator o)^" "^(print_id n2)
  | ILexpUnaryop( o, n ) -> (print_unary_operator o)^" "^(print_id n)
  | ILexpInvoke( lv, l ) -> (print_lvalue lv)^"("^(print_list print_id "," l)^")"
  | ILexpAddress( lv, l ) -> "&"^(print_field l)
  | ILexpArgument n -> "incoming_arg("^(string_of_int n)^")"
  | ILexpIdent n -> print_id n