OVMS3/OVMS.V3/components/duktape/config/header-snippets/types2.h.in

133 lines
5 KiB
C

/* A few types are assumed to always exist. */
typedef size_t duk_size_t;
typedef ptrdiff_t duk_ptrdiff_t;
/* The best type for an "all around int" in Duktape internals is "at least
* 32 bit signed integer" which is most convenient. Same for unsigned type.
* Prefer 'int' when large enough, as it is almost always a convenient type.
*/
#if defined(UINT_MAX) && (UINT_MAX >= 0xffffffffUL)
typedef int duk_int_t;
typedef unsigned int duk_uint_t;
#define DUK_INT_MIN INT_MIN
#define DUK_INT_MAX INT_MAX
#define DUK_UINT_MIN 0
#define DUK_UINT_MAX UINT_MAX
#else
typedef duk_int_fast32_t duk_int_t;
typedef duk_uint_fast32_t duk_uint_t;
#define DUK_INT_MIN DUK_INT_FAST32_MIN
#define DUK_INT_MAX DUK_INT_FAST32_MAX
#define DUK_UINT_MIN DUK_UINT_FAST32_MIN
#define DUK_UINT_MAX DUK_UINT_FAST32_MAX
#endif
/* Same as 'duk_int_t' but guaranteed to be a 'fast' variant if this
* distinction matters for the CPU. These types are used mainly in the
* executor where it might really matter.
*/
typedef duk_int_fast32_t duk_int_fast_t;
typedef duk_uint_fast32_t duk_uint_fast_t;
#define DUK_INT_FAST_MIN DUK_INT_FAST32_MIN
#define DUK_INT_FAST_MAX DUK_INT_FAST32_MAX
#define DUK_UINT_FAST_MIN DUK_UINT_FAST32_MIN
#define DUK_UINT_FAST_MAX DUK_UINT_FAST32_MAX
/* Small integers (16 bits or more) can fall back to the 'int' type, but
* have a typedef so they are marked "small" explicitly.
*/
typedef int duk_small_int_t;
typedef unsigned int duk_small_uint_t;
#define DUK_SMALL_INT_MIN INT_MIN
#define DUK_SMALL_INT_MAX INT_MAX
#define DUK_SMALL_UINT_MIN 0
#define DUK_SMALL_UINT_MAX UINT_MAX
/* Fast variants of small integers, again for really fast paths like the
* executor.
*/
typedef duk_int_fast16_t duk_small_int_fast_t;
typedef duk_uint_fast16_t duk_small_uint_fast_t;
#define DUK_SMALL_INT_FAST_MIN DUK_INT_FAST16_MIN
#define DUK_SMALL_INT_FAST_MAX DUK_INT_FAST16_MAX
#define DUK_SMALL_UINT_FAST_MIN DUK_UINT_FAST16_MIN
#define DUK_SMALL_UINT_FAST_MAX DUK_UINT_FAST16_MAX
/* Boolean values are represented with the platform 'unsigned int'. */
typedef duk_small_uint_t duk_bool_t;
#define DUK_BOOL_MIN DUK_SMALL_UINT_MIN
#define DUK_BOOL_MAX DUK_SMALL_UINT_MAX
/* Index values must have at least 32-bit signed range. */
typedef duk_int_t duk_idx_t;
#define DUK_IDX_MIN DUK_INT_MIN
#define DUK_IDX_MAX DUK_INT_MAX
/* Unsigned index variant. */
typedef duk_uint_t duk_uidx_t;
#define DUK_UIDX_MIN DUK_UINT_MIN
#define DUK_UIDX_MAX DUK_UINT_MAX
/* Array index values, could be exact 32 bits.
* Currently no need for signed duk_arridx_t.
*/
typedef duk_uint_t duk_uarridx_t;
#define DUK_UARRIDX_MIN DUK_UINT_MIN
#define DUK_UARRIDX_MAX DUK_UINT_MAX
/* Duktape/C function return value, platform int is enough for now to
* represent 0, 1, or negative error code. Must be compatible with
* assigning truth values (e.g. duk_ret_t rc = (foo == bar);).
*/
typedef duk_small_int_t duk_ret_t;
#define DUK_RET_MIN DUK_SMALL_INT_MIN
#define DUK_RET_MAX DUK_SMALL_INT_MAX
/* Error codes are represented with platform int. High bits are used
* for flags and such, so 32 bits are needed.
*/
typedef duk_int_t duk_errcode_t;
#define DUK_ERRCODE_MIN DUK_INT_MIN
#define DUK_ERRCODE_MAX DUK_INT_MAX
/* Codepoint type. Must be 32 bits or more because it is used also for
* internal codepoints. The type is signed because negative codepoints
* are used as internal markers (e.g. to mark EOF or missing argument).
* (X)UTF-8/CESU-8 encode/decode take and return an unsigned variant to
* ensure duk_uint32_t casts back and forth nicely. Almost everything
* else uses the signed one.
*/
typedef duk_int_t duk_codepoint_t;
typedef duk_uint_t duk_ucodepoint_t;
#define DUK_CODEPOINT_MIN DUK_INT_MIN
#define DUK_CODEPOINT_MAX DUK_INT_MAX
#define DUK_UCODEPOINT_MIN DUK_UINT_MIN
#define DUK_UCODEPOINT_MAX DUK_UINT_MAX
/* IEEE float/double typedef. */
typedef float duk_float_t;
typedef double duk_double_t;
/* We're generally assuming that we're working on a platform with a 32-bit
* address space. If DUK_SIZE_MAX is a typecast value (which is necessary
* if SIZE_MAX is missing), the check must be avoided because the
* preprocessor can't do a comparison.
*/
#if !defined(DUK_SIZE_MAX)
#error DUK_SIZE_MAX is undefined, probably missing SIZE_MAX
#elif !defined(DUK_SIZE_MAX_COMPUTED)
#if DUK_SIZE_MAX < 0xffffffffUL
/* On some systems SIZE_MAX can be smaller than max unsigned 32-bit value
* which seems incorrect if size_t is (at least) an unsigned 32-bit type.
* However, it doesn't seem useful to error out compilation if this is the
* case.
*/
#endif
#endif
/* Type used in public API declarations and user code. Typedef maps to
* 'struct duk_hthread' like the 'duk_hthread' typedef which is used
* exclusively in internals.
*/
typedef struct duk_hthread duk_context;