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")