let rec sizeof = function
  | Pointer _
  | Integer -> 4
  | Boolean -> 1
  | Record r -> List.fold_left (fun s (_, t) -> s + (sizeof t)) 0 r
  | Array(t, d, f) -> (sizeof t) * ((eval_expr_int f) - (eval_expr_int d) + 1)
  | t ->
      Log.debug (string_of_type t);
      raise (Asm_error "internal error in sizeof function")