let asm_type = function
  | Integer -> Asm_ir.Integer
  | Boolean -> Asm_ir.Boolean
  | Pointer _ -> Asm_ir.Pointer
  | Array _ as a -> Asm_ir.Other(sizeof a)
  | Record r -> Asm_ir.Other(List.fold_left (fun s (_, t) -> s + (sizeof t)) 0 r)
  | User_type _
  | Unknown_type
  | Type_type
  | Unit -> raise (Parse_error("internal error in asm_type function (typing inconsistency)", (-1, -1)))