1(* 2 * Copyright 2014, NICTA 3 * 4 * This software may be distributed and modified according to the terms of 5 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 6 * See "LICENSE_BSD2.txt" for details. 7 * 8 * @TAG(NICTA_BSD) 9 *) 10 11structure BaseCTypes = 12struct 13 datatype base_inttype = Char | Short | Int | Long | LongLong (* | ITY_Word of int *) 14end 15 16signature IMPLEMENTATION_NUMBERS = 17sig 18 19 type int = IntInf.int 20 val UCHAR_MAX : int 21 val USHORT_MAX : int 22 val UINT_MAX : int 23 val ULONG_MAX : int 24 val ULLONG_MAX : int 25 26 val SCHAR_MAX : int 27 val CHAR_MAX : int 28 val SHORT_MAX : int 29 val INT_MAX : int 30 val LONG_MAX : int 31 val LLONG_MAX : int 32 33 val SCHAR_MIN : int 34 val CHAR_MIN : int 35 val SHORT_MIN : int 36 val INT_MIN : int 37 val LONG_MIN : int 38 val LLONG_MIN : int 39 40 val char_signedp : bool 41 42 val CHAR_BIT : int 43 val boolWidth : int 44 val charWidth : int 45 val shortWidth : int 46 val intWidth : int 47 val longWidth : int 48 val llongWidth : int 49 val ptrWidth : int 50 val ptr_t : BaseCTypes.base_inttype 51 52 exception BadChar 53 val charliteral_conversion : int -> int 54 55end 56 57signature CHAR_LIT_UTIL = 58sig 59 exception BadChar 60 type int = IntInf.int 61 val schar_conv : {umax:int,smin:int,smax:int} -> int -> int 62 val uchar_conv : {umax:int} -> int -> int 63end 64 65structure CharLitUtil : CHAR_LIT_UTIL = 66struct 67open IntInf 68exception BadChar 69fun schar_conv {umax,smin,smax} i = let 70 val _ = 0 <= i andalso i <= umax orelse 71 raise BadChar 72in 73 if i > smax then smin + i 74 else i 75end 76fun uchar_conv {umax} i = let 77 val _ = 0 <= i andalso i <= umax orelse 78 raise BadChar 79in 80 i 81end 82 83end 84