mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.8 KiB
129 lines
4.8 KiB
/* 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 'int'. */
|
|
typedef duk_small_int_t duk_bool_t;
|
|
#define DUK_BOOL_MIN DUK_SMALL_INT_MIN
|
|
#define DUK_BOOL_MAX DUK_SMALL_INT_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 for public API calls. */
|
|
typedef struct duk_hthread duk_context;
|
|
|