#line 52 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
pod type char = "char";
#line 69 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
pod type tiny = "signed char" requires index TYPE_tiny;
pod type short = "short" requires index TYPE_short;
pod type int = "int" requires index TYPE_int;
pod type long = "long" requires index TYPE_long;
pod type vlong = "long long" requires index TYPE_vlong;
pod type utiny = "unsigned char" requires index TYPE_utiny;
pod type ushort = "unsigned short" requires index TYPE_ushort;
pod type uint = "unsigned int" requires index TYPE_uint;
pod type ulong = "unsigned long" requires index TYPE_ulong;
pod type uvlong = "unsigned long long" requires index TYPE_uvlong;
pod type intmax = "intmax_t" requires C99_headers::stdint_h, index TYPE_intmax;
pod type uintmax = "uintmax_t" requires C99_headers::stdint_h, index TYPE_uintmax;
pod type size = "size_t" requires C89_headers::stddef_h, index TYPE_size;
pod type ssize = "ssize_t" requires C89_headers::stddef_h, index TYPE_ssize;
class PervasiveInts {
private const zero: int = "0" requires index CONST_zero;
private fun isneg: int -> 2 = "$1<0" requires index FUN_isneg;
private fun isnonneg: int -> 2= "$1>=0" requires index FUN_isnonneg;
private proc decr: &int = "--*$1;" requires index PROC_decr;
}
class PervasiveLogic {
private fun land: bool * bool -> bool = "$1&&$2" requires index FUN_land;
private fun lor: bool * bool -> bool = "$1||$2" requires index FUN_lor;
private fun lnot: bool * bool -> bool = "!$1" requires index FUN_lnot;
}
#line 108 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
pod type int8 = "int8_t" requires C99_headers::stdint_h, index TYPE_int8;
pod type int16 = "int16_t" requires C99_headers::stdint_h, index TYPE_int16;
pod type int32 = "int32_t" requires C99_headers::stdint_h, index TYPE_int32;
pod type int64 = "int64_t" requires C99_headers::stdint_h, index TYPE_int64;
pod type uint8 = "uint8_t" requires C99_headers::stdint_h, index TYPE_uint8;
pod type uint16 = "uint16_t" requires C99_headers::stdint_h, index TYPE_uint16;
pod type uint32 = "uint32_t" requires C99_headers::stdint_h, index TYPE_uint32;
pod type uint64 = "uint64_t" requires C99_headers::stdint_h, index TYPE_uint64;
pod type uint128 = "uint128_t" requires package "flx_uint256_t";
pod type uint256 = "uint256_t" requires package "flx_uint256_t";
#line 132 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
pod type byte = "unsigned char" requires index TYPE_byte;
type caddress = "void *";
_gc_pointer type address = "void *" requires index TYPE_address;
pod type ptrdiff = "ptrdiff_t" requires C89_headers::stddef_h, index TYPE_ptrdiff;
pod type intptr = "intptr_t" requires C99_headers::stdint_h, index TYPE_intptr;
pod type uintptr = "uintptr_t" requires C99_headers::stdint_h, index TYPE_uintptr;
#line 164 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
pod type float = "float" requires index TYPE_float;
pod type double = "double" requires index TYPE_double;
pod type ldouble = "long double" requires index TYPE_ldouble;
pod type fcomplex = "::std::complex<float>" requires Cxx_headers::complex, index TYPE_fcomplex;
pod type dcomplex = "::std::complex<double>" requires Cxx_headers::complex, index TYPE_dcomplex;
pod type lcomplex = "::std::complex<long double>" requires Cxx_headers::complex, index TYPE_lcomplex;
#line 184 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
typedef addressing = typesetof (
byte,
address,
caddress
);
typedef chars = typesetof (char);
#line 196 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
typedef fast_sints = typesetof (tiny, short, int, long, vlong);
typedef exact_sints = typesetof(int8,int16,int32,int64);
typedef fast_uints = typesetof (utiny, ushort, uint, ulong,uvlong);
typedef exact_uints = typesetof (uint8,uint16,uint32,uint64,uint128,uint256);
typedef weird_sints = typesetof (ptrdiff, ssize, intmax, intptr);
typedef weird_uints = typesetof (size, uintmax, uintptr);
typedef sints = fast_sints \(\cup\) exact_sints \(\cup\) weird_sints;
typedef uints = fast_uints \(\cup\) exact_uints \(\cup\) weird_uints;
typedef fast_ints = fast_sints \(\cup\) fast_uints;
typedef exact_ints = exact_sints \(\cup\) exact_uints;
typedef ints = sints \(\cup\) uints;
#line 239 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
typedef floats = typesetof (float, double, ldouble);
typedef reals = ints \(\cup\) floats;
typedef complexes = typesetof (fcomplex,dcomplex,lcomplex);
typedef numbers = reals \(\cup\) complexes;
#line 254 "/home/ubuntu/felix/src/packages/core_scalar_types.fdoc"
typedef basic_types = bool \(\cup\) numbers \(\cup\) chars \(\cup\) addressing;
instance [t in basic_types] Eq[t] {
fun == : t * t -> bool = "$1==$2";
}
open[T in basic_types] Show[T];