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