1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
(**************************************************************************)
(* *)
(* The Why platform for program certification *)
(* Copyright (C) 2002-2008 *)
(* Romain BARDOU *)
(* Jean-Franois COUCHOT *)
(* Mehdi DOGGUY *)
(* Jean-Christophe FILLITRE *)
(* Thierry HUBERT *)
(* Claude MARCH *)
(* Yannick MOY *)
(* Christine PAULIN *)
(* Yann RGIS-GIANAS *)
(* Nicolas ROUSSET *)
(* Xavier URBAIN *)
(* *)
(* This software is free software; you can redistribute it and/or *)
(* modify it under the terms of the GNU General Public *)
(* License version 2, as published by the Free Software Foundation. *)
(* *)
(* This software is distributed in the hope that it will be useful, *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *)
(* *)
(* See the GNU General Public License version 2 for more details *)
(* (enclosed in the file GPL). *)
(* *)
(**************************************************************************)
(*i $Id: ctypes.mli,v 1.21 2008/02/05 12:10:47 marche Exp $ i*)
(* Parsing C requires to separate identifiers and type names during
lexical analysis. This table is for this purpose. It is fill during
syntactic analysis. *)
type storage_class = No_storage | Extern | Auto | Static | Register
type sign = Signed | Unsigned
type cinteger =
| Char | Short | Int | Long | LongLong | Bitfield of int64
| ExactInt
type cfloat = Float | Double | LongDouble | Real
type valid = Valid of int64 * int64 | Not_valid
type ctype_node =
| Tvoid
| Tint of (sign * cinteger)
| Tfloat of cfloat
| Tvar of string
| Tarray of valid * ctype * int64 option
| Tpointer of valid * ctype
| Tstruct of string
| Tunion of string
| Tenum of string
| Tfun of ctype list * ctype
and ctype = {
ctype_node : ctype_node;
ctype_storage : storage_class;
ctype_const : bool;
ctype_volatile : bool;
ctype_ghost : bool;
}
val noattr : ctype_node -> ctype
val c_void : ctype
val c_int : ctype
val c_exact_int : ctype
val c_float : cfloat -> ctype
val c_string : valid -> ctype
val c_array : valid -> ctype -> ctype
val c_array_size : valid -> ctype -> int64 -> ctype
val c_pointer : valid -> ctype -> ctype
val c_void_star : valid -> ctype
val c_real : ctype
val c_addr : ctype
val add : string -> unit
val remove : string -> unit
val mem : string -> bool
val push : unit -> unit
val pop : unit -> unit
val ctype : Format.formatter -> ctype -> unit
val is_pointer : ctype -> bool
|