let rec sizeof = function
  | 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))
  | _ -> raise (Asm_error "internal error in sizeof function")