56 #if !defined(DUK_CONFIG_H_INCLUDED)
57 #define DUK_CONFIG_H_INCLUDED
65 #undef DUK_F_DLL_BUILD
68 #if defined(__APPLE__)
73 #if defined(__FreeBSD__) || defined(__FreeBSD)
78 #if defined(DUK_F_FREEBSD) && defined(__ORBIS__)
83 #if defined(__OpenBSD__) || defined(__OpenBSD)
88 #if defined(__NetBSD__) || defined(__NetBSD)
93 #if defined(DUK_F_FREEBSD) || defined(DUK_F_NETBSD) || defined(DUK_F_OPENBSD) || \
94 defined(__bsdi__) || defined(__DragonFly__)
108 #if defined(__m68k__) || defined(M68000) || defined(__MC68K__)
115 #if defined(AMIGA) || defined(__amigaos__)
116 #define DUK_F_AMIGAOS
120 #if defined(__powerpc) || defined(__powerpc__) || defined(__PPC__)
122 #if defined(__PPC64__) || defined(__LP64__) || defined(_LP64)
130 #if defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64) || \
131 defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__)
132 #define DUK_F_WINDOWS
133 #if defined(_WIN64) || defined(WIN64)
141 #if defined(__FLASHPLAYER__)
142 #define DUK_F_FLASHPLAYER
151 #if defined(_TINSPIRE)
152 #define DUK_F_TINSPIRE
156 #if defined(EMSCRIPTEN)
157 #define DUK_F_EMSCRIPTEN
161 #if defined(__BCC__) || defined(__BCC_VERSION__)
166 #if defined(__linux) || defined(__linux__) || defined(linux)
171 #if defined(__sun) && defined(__SVR4)
181 #if defined(__CYGWIN__)
186 #if defined(__unix) || defined(__unix__) || defined(unix) || \
187 defined(DUK_F_LINUX) || defined(DUK_F_BSD)
192 #if defined(DUK_F_WINDOWS) && defined(_MSC_VER)
193 #if (_MSC_VER < 1700)
195 #define DUK_F_NO_STDINT_H
198 #if !defined(DUK_F_NO_STDINT_H) && (defined(DUK_F_TOS) || defined(DUK_F_BCC))
199 #define DUK_F_NO_STDINT_H
204 #if defined(__cplusplus)
212 #if defined(__amd64__) || defined(__amd64) || \
213 defined(__x86_64__) || defined(__x86_64) || \
214 defined(_M_X64) || defined(_M_AMD64)
215 #if defined(__ILP32__) || defined(_ILP32)
220 #elif defined(i386) || defined(__i386) || defined(__i386__) || \
221 defined(__i486__) || defined(__i586__) || defined(__i686__) || \
222 defined(__IA32__) || defined(_M_IX86) || defined(__X86__) || \
223 defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__)
224 #if defined(__LP64__) || defined(_LP64)
233 #if defined(__arm__) || defined(__thumb__) || defined(_ARM) || defined(_M_ARM) || defined(__aarch64__)
235 #if defined(__LP64__) || defined(_LP64) || defined(__arm64) || defined(__arm64__) || defined(__aarch64__)
243 #if defined(__mips__) || defined(mips) || defined(_MIPS_ISA) || \
244 defined(_R3000) || defined(_R4000) || defined(_R5900) || \
245 defined(_MIPS_ISA_MIPS1) || defined(_MIPS_ISA_MIPS2) || \
246 defined(_MIPS_ISA_MIPS3) || defined(_MIPS_ISA_MIPS4) || \
247 defined(__mips) || defined(__MIPS__)
249 #if defined(__LP64__) || defined(_LP64) || defined(__mips64) || \
250 defined(__mips64__) || defined(__mips_n64)
258 #if defined(sparc) || defined(__sparc) || defined(__sparc__)
260 #if defined(__LP64__) || defined(_LP64)
261 #define DUK_F_SPARC64
263 #define DUK_F_SPARC32
268 #if defined(__sh__) || \
269 defined(__sh1__) || defined(__SH1__) || \
270 defined(__sh2__) || defined(__SH2__) || \
271 defined(__sh3__) || defined(__SH3__) || \
272 defined(__sh4__) || defined(__SH4__) || \
273 defined(__sh5__) || defined(__SH5__)
278 #if defined(__clang__)
284 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
290 #if defined(__cplusplus) && (__cplusplus >= 201103L)
295 #if defined(__GNUC__) && !defined(__clang__) && !defined(DUK_F_CLANG)
297 #if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
299 #define DUK_F_GCC_VERSION (__GNUC__ * 10000L + __GNUC_MINOR__ * 100L + __GNUC_PATCHLEVEL__)
301 #error cannot figure out gcc version
306 #if defined(__MINGW32__) || defined(__MINGW64__)
311 #if defined(_MSC_VER)
317 #if defined(_MSC_FULL_VER)
318 #if (_MSC_FULL_VER > 100000000)
319 #define DUK_F_MSVC_FULL_VER _MSC_FULL_VER
321 #define DUK_F_MSCV_FULL_VER (_MSC_FULL_VER * 10)
327 #if defined(__TINYC__)
333 #if defined(__VBCC__)
344 #if defined(__cplusplus) && !defined(__STDC_LIMIT_MACROS)
345 #define __STDC_LIMIT_MACROS
347 #if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS)
348 #define __STDC_CONSTANT_MACROS
351 #if defined(DUK_F_APPLE)
353 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
354 #define DUK_USE_DATE_TZO_GMTIME_R
355 #define DUK_USE_DATE_PRS_STRPTIME
356 #define DUK_USE_DATE_FMT_STRFTIME
357 #include <TargetConditionals.h>
358 #include <architecture/byte_order.h>
359 #include <sys/param.h>
360 #include <sys/time.h>
364 #if TARGET_IPHONE_SIMULATOR
365 #define DUK_USE_OS_STRING "iphone-sim"
366 #elif TARGET_OS_IPHONE
367 #define DUK_USE_OS_STRING "iphone"
369 #define DUK_USE_OS_STRING "osx"
371 #define DUK_USE_OS_STRING "osx-unknown"
375 #define DUK_JMPBUF_TYPE jmp_buf
376 #define DUK_SETJMP(jb) _setjmp((jb))
377 #define DUK_LONGJMP(jb) _longjmp((jb), 1)
378 #elif defined(DUK_F_ORBIS)
381 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
382 #define DUK_USE_DATE_TZO_GMTIME_S
384 #define DUK_USE_DATE_FMT_STRFTIME
385 #include <sys/types.h>
386 #include <machine/endian.h>
387 #include <sys/param.h>
388 #include <sys/time.h>
391 #define DUK_USE_OS_STRING "orbis"
392 #elif defined(DUK_F_OPENBSD)
395 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
396 #define DUK_USE_DATE_TZO_GMTIME_R
397 #define DUK_USE_DATE_PRS_STRPTIME
398 #define DUK_USE_DATE_FMT_STRFTIME
399 #include <sys/types.h>
400 #include <sys/endian.h>
401 #include <sys/param.h>
402 #include <sys/time.h>
405 #define DUK_USE_OS_STRING "openbsd"
406 #elif defined(DUK_F_BSD)
408 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
409 #define DUK_USE_DATE_TZO_GMTIME_R
410 #define DUK_USE_DATE_PRS_STRPTIME
411 #define DUK_USE_DATE_FMT_STRFTIME
412 #include <sys/types.h>
413 #include <sys/endian.h>
414 #include <sys/param.h>
415 #include <sys/time.h>
418 #define DUK_USE_OS_STRING "bsd"
419 #elif defined(DUK_F_TOS)
421 #define DUK_USE_DATE_NOW_TIME
422 #define DUK_USE_DATE_TZO_GMTIME
424 #define DUK_USE_DATE_FMT_STRFTIME
427 #define DUK_USE_OS_STRING "tos"
430 #if !defined(DUK_USE_BYTEORDER) && defined(DUK_F_M68K)
431 #define DUK_USE_BYTEORDER 3
433 #elif defined(DUK_F_AMIGAOS)
435 #if defined(DUK_F_M68K)
437 #define DUK_USE_DATE_NOW_TIME
438 #define DUK_USE_DATE_TZO_GMTIME
440 #define DUK_USE_DATE_FMT_STRFTIME
442 #elif defined(DUK_F_PPC)
443 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
444 #define DUK_USE_DATE_TZO_GMTIME_R
445 #define DUK_USE_DATE_PRS_STRPTIME
446 #define DUK_USE_DATE_FMT_STRFTIME
448 #if !defined(UINTPTR_MAX)
449 #define UINTPTR_MAX UINT_MAX
452 #error AmigaOS but not M68K/PPC, not supported now
455 #define DUK_USE_OS_STRING "amigaos"
458 #if !defined(DUK_USE_BYTEORDER) && (defined(DUK_F_M68K) || defined(DUK_F_PPC))
459 #define DUK_USE_BYTEORDER 3
461 #elif defined(DUK_F_WINDOWS)
467 #if defined(DUK_COMPILING_DUKTAPE) && !defined(_CRT_SECURE_NO_WARNINGS)
468 #define _CRT_SECURE_NO_WARNINGS
473 #define DUK_USE_DATE_NOW_WINDOWS
474 #define DUK_USE_DATE_TZO_WINDOWS
479 #if defined(DUK_COMPILING_DUKTAPE)
486 #define DUK_USE_OS_STRING "windows"
491 #if !defined(DUK_USE_BYTEORDER)
492 #define DUK_USE_BYTEORDER 1
494 #elif defined(DUK_F_FLASHPLAYER)
496 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
497 #define DUK_USE_DATE_TZO_GMTIME_R
498 #define DUK_USE_DATE_PRS_STRPTIME
499 #define DUK_USE_DATE_FMT_STRFTIME
501 #include <sys/param.h>
502 #include <sys/time.h>
505 #define DUK_USE_OS_STRING "flashplayer"
507 #if !defined(DUK_USE_BYTEORDER) && defined(DUK_F_FLASHPLAYER)
508 #define DUK_USE_BYTEORDER 1
510 #elif defined(DUK_F_QNX)
512 #if defined(DUK_F_QNX) && defined(DUK_COMPILING_DUKTAPE)
514 #define _XOPEN_SOURCE 600
515 #define _POSIX_C_SOURCE 200112L
518 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
519 #define DUK_USE_DATE_TZO_GMTIME_R
520 #define DUK_USE_DATE_PRS_STRPTIME
521 #define DUK_USE_DATE_FMT_STRFTIME
522 #include <sys/types.h>
523 #include <sys/param.h>
524 #include <sys/time.h>
527 #define DUK_USE_OS_STRING "qnx"
528 #elif defined(DUK_F_TINSPIRE)
530 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
531 #define DUK_USE_DATE_TZO_GMTIME_R
532 #define DUK_USE_DATE_PRS_STRPTIME
533 #define DUK_USE_DATE_FMT_STRFTIME
534 #include <sys/types.h>
535 #include <sys/param.h>
536 #include <sys/time.h>
539 #define DUK_USE_OS_STRING "tinspire"
540 #elif defined(DUK_F_EMSCRIPTEN)
542 #if defined(DUK_COMPILING_DUKTAPE)
543 #if !defined(_POSIX_C_SOURCE)
544 #define _POSIX_C_SOURCE 200809L
546 #if !defined(_GNU_SOURCE)
549 #if !defined(_XOPEN_SOURCE)
550 #define _XOPEN_SOURCE
554 #include <sys/types.h>
555 #if defined(DUK_F_BCC)
560 #include <sys/param.h>
561 #include <sys/time.h>
565 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
566 #define DUK_USE_DATE_TZO_GMTIME_R
567 #define DUK_USE_DATE_PRS_STRPTIME
568 #define DUK_USE_DATE_FMT_STRFTIME
570 #define DUK_USE_OS_STRING "emscripten"
571 #elif defined(DUK_F_LINUX)
573 #if defined(DUK_COMPILING_DUKTAPE)
574 #if !defined(_POSIX_C_SOURCE)
575 #define _POSIX_C_SOURCE 200809L
577 #if !defined(_GNU_SOURCE)
580 #if !defined(_XOPEN_SOURCE)
581 #define _XOPEN_SOURCE
585 #include <sys/types.h>
586 #if defined(DUK_F_BCC)
592 #include <sys/param.h>
593 #include <sys/time.h>
596 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
597 #define DUK_USE_DATE_TZO_GMTIME_R
598 #define DUK_USE_DATE_PRS_STRPTIME
599 #define DUK_USE_DATE_FMT_STRFTIME
601 #define DUK_USE_OS_STRING "linux"
602 #elif defined(DUK_F_SUN)
604 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
605 #define DUK_USE_DATE_TZO_GMTIME_R
606 #define DUK_USE_DATE_PRS_STRPTIME
607 #define DUK_USE_DATE_FMT_STRFTIME
609 #include <sys/types.h>
610 #include <ast/endian.h>
611 #include <sys/param.h>
612 #include <sys/time.h>
615 #define DUK_USE_OS_STRING "solaris"
616 #elif defined(DUK_F_POSIX)
618 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
619 #define DUK_USE_DATE_TZO_GMTIME_R
620 #define DUK_USE_DATE_PRS_STRPTIME
621 #define DUK_USE_DATE_FMT_STRFTIME
622 #include <sys/types.h>
624 #include <sys/param.h>
625 #include <sys/time.h>
628 #define DUK_USE_OS_STRING "posix"
629 #elif defined(DUK_F_CYGWIN)
632 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
633 #define DUK_USE_DATE_TZO_GMTIME_R
634 #define DUK_USE_DATE_FMT_STRFTIME
635 #include <sys/types.h>
637 #include <sys/param.h>
638 #include <sys/time.h>
641 #define DUK_JMPBUF_TYPE jmp_buf
642 #define DUK_SETJMP(jb) _setjmp((jb))
643 #define DUK_LONGJMP(jb) _longjmp((jb), 1)
645 #define DUK_USE_OS_STRING "windows"
646 #elif defined(DUK_F_UNIX)
648 #define DUK_USE_DATE_NOW_GETTIMEOFDAY
649 #define DUK_USE_DATE_TZO_GMTIME_R
650 #define DUK_USE_DATE_PRS_STRPTIME
651 #define DUK_USE_DATE_FMT_STRFTIME
653 #include <sys/time.h>
654 #define DUK_USE_OS_STRING "unknown"
660 #define DUK_USE_DATE_NOW_TIME
665 #define DUK_USE_DATE_TZO_GMTIME
668 #undef DUK_USE_DATE_PRS_STRPTIME
669 #undef DUK_USE_DATE_FMT_STRFTIME
674 #define DUK_USE_OS_STRING "unknown"
690 #if defined(DUK_F_NO_STDINT_H)
700 #if defined(DUK_F_CPP)
708 #if defined(DUK_F_X86)
710 #define DUK_USE_ARCH_STRING "x86"
711 #if !defined(DUK_USE_BYTEORDER)
712 #define DUK_USE_BYTEORDER 1
717 #if !defined(DUK_USE_ALIGN_BY)
718 #define DUK_USE_ALIGN_BY 1
720 #define DUK_USE_PACKED_TVAL
721 #define DUK_F_PACKED_TVAL_PROVIDED
722 #elif defined(DUK_F_X64)
724 #define DUK_USE_ARCH_STRING "x64"
725 #if !defined(DUK_USE_BYTEORDER)
726 #define DUK_USE_BYTEORDER 1
731 #if !defined(DUK_USE_ALIGN_BY)
732 #define DUK_USE_ALIGN_BY 1
734 #undef DUK_USE_PACKED_TVAL
735 #define DUK_F_PACKED_TVAL_PROVIDED
736 #elif defined(DUK_F_X32)
738 #define DUK_USE_ARCH_STRING "x32"
739 #if !defined(DUK_USE_BYTEORDER)
740 #define DUK_USE_BYTEORDER 1
745 #if !defined(DUK_USE_ALIGN_BY)
746 #define DUK_USE_ALIGN_BY 1
748 #define DUK_USE_PACKED_TVAL
749 #define DUK_F_PACKED_TVAL_PROVIDED
750 #elif defined(DUK_F_ARM32)
752 #define DUK_USE_ARCH_STRING "arm32"
754 #if !defined(DUK_USE_ALIGN_BY)
755 #define DUK_USE_ALIGN_BY 4
757 #define DUK_USE_PACKED_TVAL
758 #define DUK_F_PACKED_TVAL_PROVIDED
759 #elif defined(DUK_F_ARM64)
761 #define DUK_USE_ARCH_STRING "arm64"
763 #if !defined(DUK_USE_ALIGN_BY)
764 #define DUK_USE_ALIGN_BY 8
766 #undef DUK_USE_PACKED_TVAL
767 #define DUK_F_PACKED_TVAL_PROVIDED
768 #elif defined(DUK_F_MIPS32)
770 #define DUK_USE_ARCH_STRING "mips32"
776 #if !defined(DUK_USE_ALIGN_BY)
777 #define DUK_USE_ALIGN_BY 4
779 #define DUK_USE_PACKED_TVAL
780 #define DUK_F_PACKED_TVAL_PROVIDED
781 #elif defined(DUK_F_MIPS64)
783 #define DUK_USE_ARCH_STRING "mips64"
788 #if !defined(DUK_USE_ALIGN_BY)
789 #define DUK_USE_ALIGN_BY 8
791 #undef DUK_USE_PACKED_TVAL
792 #define DUK_F_PACKED_TVAL_PROVIDED
793 #elif defined(DUK_F_PPC32)
795 #define DUK_USE_ARCH_STRING "ppc32"
796 #if !defined(DUK_USE_BYTEORDER)
797 #define DUK_USE_BYTEORDER 3
799 #if !defined(DUK_USE_ALIGN_BY)
800 #define DUK_USE_ALIGN_BY 8
802 #define DUK_USE_PACKED_TVAL
803 #define DUK_F_PACKED_TVAL_PROVIDED
804 #elif defined(DUK_F_PPC64)
806 #define DUK_USE_ARCH_STRING "ppc64"
807 #if !defined(DUK_USE_BYTEORDER)
808 #define DUK_USE_BYTEORDER 3
810 #if !defined(DUK_USE_ALIGN_BY)
811 #define DUK_USE_ALIGN_BY 8
813 #undef DUK_USE_PACKED_TVAL
814 #define DUK_F_PACKED_TVAL_PROVIDED
815 #elif defined(DUK_F_SPARC32)
817 #define DUK_USE_ARCH_STRING "sparc32"
819 #if !defined(DUK_USE_ALIGN_BY)
820 #define DUK_USE_ALIGN_BY 8
822 #define DUK_USE_PACKED_TVAL
823 #define DUK_F_PACKED_TVAL_PROVIDED
824 #elif defined(DUK_F_SPARC64)
826 #define DUK_USE_ARCH_STRING "sparc64"
828 #if !defined(DUK_USE_ALIGN_BY)
829 #define DUK_USE_ALIGN_BY 8
831 #undef DUK_USE_PACKED_TVAL
832 #define DUK_F_PACKED_TVAL_PROVIDED
833 #elif defined(DUK_F_SUPERH)
835 #define DUK_USE_ARCH_STRING "sh"
840 #if !defined(DUK_USE_ALIGN_BY)
841 #define DUK_USE_ALIGN_BY 4
843 #define DUK_USE_PACKED_TVAL
844 #define DUK_F_PACKED_TVAL_PROVIDED
845 #elif defined(DUK_F_M68K)
847 #define DUK_USE_ARCH_STRING "m68k"
848 #if !defined(DUK_USE_BYTEORDER)
849 #define DUK_USE_BYTEORDER 3
851 #if !defined(DUK_USE_ALIGN_BY)
852 #define DUK_USE_ALIGN_BY 8
854 #define DUK_USE_PACKED_TVAL
855 #define DUK_F_PACKED_TVAL_PROVIDED
856 #elif defined(DUK_F_EMSCRIPTEN)
858 #define DUK_USE_ARCH_STRING "emscripten"
859 #if !defined(DUK_USE_BYTEORDER)
860 #define DUK_USE_BYTEORDER 1
862 #if !defined(DUK_USE_ALIGN_BY)
863 #define DUK_USE_ALIGN_BY 8
865 #undef DUK_USE_PACKED_TVAL
866 #define DUK_F_PACKED_TVAL_PROVIDED
870 #define DUK_USE_ARCH_STRING "generic"
878 #if defined(DUK_F_CLANG)
880 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
882 #define DUK_VA_COPY(dest,src) va_copy(dest,src)
885 #define DUK_VA_COPY(dest,src) __va_copy(dest,src)
888 #define DUK_NORETURN(decl) decl __attribute__((noreturn))
890 #if defined(__clang__) && defined(__has_builtin)
891 #if __has_builtin(__builtin_unreachable)
892 #define DUK_UNREACHABLE() do { __builtin_unreachable(); } while (0)
896 #define DUK_USE_BRANCH_HINTS
897 #define DUK_LIKELY(x) __builtin_expect((x), 1)
898 #define DUK_UNLIKELY(x) __builtin_expect((x), 0)
899 #if defined(__clang__) && defined(__has_builtin)
900 #if __has_builtin(__builtin_unpredictable)
901 #define DUK_UNPREDICTABLE(x) __builtin_unpredictable((x))
905 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
906 #define DUK_NOINLINE __attribute__((noinline))
907 #define DUK_INLINE inline
908 #define DUK_ALWAYS_INLINE inline __attribute__((always_inline))
911 #if defined(DUK_F_DLL_BUILD) && defined(DUK_F_WINDOWS)
915 #if defined(DUK_COMPILING_DUKTAPE)
916 #define DUK_EXTERNAL_DECL extern __declspec(dllexport)
917 #define DUK_EXTERNAL __declspec(dllexport)
919 #define DUK_EXTERNAL_DECL extern __declspec(dllimport)
920 #define DUK_EXTERNAL should_not_happen
922 #if defined(DUK_SINGLE_FILE)
923 #define DUK_INTERNAL_DECL static
924 #define DUK_INTERNAL static
926 #define DUK_INTERNAL_DECL extern
929 #define DUK_LOCAL_DECL static
930 #define DUK_LOCAL static
932 #define DUK_EXTERNAL_DECL __attribute__ ((visibility("default"))) extern
933 #define DUK_EXTERNAL __attribute__ ((visibility("default")))
934 #if defined(DUK_SINGLE_FILE)
935 #if (defined(DUK_F_GCC_VERSION) && DUK_F_GCC_VERSION >= 30101) || defined(DUK_F_CLANG)
941 #define DUK_INTERNAL_DECL static __attribute__ ((unused))
942 #define DUK_INTERNAL static __attribute__ ((unused))
944 #define DUK_INTERNAL_DECL static
945 #define DUK_INTERNAL static
948 #if (defined(DUK_F_GCC_VERSION) && DUK_F_GCC_VERSION >= 30101) || defined(DUK_F_CLANG)
949 #define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) __attribute__ ((unused)) extern
950 #define DUK_INTERNAL __attribute__ ((visibility("hidden"))) __attribute__ ((unused))
952 #define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) extern
953 #define DUK_INTERNAL __attribute__ ((visibility("hidden")))
956 #define DUK_LOCAL_DECL static
957 #define DUK_LOCAL static
960 #if defined(DUK_F_CPP)
961 #define DUK_USE_COMPILER_STRING "clang"
963 #define DUK_USE_COMPILER_STRING "clang"
966 #undef DUK_USE_VARIADIC_MACROS
967 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
968 #define DUK_USE_VARIADIC_MACROS
971 #define DUK_USE_UNION_INITIALIZERS
973 #undef DUK_USE_FLEX_C99
974 #undef DUK_USE_FLEX_ZEROSIZE
975 #undef DUK_USE_FLEX_ONESIZE
976 #if defined(DUK_F_C99)
977 #define DUK_USE_FLEX_C99
979 #define DUK_USE_FLEX_ZEROSIZE
982 #undef DUK_USE_GCC_PRAGMAS
983 #define DUK_USE_PACK_CLANG_ATTR
984 #elif defined(DUK_F_GCC)
986 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
988 #define DUK_VA_COPY(dest,src) va_copy(dest,src)
991 #define DUK_VA_COPY(dest,src) __va_copy(dest,src)
994 #if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 20500L)
996 #define DUK_NORETURN(decl) decl __attribute__((noreturn))
999 #if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40500L)
1001 #define DUK_UNREACHABLE() do { __builtin_unreachable(); } while (0)
1004 #define DUK_USE_BRANCH_HINTS
1005 #if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40500L)
1009 #define DUK_LIKELY(x) __builtin_expect((x), 1)
1010 #define DUK_UNLIKELY(x) __builtin_expect((x), 0)
1014 #if (defined(DUK_F_C99) || defined(DUK_F_CPP11)) && \
1015 defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 30101)
1016 #define DUK_NOINLINE __attribute__((noinline))
1017 #define DUK_INLINE inline
1018 #define DUK_ALWAYS_INLINE inline __attribute__((always_inline))
1021 #if defined(DUK_F_DLL_BUILD) && defined(DUK_F_WINDOWS)
1025 #if defined(DUK_COMPILING_DUKTAPE)
1026 #define DUK_EXTERNAL_DECL extern __declspec(dllexport)
1027 #define DUK_EXTERNAL __declspec(dllexport)
1029 #define DUK_EXTERNAL_DECL extern __declspec(dllimport)
1030 #define DUK_EXTERNAL should_not_happen
1032 #if defined(DUK_SINGLE_FILE)
1033 #define DUK_INTERNAL_DECL static
1034 #define DUK_INTERNAL static
1036 #define DUK_INTERNAL_DECL extern
1037 #define DUK_INTERNAL
1039 #define DUK_LOCAL_DECL static
1040 #define DUK_LOCAL static
1041 #elif defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40000)
1042 #define DUK_EXTERNAL_DECL __attribute__ ((visibility("default"))) extern
1043 #define DUK_EXTERNAL __attribute__ ((visibility("default")))
1044 #if defined(DUK_SINGLE_FILE)
1045 #if (defined(DUK_F_GCC_VERSION) && DUK_F_GCC_VERSION >= 30101) || defined(DUK_F_CLANG)
1051 #define DUK_INTERNAL_DECL static __attribute__ ((unused))
1052 #define DUK_INTERNAL static __attribute__ ((unused))
1054 #define DUK_INTERNAL_DECL static
1055 #define DUK_INTERNAL static
1058 #if (defined(DUK_F_GCC_VERSION) && DUK_F_GCC_VERSION >= 30101) || defined(DUK_F_CLANG)
1059 #define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) __attribute__ ((unused)) extern
1060 #define DUK_INTERNAL __attribute__ ((visibility("hidden"))) __attribute__ ((unused))
1062 #define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) extern
1063 #define DUK_INTERNAL __attribute__ ((visibility("hidden")))
1066 #define DUK_LOCAL_DECL static
1067 #define DUK_LOCAL static
1070 #if defined(DUK_F_MINGW)
1071 #if defined(DUK_F_CPP)
1072 #define DUK_USE_COMPILER_STRING "mingw++"
1074 #define DUK_USE_COMPILER_STRING "mingw"
1077 #if defined(DUK_F_CPP)
1078 #define DUK_USE_COMPILER_STRING "g++"
1080 #define DUK_USE_COMPILER_STRING "gcc"
1084 #undef DUK_USE_VARIADIC_MACROS
1085 #if defined(DUK_F_C99) || (defined(DUK_F_CPP11) && defined(__GNUC__))
1086 #define DUK_USE_VARIADIC_MACROS
1089 #define DUK_USE_UNION_INITIALIZERS
1091 #undef DUK_USE_FLEX_C99
1092 #undef DUK_USE_FLEX_ZEROSIZE
1093 #undef DUK_USE_FLEX_ONESIZE
1094 #if defined(DUK_F_C99)
1095 #define DUK_USE_FLEX_C99
1097 #define DUK_USE_FLEX_ZEROSIZE
1100 #if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40600)
1101 #define DUK_USE_GCC_PRAGMAS
1103 #undef DUK_USE_GCC_PRAGMAS
1106 #define DUK_USE_PACK_GCC_ATTR
1107 #elif defined(DUK_F_MSVC)
1110 #define DUK_NORETURN(decl) __declspec(noreturn) decl
1114 #undef DUK_USE_BRANCH_HINTS
1119 #if defined(DUK_F_DLL_BUILD) && defined(DUK_F_WINDOWS)
1123 #if defined(DUK_COMPILING_DUKTAPE)
1124 #define DUK_EXTERNAL_DECL extern __declspec(dllexport)
1125 #define DUK_EXTERNAL __declspec(dllexport)
1127 #define DUK_EXTERNAL_DECL extern __declspec(dllimport)
1128 #define DUK_EXTERNAL should_not_happen
1130 #if defined(DUK_SINGLE_FILE)
1131 #define DUK_INTERNAL_DECL static
1132 #define DUK_INTERNAL static
1134 #define DUK_INTERNAL_DECL extern
1135 #define DUK_INTERNAL
1137 #define DUK_LOCAL_DECL static
1138 #define DUK_LOCAL static
1141 #if defined(DUK_F_CPP)
1142 #define DUK_USE_COMPILER_STRING "msvc++"
1144 #define DUK_USE_COMPILER_STRING "msvc"
1147 #undef DUK_USE_VARIADIC_MACROS
1148 #if defined(DUK_F_C99)
1149 #define DUK_USE_VARIADIC_MACROS
1150 #elif defined(_MSC_VER) && (_MSC_VER >= 1400)
1152 #define DUK_USE_VARIADIC_MACROS
1155 #undef DUK_USE_UNION_INITIALIZERS
1156 #if defined(_MSC_VER) && (_MSC_VER >= 1800)
1163 #define DUK_USE_UNION_INITIALIZERS
1166 #undef DUK_USE_FLEX_C99
1167 #undef DUK_USE_FLEX_ZEROSIZE
1168 #undef DUK_USE_FLEX_ONESIZE
1169 #if defined(DUK_F_C99)
1170 #define DUK_USE_FLEX_C99
1172 #define DUK_USE_FLEX_ZEROSIZE
1175 #undef DUK_USE_GCC_PRAGMAS
1177 #define DUK_USE_PACK_MSVC_PRAGMA
1182 #if defined(_MSC_VER) && (_MSC_VER >= 1500)
1183 #define DUK_NOINLINE __declspec(noinline)
1184 #define DUK_INLINE __inline
1185 #define DUK_ALWAYS_INLINE __forceinline
1188 #if defined(_MSC_VER) && (_MSC_VER >= 1900)
1189 #define DUK_SNPRINTF snprintf
1190 #define DUK_VSNPRINTF vsnprintf
1196 #define DUK_SNPRINTF _snprintf
1197 #define DUK_VSNPRINTF _vsnprintf
1201 #define DUK_UNREF(x) do { __pragma(warning(suppress:4100 4101 4550 4551)) (x); } while (0)
1202 #elif defined(DUK_F_EMSCRIPTEN)
1204 #define DUK_NORETURN(decl) decl __attribute__((noreturn))
1206 #if defined(__clang__) && defined(__has_builtin)
1207 #if __has_builtin(__builtin_unreachable)
1208 #define DUK_UNREACHABLE() do { __builtin_unreachable(); } while (0)
1212 #define DUK_USE_BRANCH_HINTS
1213 #define DUK_LIKELY(x) __builtin_expect((x), 1)
1214 #define DUK_UNLIKELY(x) __builtin_expect((x), 0)
1215 #if defined(__clang__) && defined(__has_builtin)
1216 #if __has_builtin(__builtin_unpredictable)
1217 #define DUK_UNPREDICTABLE(x) __builtin_unpredictable((x))
1221 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
1222 #define DUK_NOINLINE __attribute__((noinline))
1223 #define DUK_INLINE inline
1224 #define DUK_ALWAYS_INLINE inline __attribute__((always_inline))
1227 #define DUK_EXTERNAL_DECL __attribute__ ((visibility("default"))) extern
1228 #define DUK_EXTERNAL __attribute__ ((visibility("default")))
1229 #if defined(DUK_SINGLE_FILE)
1230 #if (defined(DUK_F_GCC_VERSION) && DUK_F_GCC_VERSION >= 30101) || defined(DUK_F_CLANG)
1236 #define DUK_INTERNAL_DECL static __attribute__ ((unused))
1237 #define DUK_INTERNAL static __attribute__ ((unused))
1239 #define DUK_INTERNAL_DECL static
1240 #define DUK_INTERNAL static
1243 #if (defined(DUK_F_GCC_VERSION) && DUK_F_GCC_VERSION >= 30101) || defined(DUK_F_CLANG)
1244 #define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) __attribute__ ((unused)) extern
1245 #define DUK_INTERNAL __attribute__ ((visibility("hidden"))) __attribute__ ((unused))
1247 #define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) extern
1248 #define DUK_INTERNAL __attribute__ ((visibility("hidden")))
1251 #define DUK_LOCAL_DECL static
1252 #define DUK_LOCAL static
1254 #define DUK_USE_COMPILER_STRING "emscripten"
1256 #undef DUK_USE_VARIADIC_MACROS
1257 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
1258 #define DUK_USE_VARIADIC_MACROS
1261 #define DUK_USE_UNION_INITIALIZERS
1263 #undef DUK_USE_FLEX_C99
1264 #undef DUK_USE_FLEX_ZEROSIZE
1265 #undef DUK_USE_FLEX_ONESIZE
1266 #if defined(DUK_F_C99)
1267 #define DUK_USE_FLEX_C99
1269 #define DUK_USE_FLEX_ZEROSIZE
1272 #undef DUK_USE_GCC_PRAGMAS
1273 #define DUK_USE_PACK_CLANG_ATTR
1274 #elif defined(DUK_F_TINYC)
1276 #undef DUK_USE_BRANCH_HINTS
1278 #if defined(DUK_F_CPP)
1279 #define DUK_USE_COMPILER_STRING "tinyc++"
1281 #define DUK_USE_COMPILER_STRING "tinyc"
1285 #define DUK_USE_VARIADIC_MACROS
1287 #define DUK_USE_UNION_INITIALIZERS
1290 #define DUK_USE_FLEX_ONESIZE
1293 #define DUK_USE_PACK_DUMMY_MEMBER
1294 #elif defined(DUK_F_VBCC)
1296 #undef DUK_USE_BRANCH_HINTS
1298 #if defined(DUK_F_CPP)
1299 #define DUK_USE_COMPILER_STRING "vbcc-c++"
1301 #define DUK_USE_COMPILER_STRING "vbcc"
1304 #undef DUK_USE_VARIADIC_MACROS
1305 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
1306 #define DUK_USE_VARIADIC_MACROS
1312 #undef DUK_USE_UNION_INITIALIZERS
1313 #if defined(DUK_F_C99)
1314 #define DUK_USE_UNION_INITIALIZERS
1317 #define DUK_USE_FLEX_ZEROSIZE
1318 #define DUK_USE_PACK_DUMMY_MEMBER
1319 #elif defined(DUK_F_BCC)
1321 #undef DUK_USE_BRANCH_HINTS
1323 #if defined(DUK_F_CPP)
1324 #define DUK_USE_COMPILER_STRING "bcc++"
1326 #define DUK_USE_COMPILER_STRING "bcc"
1330 #undef DUK_USE_VARIADIC_MACROS
1333 #undef DUK_USE_UNION_INITIALIZERS
1336 #define DUK_USE_FLEX_ONESIZE
1339 #define DUK_USE_PACK_DUMMY_MEMBER
1342 #if !defined(DUK_USE_BYTEORDER)
1343 #define DUK_USE_BYTEORDER 1
1347 #undef DUK_USE_BRANCH_HINTS
1349 #if defined(DUK_F_CPP)
1350 #define DUK_USE_COMPILER_STRING "generic-c++"
1352 #define DUK_USE_COMPILER_STRING "generic"
1355 #undef DUK_USE_VARIADIC_MACROS
1356 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
1357 #define DUK_USE_VARIADIC_MACROS
1361 #undef DUK_USE_UNION_INITIALIZERS
1362 #if defined(DUK_F_C99)
1363 #define DUK_USE_UNION_INITIALIZERS
1367 #define DUK_USE_FLEX_ONESIZE
1370 #define DUK_USE_PACK_DUMMY_MEMBER
1374 #if defined(__UCLIBC__)
1375 #define DUK_F_UCLIBC
1406 #if !defined(INT_MAX)
1407 #error INT_MAX not defined
1413 #if defined(INT_MAX) && defined(INT_MIN)
1414 #if INT_MAX != -(INT_MIN + 1)
1415 #error platform does not seem complement of two
1418 #error cannot check complement of two
1424 #if defined(DUK_F_X86) || defined(DUK_F_X32) || \
1425 defined(DUK_F_M68K) || defined(DUK_F_PPC32) || \
1426 defined(DUK_F_BCC) || \
1427 (defined(__WORDSIZE) && (__WORDSIZE == 32))
1428 #define DUK_F_32BIT_PTRS
1429 #elif defined(DUK_F_X64) || \
1430 (defined(__WORDSIZE) && (__WORDSIZE == 64))
1431 #define DUK_F_64BIT_PTRS
1437 #undef DUK_F_HAVE_INTTYPES
1438 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
1439 !(defined(DUK_F_AMIGAOS) && defined(DUK_F_VBCC))
1441 #define DUK_F_HAVE_INTTYPES
1442 #elif defined(__cplusplus) && (__cplusplus >= 201103L)
1444 #define DUK_F_HAVE_INTTYPES
1450 #if defined(DUK_F_HAVE_INTTYPES)
1453 #define DUK_F_HAVE_64BIT
1454 #include <inttypes.h>
1456 typedef uint8_t duk_uint8_t;
1457 typedef int8_t duk_int8_t;
1458 typedef uint16_t duk_uint16_t;
1459 typedef int16_t duk_int16_t;
1460 typedef uint32_t duk_uint32_t;
1461 typedef int32_t duk_int32_t;
1462 typedef uint64_t duk_uint64_t;
1463 typedef int64_t duk_int64_t;
1464 typedef uint_least8_t duk_uint_least8_t;
1465 typedef int_least8_t duk_int_least8_t;
1466 typedef uint_least16_t duk_uint_least16_t;
1467 typedef int_least16_t duk_int_least16_t;
1468 typedef uint_least32_t duk_uint_least32_t;
1469 typedef int_least32_t duk_int_least32_t;
1470 typedef uint_least64_t duk_uint_least64_t;
1471 typedef int_least64_t duk_int_least64_t;
1472 typedef uint_fast8_t duk_uint_fast8_t;
1473 typedef int_fast8_t duk_int_fast8_t;
1474 typedef uint_fast16_t duk_uint_fast16_t;
1475 typedef int_fast16_t duk_int_fast16_t;
1476 typedef uint_fast32_t duk_uint_fast32_t;
1477 typedef int_fast32_t duk_int_fast32_t;
1478 typedef uint_fast64_t duk_uint_fast64_t;
1479 typedef int_fast64_t duk_int_fast64_t;
1480 typedef uintptr_t duk_uintptr_t;
1481 typedef intptr_t duk_intptr_t;
1482 typedef uintmax_t duk_uintmax_t;
1483 typedef intmax_t duk_intmax_t;
1485 #define DUK_UINT8_MIN 0
1486 #define DUK_UINT8_MAX UINT8_MAX
1487 #define DUK_INT8_MIN INT8_MIN
1488 #define DUK_INT8_MAX INT8_MAX
1489 #define DUK_UINT_LEAST8_MIN 0
1490 #define DUK_UINT_LEAST8_MAX UINT_LEAST8_MAX
1491 #define DUK_INT_LEAST8_MIN INT_LEAST8_MIN
1492 #define DUK_INT_LEAST8_MAX INT_LEAST8_MAX
1493 #define DUK_UINT_FAST8_MIN 0
1494 #define DUK_UINT_FAST8_MAX UINT_FAST8_MAX
1495 #define DUK_INT_FAST8_MIN INT_FAST8_MIN
1496 #define DUK_INT_FAST8_MAX INT_FAST8_MAX
1497 #define DUK_UINT16_MIN 0
1498 #define DUK_UINT16_MAX UINT16_MAX
1499 #define DUK_INT16_MIN INT16_MIN
1500 #define DUK_INT16_MAX INT16_MAX
1501 #define DUK_UINT_LEAST16_MIN 0
1502 #define DUK_UINT_LEAST16_MAX UINT_LEAST16_MAX
1503 #define DUK_INT_LEAST16_MIN INT_LEAST16_MIN
1504 #define DUK_INT_LEAST16_MAX INT_LEAST16_MAX
1505 #define DUK_UINT_FAST16_MIN 0
1506 #define DUK_UINT_FAST16_MAX UINT_FAST16_MAX
1507 #define DUK_INT_FAST16_MIN INT_FAST16_MIN
1508 #define DUK_INT_FAST16_MAX INT_FAST16_MAX
1509 #define DUK_UINT32_MIN 0
1510 #define DUK_UINT32_MAX UINT32_MAX
1511 #define DUK_INT32_MIN INT32_MIN
1512 #define DUK_INT32_MAX INT32_MAX
1513 #define DUK_UINT_LEAST32_MIN 0
1514 #define DUK_UINT_LEAST32_MAX UINT_LEAST32_MAX
1515 #define DUK_INT_LEAST32_MIN INT_LEAST32_MIN
1516 #define DUK_INT_LEAST32_MAX INT_LEAST32_MAX
1517 #define DUK_UINT_FAST32_MIN 0
1518 #define DUK_UINT_FAST32_MAX UINT_FAST32_MAX
1519 #define DUK_INT_FAST32_MIN INT_FAST32_MIN
1520 #define DUK_INT_FAST32_MAX INT_FAST32_MAX
1521 #define DUK_UINT64_MIN 0
1522 #define DUK_UINT64_MAX UINT64_MAX
1523 #define DUK_INT64_MIN INT64_MIN
1524 #define DUK_INT64_MAX INT64_MAX
1525 #define DUK_UINT_LEAST64_MIN 0
1526 #define DUK_UINT_LEAST64_MAX UINT_LEAST64_MAX
1527 #define DUK_INT_LEAST64_MIN INT_LEAST64_MIN
1528 #define DUK_INT_LEAST64_MAX INT_LEAST64_MAX
1529 #define DUK_UINT_FAST64_MIN 0
1530 #define DUK_UINT_FAST64_MAX UINT_FAST64_MAX
1531 #define DUK_INT_FAST64_MIN INT_FAST64_MIN
1532 #define DUK_INT_FAST64_MAX INT_FAST64_MAX
1534 #define DUK_UINTPTR_MIN 0
1535 #define DUK_UINTPTR_MAX UINTPTR_MAX
1536 #define DUK_INTPTR_MIN INTPTR_MIN
1537 #define DUK_INTPTR_MAX INTPTR_MAX
1539 #define DUK_UINTMAX_MIN 0
1540 #define DUK_UINTMAX_MAX UINTMAX_MAX
1541 #define DUK_INTMAX_MIN INTMAX_MIN
1542 #define DUK_INTMAX_MAX INTMAX_MAX
1544 #define DUK_SIZE_MIN 0
1545 #define DUK_SIZE_MAX SIZE_MAX
1546 #undef DUK_SIZE_MAX_COMPUTED
1561 #if (defined(CHAR_BIT) && (CHAR_BIT == 8)) || \
1562 (defined(UCHAR_MAX) && (UCHAR_MAX == 255))
1563 typedef unsigned char duk_uint8_t;
1564 typedef signed char duk_int8_t;
1566 #error cannot detect 8-bit type
1569 #if defined(USHRT_MAX) && (USHRT_MAX == 65535UL)
1570 typedef unsigned short duk_uint16_t;
1571 typedef signed short duk_int16_t;
1572 #elif defined(UINT_MAX) && (UINT_MAX == 65535UL)
1574 typedef unsigned int duk_uint16_t;
1575 typedef signed int duk_int16_t;
1577 #error cannot detect 16-bit type
1580 #if defined(UINT_MAX) && (UINT_MAX == 4294967295UL)
1581 typedef unsigned int duk_uint32_t;
1582 typedef signed int duk_int32_t;
1583 #elif defined(ULONG_MAX) && (ULONG_MAX == 4294967295UL)
1585 typedef unsigned long duk_uint32_t;
1586 typedef signed long duk_int32_t;
1588 #error cannot detect 32-bit type
1604 #undef DUK_F_HAVE_64BIT
1605 #if !defined(DUK_F_HAVE_64BIT) && defined(ULONG_MAX)
1606 #if (ULONG_MAX > 4294967295UL)
1607 #define DUK_F_HAVE_64BIT
1608 typedef unsigned long duk_uint64_t;
1609 typedef signed long duk_int64_t;
1612 #if !defined(DUK_F_HAVE_64BIT) && defined(ULLONG_MAX)
1613 #if (ULLONG_MAX > 4294967295UL)
1614 #define DUK_F_HAVE_64BIT
1615 typedef unsigned long long duk_uint64_t;
1616 typedef signed long long duk_int64_t;
1619 #if !defined(DUK_F_HAVE_64BIT) && defined(__ULONG_LONG_MAX__)
1620 #if (__ULONG_LONG_MAX__ > 4294967295UL)
1621 #define DUK_F_HAVE_64BIT
1622 typedef unsigned long long duk_uint64_t;
1623 typedef signed long long duk_int64_t;
1626 #if !defined(DUK_F_HAVE_64BIT) && defined(__LONG_LONG_MAX__)
1627 #if (__LONG_LONG_MAX__ > 2147483647L)
1628 #define DUK_F_HAVE_64BIT
1629 typedef unsigned long long duk_uint64_t;
1630 typedef signed long long duk_int64_t;
1633 #if !defined(DUK_F_HAVE_64BIT) && \
1634 (defined(DUK_F_MINGW) || defined(DUK_F_MSVC))
1636 #define DUK_F_HAVE_64BIT
1637 typedef unsigned long duk_uint64_t;
1638 typedef signed long duk_int64_t;
1640 #if !defined(DUK_F_HAVE_64BIT)
1644 typedef duk_uint8_t duk_uint_least8_t;
1645 typedef duk_int8_t duk_int_least8_t;
1646 typedef duk_uint16_t duk_uint_least16_t;
1647 typedef duk_int16_t duk_int_least16_t;
1648 typedef duk_uint32_t duk_uint_least32_t;
1649 typedef duk_int32_t duk_int_least32_t;
1650 typedef duk_uint8_t duk_uint_fast8_t;
1651 typedef duk_int8_t duk_int_fast8_t;
1652 typedef duk_uint16_t duk_uint_fast16_t;
1653 typedef duk_int16_t duk_int_fast16_t;
1654 typedef duk_uint32_t duk_uint_fast32_t;
1655 typedef duk_int32_t duk_int_fast32_t;
1656 #if defined(DUK_F_HAVE_64BIT)
1657 typedef duk_uint64_t duk_uint_least64_t;
1658 typedef duk_int64_t duk_int_least64_t;
1659 typedef duk_uint64_t duk_uint_fast64_t;
1660 typedef duk_int64_t duk_int_fast64_t;
1662 #if defined(DUK_F_HAVE_64BIT)
1663 typedef duk_uint64_t duk_uintmax_t;
1664 typedef duk_int64_t duk_intmax_t;
1666 typedef duk_uint32_t duk_uintmax_t;
1667 typedef duk_int32_t duk_intmax_t;
1674 #define DUK_UINT8_MIN 0UL
1675 #define DUK_UINT8_MAX 0xffUL
1676 #define DUK_INT8_MIN (-0x80L)
1677 #define DUK_INT8_MAX 0x7fL
1678 #define DUK_UINT_LEAST8_MIN 0UL
1679 #define DUK_UINT_LEAST8_MAX 0xffUL
1680 #define DUK_INT_LEAST8_MIN (-0x80L)
1681 #define DUK_INT_LEAST8_MAX 0x7fL
1682 #define DUK_UINT_FAST8_MIN 0UL
1683 #define DUK_UINT_FAST8_MAX 0xffUL
1684 #define DUK_INT_FAST8_MIN (-0x80L)
1685 #define DUK_INT_FAST8_MAX 0x7fL
1686 #define DUK_UINT16_MIN 0UL
1687 #define DUK_UINT16_MAX 0xffffUL
1688 #define DUK_INT16_MIN (-0x7fffL - 1L)
1689 #define DUK_INT16_MAX 0x7fffL
1690 #define DUK_UINT_LEAST16_MIN 0UL
1691 #define DUK_UINT_LEAST16_MAX 0xffffUL
1692 #define DUK_INT_LEAST16_MIN (-0x7fffL - 1L)
1693 #define DUK_INT_LEAST16_MAX 0x7fffL
1694 #define DUK_UINT_FAST16_MIN 0UL
1695 #define DUK_UINT_FAST16_MAX 0xffffUL
1696 #define DUK_INT_FAST16_MIN (-0x7fffL - 1L)
1697 #define DUK_INT_FAST16_MAX 0x7fffL
1698 #define DUK_UINT32_MIN 0UL
1699 #define DUK_UINT32_MAX 0xffffffffUL
1700 #define DUK_INT32_MIN (-0x7fffffffL - 1L)
1701 #define DUK_INT32_MAX 0x7fffffffL
1702 #define DUK_UINT_LEAST32_MIN 0UL
1703 #define DUK_UINT_LEAST32_MAX 0xffffffffUL
1704 #define DUK_INT_LEAST32_MIN (-0x7fffffffL - 1L)
1705 #define DUK_INT_LEAST32_MAX 0x7fffffffL
1706 #define DUK_UINT_FAST32_MIN 0UL
1707 #define DUK_UINT_FAST32_MAX 0xffffffffUL
1708 #define DUK_INT_FAST32_MIN (-0x7fffffffL - 1L)
1709 #define DUK_INT_FAST32_MAX 0x7fffffffL
1715 #if defined(DUK_F_HAVE_64BIT)
1716 #define DUK_UINT64_MIN ((duk_uint64_t) 0)
1717 #define DUK_UINT64_MAX ((duk_uint64_t) -1)
1718 #define DUK_INT64_MIN ((duk_int64_t) (~(DUK_UINT64_MAX >> 1)))
1719 #define DUK_INT64_MAX ((duk_int64_t) (DUK_UINT64_MAX >> 1))
1720 #define DUK_UINT_LEAST64_MIN DUK_UINT64_MIN
1721 #define DUK_UINT_LEAST64_MAX DUK_UINT64_MAX
1722 #define DUK_INT_LEAST64_MIN DUK_INT64_MIN
1723 #define DUK_INT_LEAST64_MAX DUK_INT64_MAX
1724 #define DUK_UINT_FAST64_MIN DUK_UINT64_MIN
1725 #define DUK_UINT_FAST64_MAX DUK_UINT64_MAX
1726 #define DUK_INT_FAST64_MIN DUK_INT64_MIN
1727 #define DUK_INT_FAST64_MAX DUK_INT64_MAX
1728 #define DUK_UINT64_MIN_COMPUTED
1729 #define DUK_UINT64_MAX_COMPUTED
1730 #define DUK_INT64_MIN_COMPUTED
1731 #define DUK_INT64_MAX_COMPUTED
1732 #define DUK_UINT_LEAST64_MIN_COMPUTED
1733 #define DUK_UINT_LEAST64_MAX_COMPUTED
1734 #define DUK_INT_LEAST64_MIN_COMPUTED
1735 #define DUK_INT_LEAST64_MAX_COMPUTED
1736 #define DUK_UINT_FAST64_MIN_COMPUTED
1737 #define DUK_UINT_FAST64_MAX_COMPUTED
1738 #define DUK_INT_FAST64_MIN_COMPUTED
1739 #define DUK_INT_FAST64_MAX_COMPUTED
1742 #if defined(DUK_F_HAVE_64BIT)
1743 #define DUK_UINTMAX_MIN DUK_UINT64_MIN
1744 #define DUK_UINTMAX_MAX DUK_UINT64_MAX
1745 #define DUK_INTMAX_MIN DUK_INT64_MIN
1746 #define DUK_INTMAX_MAX DUK_INT64_MAX
1747 #define DUK_UINTMAX_MIN_COMPUTED
1748 #define DUK_UINTMAX_MAX_COMPUTED
1749 #define DUK_INTMAX_MIN_COMPUTED
1750 #define DUK_INTMAX_MAX_COMPUTED
1752 #define DUK_UINTMAX_MIN 0UL
1753 #define DUK_UINTMAX_MAX 0xffffffffUL
1754 #define DUK_INTMAX_MIN (-0x7fffffffL - 1L)
1755 #define DUK_INTMAX_MAX 0x7fffffffL
1759 #if defined(DUK_F_32BIT_PTRS)
1760 typedef duk_int32_t duk_intptr_t;
1761 typedef duk_uint32_t duk_uintptr_t;
1762 #define DUK_UINTPTR_MIN DUK_UINT32_MIN
1763 #define DUK_UINTPTR_MAX DUK_UINT32_MAX
1764 #define DUK_INTPTR_MIN DUK_INT32_MIN
1765 #define DUK_INTPTR_MAX DUK_INT32_MAX
1766 #elif defined(DUK_F_64BIT_PTRS) && defined(DUK_F_HAVE_64BIT)
1767 typedef duk_int64_t duk_intptr_t;
1768 typedef duk_uint64_t duk_uintptr_t;
1769 #define DUK_UINTPTR_MIN DUK_UINT64_MIN
1770 #define DUK_UINTPTR_MAX DUK_UINT64_MAX
1771 #define DUK_INTPTR_MIN DUK_INT64_MIN
1772 #define DUK_INTPTR_MAX DUK_INT64_MAX
1773 #define DUK_UINTPTR_MIN_COMPUTED
1774 #define DUK_UINTPTR_MAX_COMPUTED
1775 #define DUK_INTPTR_MIN_COMPUTED
1776 #define DUK_INTPTR_MAX_COMPUTED
1778 #error cannot determine intptr type
1782 #undef DUK_SIZE_MAX_COMPUTED
1783 #if !defined(SIZE_MAX)
1784 #define DUK_SIZE_MAX_COMPUTED
1785 #define SIZE_MAX ((size_t) (-1))
1787 #define DUK_SIZE_MIN 0
1788 #define DUK_SIZE_MAX SIZE_MAX
1793 typedef size_t duk_size_t;
1794 typedef ptrdiff_t duk_ptrdiff_t;
1800 #if defined(UINT_MAX) && (UINT_MAX >= 0xffffffffUL)
1801 typedef int duk_int_t;
1802 typedef unsigned int duk_uint_t;
1803 #define DUK_INT_MIN INT_MIN
1804 #define DUK_INT_MAX INT_MAX
1805 #define DUK_UINT_MIN 0
1806 #define DUK_UINT_MAX UINT_MAX
1808 typedef duk_int_fast32_t duk_int_t;
1809 typedef duk_uint_fast32_t duk_uint_t;
1810 #define DUK_INT_MIN DUK_INT_FAST32_MIN
1811 #define DUK_INT_MAX DUK_INT_FAST32_MAX
1812 #define DUK_UINT_MIN DUK_UINT_FAST32_MIN
1813 #define DUK_UINT_MAX DUK_UINT_FAST32_MAX
1820 typedef duk_int_fast32_t duk_int_fast_t;
1821 typedef duk_uint_fast32_t duk_uint_fast_t;
1822 #define DUK_INT_FAST_MIN DUK_INT_FAST32_MIN
1823 #define DUK_INT_FAST_MAX DUK_INT_FAST32_MAX
1824 #define DUK_UINT_FAST_MIN DUK_UINT_FAST32_MIN
1825 #define DUK_UINT_FAST_MAX DUK_UINT_FAST32_MAX
1830 typedef int duk_small_int_t;
1831 typedef unsigned int duk_small_uint_t;
1832 #define DUK_SMALL_INT_MIN INT_MIN
1833 #define DUK_SMALL_INT_MAX INT_MAX
1834 #define DUK_SMALL_UINT_MIN 0
1835 #define DUK_SMALL_UINT_MAX UINT_MAX
1840 typedef duk_int_fast16_t duk_small_int_fast_t;
1841 typedef duk_uint_fast16_t duk_small_uint_fast_t;
1842 #define DUK_SMALL_INT_FAST_MIN DUK_INT_FAST16_MIN
1843 #define DUK_SMALL_INT_FAST_MAX DUK_INT_FAST16_MAX
1844 #define DUK_SMALL_UINT_FAST_MIN DUK_UINT_FAST16_MIN
1845 #define DUK_SMALL_UINT_FAST_MAX DUK_UINT_FAST16_MAX
1848 typedef duk_small_int_t duk_bool_t;
1849 #define DUK_BOOL_MIN DUK_SMALL_INT_MIN
1850 #define DUK_BOOL_MAX DUK_SMALL_INT_MAX
1853 typedef duk_int_t duk_idx_t;
1854 #define DUK_IDX_MIN DUK_INT_MIN
1855 #define DUK_IDX_MAX DUK_INT_MAX
1858 typedef duk_uint_t duk_uidx_t;
1859 #define DUK_UIDX_MIN DUK_UINT_MIN
1860 #define DUK_UIDX_MAX DUK_UINT_MAX
1865 typedef duk_uint_t duk_uarridx_t;
1866 #define DUK_UARRIDX_MIN DUK_UINT_MIN
1867 #define DUK_UARRIDX_MAX DUK_UINT_MAX
1873 typedef duk_small_int_t duk_ret_t;
1874 #define DUK_RET_MIN DUK_SMALL_INT_MIN
1875 #define DUK_RET_MAX DUK_SMALL_INT_MAX
1880 typedef duk_int_t duk_errcode_t;
1881 #define DUK_ERRCODE_MIN DUK_INT_MIN
1882 #define DUK_ERRCODE_MAX DUK_INT_MAX
1891 typedef duk_int_t duk_codepoint_t;
1892 typedef duk_uint_t duk_ucodepoint_t;
1893 #define DUK_CODEPOINT_MIN DUK_INT_MIN
1894 #define DUK_CODEPOINT_MAX DUK_INT_MAX
1895 #define DUK_UCODEPOINT_MIN DUK_UINT_MIN
1896 #define DUK_UCODEPOINT_MAX DUK_UINT_MAX
1899 typedef float duk_float_t;
1900 typedef double duk_double_t;
1907 #if !defined(DUK_SIZE_MAX)
1908 #error DUK_SIZE_MAX is undefined, probably missing SIZE_MAX
1909 #elif !defined(DUK_SIZE_MAX_COMPUTED)
1910 #if DUK_SIZE_MAX < 0xffffffffUL
1928 #if defined(DUK_F_HAVE_64BIT) && !defined(DUK_F_VBCC)
1929 #define DUK_USE_64BIT_OPS
1931 #undef DUK_USE_64BIT_OPS
1939 #if !defined(DUK_ABORT)
1940 #define DUK_ABORT abort
1943 #if !defined(DUK_SETJMP)
1944 #define DUK_JMPBUF_TYPE jmp_buf
1945 #define DUK_SETJMP(jb) setjmp((jb))
1946 #define DUK_LONGJMP(jb) longjmp((jb), 1)
1951 #define DUK_JMPBUF_TYPE sigjmp_buf
1952 #define DUK_SETJMP(jb) sigsetjmp((jb))
1953 #define DUK_LONGJMP(jb) siglongjmp((jb), 1)
1960 #if !defined(DUK_ANSI_MALLOC)
1961 #define DUK_ANSI_MALLOC malloc
1963 #if !defined(DUK_ANSI_REALLOC)
1964 #define DUK_ANSI_REALLOC realloc
1966 #if !defined(DUK_ANSI_CALLOC)
1967 #define DUK_ANSI_CALLOC calloc
1969 #if !defined(DUK_ANSI_FREE)
1970 #define DUK_ANSI_FREE free
1994 #if !defined(DUK_MEMCPY)
1995 #if defined(DUK_F_UCLIBC)
1999 #define DUK_MEMCPY memmove
2001 #define DUK_MEMCPY memcpy
2004 #if !defined(DUK_MEMMOVE)
2005 #define DUK_MEMMOVE memmove
2007 #if !defined(DUK_MEMCMP)
2008 #define DUK_MEMCMP memcmp
2010 #if !defined(DUK_MEMSET)
2011 #define DUK_MEMSET memset
2013 #if !defined(DUK_STRLEN)
2014 #define DUK_STRLEN strlen
2016 #if !defined(DUK_STRCMP)
2017 #define DUK_STRCMP strcmp
2019 #if !defined(DUK_STRNCMP)
2020 #define DUK_STRNCMP strncmp
2022 #if !defined(DUK_SPRINTF)
2023 #define DUK_SPRINTF sprintf
2025 #if !defined(DUK_SNPRINTF)
2027 #define DUK_SNPRINTF snprintf
2029 #if !defined(DUK_VSPRINTF)
2030 #define DUK_VSPRINTF vsprintf
2032 #if !defined(DUK_VSNPRINTF)
2034 #define DUK_VSNPRINTF vsnprintf
2036 #if !defined(DUK_SSCANF)
2037 #define DUK_SSCANF sscanf
2039 #if !defined(DUK_VSSCANF)
2040 #define DUK_VSSCANF vsscanf
2042 #if !defined(DUK_MEMZERO)
2043 #define DUK_MEMZERO(p,n) DUK_MEMSET((p), 0, (n))
2046 #if !defined(DUK_DOUBLE_INFINITY)
2047 #undef DUK_USE_COMPUTED_INFINITY
2048 #if defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION < 40600)
2050 #define DUK_DOUBLE_INFINITY (__builtin_inf())
2051 #elif defined(INFINITY)
2052 #define DUK_DOUBLE_INFINITY ((double) INFINITY)
2053 #elif !defined(DUK_F_VBCC) && !defined(DUK_F_MSVC) && !defined(DUK_F_BCC)
2054 #define DUK_DOUBLE_INFINITY (1.0 / 0.0)
2060 #define DUK_USE_COMPUTED_INFINITY
2061 #define DUK_DOUBLE_INFINITY duk_computed_infinity
2065 #if !defined(DUK_DOUBLE_NAN)
2066 #undef DUK_USE_COMPUTED_NAN
2068 #define DUK_DOUBLE_NAN NAN
2069 #elif !defined(DUK_F_VBCC) && !defined(DUK_F_MSVC) && !defined(DUK_F_BCC)
2070 #define DUK_DOUBLE_NAN (0.0 / 0.0)
2077 #define DUK_USE_COMPUTED_NAN
2078 #define DUK_DOUBLE_NAN duk_computed_nan
2086 #undef DUK_USE_REPL_FPCLASSIFY
2087 #undef DUK_USE_REPL_SIGNBIT
2088 #undef DUK_USE_REPL_ISFINITE
2089 #undef DUK_USE_REPL_ISNAN
2090 #undef DUK_USE_REPL_ISINF
2093 #undef DUK_F_USE_REPL_ALL
2094 #if !(defined(FP_NAN) && defined(FP_INFINITE) && defined(FP_ZERO) && \
2095 defined(FP_SUBNORMAL) && defined(FP_NORMAL))
2097 #define DUK_F_USE_REPL_ALL
2098 #elif defined(DUK_F_AMIGAOS) && defined(DUK_F_VBCC)
2100 #define DUK_F_USE_REPL_ALL
2101 #elif defined(DUK_F_AMIGAOS) && defined(DUK_F_M68K)
2106 #define DUK_F_USE_REPL_ALL
2107 #elif defined(DUK_F_FREEBSD) && defined(DUK_F_CLANG)
2111 #define DUK_F_USE_REPL_ALL
2112 #elif defined(DUK_F_UCLIBC)
2117 #define DUK_F_USE_REPL_ALL
2120 #if defined(DUK_F_USE_REPL_ALL)
2121 #define DUK_USE_REPL_FPCLASSIFY
2122 #define DUK_USE_REPL_SIGNBIT
2123 #define DUK_USE_REPL_ISFINITE
2124 #define DUK_USE_REPL_ISNAN
2125 #define DUK_USE_REPL_ISINF
2126 #define DUK_FPCLASSIFY duk_repl_fpclassify
2127 #define DUK_SIGNBIT duk_repl_signbit
2128 #define DUK_ISFINITE duk_repl_isfinite
2129 #define DUK_ISNAN duk_repl_isnan
2130 #define DUK_ISINF duk_repl_isinf
2131 #define DUK_FP_NAN 0
2132 #define DUK_FP_INFINITE 1
2133 #define DUK_FP_ZERO 2
2134 #define DUK_FP_SUBNORMAL 3
2135 #define DUK_FP_NORMAL 4
2137 #define DUK_FPCLASSIFY fpclassify
2138 #define DUK_SIGNBIT signbit
2139 #define DUK_ISFINITE isfinite
2140 #define DUK_ISNAN isnan
2141 #define DUK_ISINF isinf
2142 #define DUK_FP_NAN FP_NAN
2143 #define DUK_FP_INFINITE FP_INFINITE
2144 #define DUK_FP_ZERO FP_ZERO
2145 #define DUK_FP_SUBNORMAL FP_SUBNORMAL
2146 #define DUK_FP_NORMAL FP_NORMAL
2149 #if defined(DUK_F_USE_REPL_ALL)
2150 #undef DUK_F_USE_REPL_ALL
2157 #if !defined(DUK_FABS)
2158 #define DUK_FABS fabs
2160 #if !defined(DUK_FLOOR)
2161 #define DUK_FLOOR floor
2163 #if !defined(DUK_CEIL)
2164 #define DUK_CEIL ceil
2166 #if !defined(DUK_FMOD)
2167 #define DUK_FMOD fmod
2169 #if !defined(DUK_POW)
2172 #if !defined(DUK_ACOS)
2173 #define DUK_ACOS acos
2175 #if !defined(DUK_ASIN)
2176 #define DUK_ASIN asin
2178 #if !defined(DUK_ATAN)
2179 #define DUK_ATAN atan
2181 #if !defined(DUK_ATAN2)
2182 #define DUK_ATAN2 atan2
2184 #if !defined(DUK_SIN)
2187 #if !defined(DUK_COS)
2190 #if !defined(DUK_TAN)
2193 #if !defined(DUK_EXP)
2196 #if !defined(DUK_LOG)
2199 #if !defined(DUK_SQRT)
2200 #define DUK_SQRT sqrt
2208 #if defined(DUK_F_C99) || defined(DUK_F_CPP11) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
2209 #if !defined(DUK_CBRT)
2210 #define DUK_CBRT cbrt
2212 #if !defined(DUK_LOG2)
2213 #define DUK_LOG2 log2
2215 #if !defined(DUK_LOG10)
2216 #define DUK_LOG10 log10
2218 #if !defined(DUK_TRUNC)
2219 #define DUK_TRUNC trunc
2228 #undef DUK_USE_POW_WORKAROUNDS
2229 #if defined(DUK_F_NETBSD) || defined(DUK_F_MINGW)
2230 #define DUK_USE_POW_WORKAROUNDS
2236 #undef DUK_USE_ATAN2_WORKAROUNDS
2237 #if defined(DUK_F_MINGW)
2238 #define DUK_USE_ATAN2_WORKAROUNDS
2245 #undef DUK_USE_PARANOID_MATH
2255 #undef DUK_USE_PARANOID_DATE_COMPUTATION
2256 #if !defined(DUK_F_C99)
2257 #define DUK_USE_PARANOID_DATE_COMPUTATION
2287 #if !defined(DUK_USE_BYTEORDER) && defined(__BYTE_ORDER__)
2288 #if defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
2289 #if defined(__FLOAT_WORD_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__)
2290 #define DUK_USE_BYTEORDER 1
2291 #elif defined(__FLOAT_WORD_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
2292 #define DUK_USE_BYTEORDER 2
2293 #elif !defined(__FLOAT_WORD_ORDER__)
2295 #define DUK_USE_BYTEORDER 1
2299 #elif defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
2300 #if defined(__FLOAT_WORD_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
2301 #define DUK_USE_BYTEORDER 3
2302 #elif !defined(__FLOAT_WORD_ORDER__)
2304 #define DUK_USE_BYTEORDER 3
2321 #if !defined(DUK_USE_BYTEORDER)
2322 #if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN) || \
2323 defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN) || \
2324 defined(__LITTLE_ENDIAN__)
2325 #if defined(__FLOAT_WORD_ORDER) && defined(__LITTLE_ENDIAN) && (__FLOAT_WORD_ORDER == __LITTLE_ENDIAN) || \
2326 defined(_FLOAT_WORD_ORDER) && defined(_LITTLE_ENDIAN) && (_FLOAT_WORD_ORDER == _LITTLE_ENDIAN)
2327 #define DUK_USE_BYTEORDER 1
2328 #elif defined(__FLOAT_WORD_ORDER) && defined(__BIG_ENDIAN) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) || \
2329 defined(_FLOAT_WORD_ORDER) && defined(_BIG_ENDIAN) && (_FLOAT_WORD_ORDER == _BIG_ENDIAN)
2330 #define DUK_USE_BYTEORDER 2
2331 #elif !defined(__FLOAT_WORD_ORDER) && !defined(_FLOAT_WORD_ORDER)
2333 #define DUK_USE_BYTEORDER 1
2337 #elif defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN) || \
2338 defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN) || \
2339 defined(__BIG_ENDIAN__)
2340 #if defined(__FLOAT_WORD_ORDER) && defined(__BIG_ENDIAN) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) || \
2341 defined(_FLOAT_WORD_ORDER) && defined(_BIG_ENDIAN) && (_FLOAT_WORD_ORDER == _BIG_ENDIAN)
2342 #define DUK_USE_BYTEORDER 3
2343 #elif !defined(__FLOAT_WORD_ORDER) && !defined(_FLOAT_WORD_ORDER)
2345 #define DUK_USE_BYTEORDER 3
2362 #if !defined(DUK_USE_BYTEORDER)
2363 #if defined(__LITTLEENDIAN__)
2364 #define DUK_USE_BYTEORDER 1
2365 #elif defined(__BIGENDIAN__)
2366 #define DUK_USE_BYTEORDER 3
2379 #if !defined(DUK_USE_ALIGN_BY)
2380 #define DUK_USE_ALIGN_BY 8
2389 #if !(defined(DUK_USE_PACK_MSVC_PRAGMA) || defined(DUK_USE_PACK_GCC_ATTR) || \
2390 defined(DUK_USE_PACK_CLANG_ATTR) || defined(DUK_USE_PACK_DUMMY_MEMBER))
2391 #define DUK_USE_PACK_DUMMY_MEMBER
2394 #if !defined(DUK_VA_COPY)
2400 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
2405 #define DUK_VA_COPY(dest,src) va_copy(dest,src)
2412 #define DUK_VA_COPY(dest,src) do { (dest) = (src); } while (0)
2416 #if !defined(DUK_MACRO_STRINGIFY)
2420 #define DUK_MACRO_STRINGIFY_HELPER(x) #x
2421 #define DUK_MACRO_STRINGIFY(x) DUK_MACRO_STRINGIFY_HELPER(x)
2424 #if !defined(DUK_CAUSE_SEGFAULT)
2428 #define DUK_CAUSE_SEGFAULT() do { *((volatile duk_uint32_t *) NULL) = (duk_uint32_t) 0xdeadbeefUL; } while (0)
2430 #if !defined(DUK_UNREF)
2436 #define DUK_UNREF(x) do { (void) (x); } while (0)
2438 #if !defined(DUK_NORETURN)
2439 #define DUK_NORETURN(decl) decl
2441 #if !defined(DUK_UNREACHABLE)
2446 #define DUK_UNREACHABLE() do { } while (0)
2448 #if !defined(DUK_LOSE_CONST)
2453 #define DUK_LOSE_CONST(src) ((void *) (duk_uintptr_t) (src))
2456 #if !defined(DUK_LIKELY)
2457 #define DUK_LIKELY(x) (x)
2459 #if !defined(DUK_UNLIKELY)
2460 #define DUK_UNLIKELY(x) (x)
2462 #if !defined(DUK_UNPREDICTABLE)
2463 #define DUK_UNPREDICTABLE(x) (x)
2466 #if !defined(DUK_NOINLINE)
2467 #define DUK_NOINLINE
2469 #if !defined(DUK_INLINE)
2472 #if !defined(DUK_ALWAYS_INLINE)
2473 #define DUK_ALWAYS_INLINE
2476 #if !defined(DUK_EXTERNAL_DECL)
2477 #define DUK_EXTERNAL_DECL extern
2479 #if !defined(DUK_EXTERNAL)
2480 #define DUK_EXTERNAL
2482 #if !defined(DUK_INTERNAL_DECL)
2483 #if defined(DUK_SINGLE_FILE)
2484 #define DUK_INTERNAL_DECL static
2486 #define DUK_INTERNAL_DECL extern
2489 #if !defined(DUK_INTERNAL)
2490 #if defined(DUK_SINGLE_FILE)
2491 #define DUK_INTERNAL static
2493 #define DUK_INTERNAL
2496 #if !defined(DUK_LOCAL_DECL)
2497 #define DUK_LOCAL_DECL static
2499 #if !defined(DUK_LOCAL)
2500 #define DUK_LOCAL static
2503 #if !defined(DUK_FILE_MACRO)
2504 #define DUK_FILE_MACRO __FILE__
2506 #if !defined(DUK_LINE_MACRO)
2507 #define DUK_LINE_MACRO __LINE__
2509 #if !defined(DUK_FUNC_MACRO)
2510 #if defined(DUK_F_C99) || defined(DUK_F_CPP11)
2511 #define DUK_FUNC_MACRO __func__
2512 #elif defined(__FUNCTION__)
2513 #define DUK_FUNC_MACRO __FUNCTION__
2515 #define DUK_FUNC_MACRO "unknown"
2519 #if !defined(DUK_BSWAP32)
2520 #define DUK_BSWAP32(x) \
2521 ((((duk_uint32_t) (x)) >> 24) | \
2522 ((((duk_uint32_t) (x)) >> 8) & 0xff00UL) | \
2523 ((((duk_uint32_t) (x)) << 8) & 0xff0000UL) | \
2524 (((duk_uint32_t) (x)) << 24))
2526 #if !defined(DUK_BSWAP16)
2527 #define DUK_BSWAP16(x) \
2528 ((duk_uint16_t) (x) >> 8) | \
2529 ((duk_uint16_t) (x) << 8)
2535 #if !(defined(DUK_USE_FLEX_C99) || defined(DUK_USE_FLEX_ZEROSIZE) || defined(DUK_USE_FLEX_ONESIZE))
2536 #if defined(DUK_F_C99)
2537 #define DUK_USE_FLEX_C99
2539 #define DUK_USE_FLEX_ZEROSIZE
2543 #if !(defined(DUK_USE_PACK_GCC_ATTR) || defined(DUK_USE_PACK_CLANG_ATTR) || \
2544 defined(DUK_USE_PACK_MSVC_PRAGMA) || defined(DUK_USE_PACK_DUMMY_MEMBER))
2545 #define DUK_USE_PACK_DUMMY_MEMBER
2549 #undef DUK_USE_GCC_PRAGMAS
2555 #if !defined(DUK_SINGLE_FILE)
2558 #undef DUK_ALWAYS_INLINE
2559 #define DUK_NOINLINE
2561 #define DUK_ALWAYS_INLINE
2573 #if !defined(DUK_F_PACKED_TVAL_PROVIDED)
2574 #undef DUK_F_PACKED_TVAL_POSSIBLE
2577 #if !defined(DUK_F_PACKED_TVAL_POSSIBLE) && defined(DUK_UINTPTR_MAX)
2578 #if (DUK_UINTPTR_MAX <= 0xffffffffUL)
2579 #define DUK_F_PACKED_TVAL_POSSIBLE
2584 #if !defined(DUK_F_PACKED_TVAL_POSSIBLE) && defined(DUK_UINTPTR_MAX) && !defined(DUK_UINTPTR_MAX_COMPUTED)
2585 #if (DUK_UINTPTR_MAX <= 0xffffffffUL)
2586 #define DUK_F_PACKED_TVAL_POSSIBLE
2591 #if !defined(DUK_F_PACKED_TVAL_POSSIBLE) && defined(DUK_SIZE_MAX) && !defined(DUK_SIZE_MAX_COMPUTED)
2592 #if (DUK_SIZE_MAX <= 0xffffffffUL)
2593 #define DUK_F_PACKED_TVAL_POSSIBLE
2597 #undef DUK_USE_PACKED_TVAL
2598 #if defined(DUK_F_PACKED_TVAL_POSSIBLE)
2599 #define DUK_USE_PACKED_TVAL
2602 #undef DUK_F_PACKED_TVAL_POSSIBLE
2609 #undef DUK_USE_HOBJECT_LAYOUT_1
2610 #undef DUK_USE_HOBJECT_LAYOUT_2
2611 #undef DUK_USE_HOBJECT_LAYOUT_3
2612 #if (DUK_USE_ALIGN_BY == 1)
2617 #define DUK_USE_HOBJECT_LAYOUT_1
2623 #define DUK_USE_HOBJECT_LAYOUT_2
2629 #if defined(__FAST_MATH__)
2630 #error __FAST_MATH__ defined, refusing to compile
2637 #define DUK_USE_ARRAY_BUILTIN
2638 #define DUK_USE_ARRAY_FASTPATH
2639 #define DUK_USE_ARRAY_PROP_FASTPATH
2640 #undef DUK_USE_ASSERTIONS
2641 #define DUK_USE_AUGMENT_ERROR_CREATE
2642 #define DUK_USE_AUGMENT_ERROR_THROW
2643 #define DUK_USE_AVOID_PLATFORM_FUNCPTRS
2644 #define DUK_USE_BASE64_FASTPATH
2645 #define DUK_USE_BOOLEAN_BUILTIN
2646 #define DUK_USE_BUFFEROBJECT_SUPPORT
2647 #undef DUK_USE_BUFLEN16
2648 #define DUK_USE_BYTECODE_DUMP_SUPPORT
2649 #define DUK_USE_COMMONJS_MODULES
2650 #define DUK_USE_COMPILER_RECLIMIT 2500
2651 #define DUK_USE_COROUTINE_SUPPORT
2652 #undef DUK_USE_CPP_EXCEPTIONS
2653 #undef DUK_USE_DATAPTR16
2654 #undef DUK_USE_DATAPTR_DEC16
2655 #undef DUK_USE_DATAPTR_ENC16
2656 #define DUK_USE_DATE_BUILTIN
2657 #undef DUK_USE_DATE_FORMAT_STRING
2658 #undef DUK_USE_DATE_GET_LOCAL_TZOFFSET
2659 #undef DUK_USE_DATE_GET_NOW
2660 #undef DUK_USE_DATE_PARSE_STRING
2661 #undef DUK_USE_DATE_PRS_GETDATE
2662 #undef DUK_USE_DEBUG
2663 #undef DUK_USE_DEBUGGER_DUMPHEAP
2664 #undef DUK_USE_DEBUGGER_INSPECT
2665 #undef DUK_USE_DEBUGGER_PAUSE_UNCAUGHT
2666 #undef DUK_USE_DEBUGGER_SUPPORT
2667 #define DUK_USE_DEBUGGER_THROW_NOTIFY
2668 #undef DUK_USE_DEBUGGER_TRANSPORT_TORTURE
2669 #define DUK_USE_DEBUG_BUFSIZE 65536L
2670 #define DUK_USE_DEBUG_LEVEL 0
2671 #undef DUK_USE_DEBUG_WRITE
2672 #define DUK_USE_DOUBLE_LINKED_HEAP
2673 #define DUK_USE_DUKTAPE_BUILTIN
2674 #define DUK_USE_ENCODING_BUILTINS
2675 #define DUK_USE_ERRCREATE
2676 #define DUK_USE_ERRTHROW
2678 #define DUK_USE_ES6_OBJECT_PROTO_PROPERTY
2679 #define DUK_USE_ES6_OBJECT_SETPROTOTYPEOF
2680 #define DUK_USE_ES6_PROXY
2681 #define DUK_USE_ES6_REGEXP_SYNTAX
2682 #define DUK_USE_ES6_UNICODE_ESCAPE
2683 #define DUK_USE_ES7_EXP_OPERATOR
2684 #define DUK_USE_ESBC_LIMITS
2685 #define DUK_USE_ESBC_MAX_BYTES 2147418112L
2686 #define DUK_USE_ESBC_MAX_LINENUMBER 2147418112L
2687 #undef DUK_USE_EXEC_FUN_LOCAL
2688 #undef DUK_USE_EXEC_INDIRECT_BOUND_CHECK
2689 #undef DUK_USE_EXEC_PREFER_SIZE
2690 #define DUK_USE_EXEC_REGCONST_OPTIMIZE
2691 #undef DUK_USE_EXEC_TIMEOUT_CHECK
2692 #undef DUK_USE_EXPLICIT_NULL_INIT
2693 #undef DUK_USE_EXTSTR_FREE
2694 #undef DUK_USE_EXTSTR_INTERN_CHECK
2695 #undef DUK_USE_FASTINT
2696 #define DUK_USE_FAST_REFCOUNT_DEFAULT
2697 #undef DUK_USE_FATAL_HANDLER
2698 #define DUK_USE_FINALIZER_SUPPORT
2699 #undef DUK_USE_FUNCPTR16
2700 #undef DUK_USE_FUNCPTR_DEC16
2701 #undef DUK_USE_FUNCPTR_ENC16
2702 #define DUK_USE_FUNCTION_BUILTIN
2703 #define DUK_USE_FUNC_FILENAME_PROPERTY
2704 #define DUK_USE_FUNC_NAME_PROPERTY
2705 #undef DUK_USE_GC_TORTURE
2706 #undef DUK_USE_GET_RANDOM_DOUBLE
2707 #define DUK_USE_GLOBAL_BUILTIN
2708 #undef DUK_USE_HEAPPTR16
2709 #undef DUK_USE_HEAPPTR_DEC16
2710 #undef DUK_USE_HEAPPTR_ENC16
2711 #define DUK_USE_HEX_FASTPATH
2712 #define DUK_USE_HOBJECT_HASH_PART
2713 #define DUK_USE_HSTRING_ARRIDX
2714 #define DUK_USE_HSTRING_CLEN
2715 #undef DUK_USE_HSTRING_EXTDATA
2716 #define DUK_USE_IDCHAR_FASTPATH
2717 #undef DUK_USE_INTERRUPT_COUNTER
2718 #undef DUK_USE_INTERRUPT_DEBUG_FIXUP
2720 #define DUK_USE_JSON_BUILTIN
2721 #define DUK_USE_JSON_DECNUMBER_FASTPATH
2722 #define DUK_USE_JSON_DECSTRING_FASTPATH
2723 #define DUK_USE_JSON_DEC_RECLIMIT 1000
2724 #define DUK_USE_JSON_EATWHITE_FASTPATH
2725 #define DUK_USE_JSON_ENC_RECLIMIT 1000
2726 #define DUK_USE_JSON_QUOTESTRING_FASTPATH
2727 #undef DUK_USE_JSON_STRINGIFY_FASTPATH
2728 #define DUK_USE_JSON_SUPPORT
2730 #define DUK_USE_LEXER_SLIDING_WINDOW
2731 #undef DUK_USE_LIGHTFUNC_BUILTINS
2732 #undef DUK_USE_MARKANDSWEEP_FINALIZER_TORTURE
2733 #define DUK_USE_MARK_AND_SWEEP_RECLIMIT 256
2734 #define DUK_USE_MATH_BUILTIN
2735 #define DUK_USE_MS_STRINGTABLE_RESIZE
2736 #define DUK_USE_NATIVE_CALL_RECLIMIT 1000
2737 #define DUK_USE_NONSTD_ARRAY_CONCAT_TRAILER
2738 #define DUK_USE_NONSTD_ARRAY_MAP_TRAILER
2739 #define DUK_USE_NONSTD_ARRAY_SPLICE_DELCOUNT
2740 #undef DUK_USE_NONSTD_FUNC_CALLER_PROPERTY
2741 #undef DUK_USE_NONSTD_FUNC_SOURCE_PROPERTY
2742 #define DUK_USE_NONSTD_FUNC_STMT
2743 #define DUK_USE_NONSTD_GETTER_KEY_ARGUMENT
2744 #define DUK_USE_NONSTD_JSON_ESC_U2028_U2029
2745 #define DUK_USE_NONSTD_SETTER_KEY_ARGUMENT
2746 #define DUK_USE_NONSTD_STRING_FROMCHARCODE_32BIT
2747 #define DUK_USE_NUMBER_BUILTIN
2748 #define DUK_USE_OBJECT_BUILTIN
2749 #undef DUK_USE_OBJSIZES16
2750 #undef DUK_USE_PARANOID_ERRORS
2751 #define DUK_USE_PC2LINE
2752 #undef DUK_USE_PREFER_SIZE
2753 #define DUK_USE_PROVIDE_DEFAULT_ALLOC_FUNCTIONS
2754 #undef DUK_USE_REFCOUNT16
2755 #define DUK_USE_REFERENCE_COUNTING
2756 #define DUK_USE_REFLECT_BUILTIN
2757 #undef DUK_USE_REFZERO_FINALIZER_TORTURE
2758 #undef DUK_USE_REGEXP_CANON_WORKAROUND
2759 #define DUK_USE_REGEXP_COMPILER_RECLIMIT 10000
2760 #define DUK_USE_REGEXP_EXECUTOR_RECLIMIT 10000
2761 #define DUK_USE_REGEXP_SUPPORT
2762 #undef DUK_USE_ROM_GLOBAL_CLONE
2763 #undef DUK_USE_ROM_GLOBAL_INHERIT
2764 #undef DUK_USE_ROM_OBJECTS
2765 #define DUK_USE_ROM_PTRCOMP_FIRST 63488L
2766 #undef DUK_USE_ROM_STRINGS
2767 #define DUK_USE_SECTION_B
2768 #undef DUK_USE_SELF_TESTS
2769 #undef DUK_USE_SHUFFLE_TORTURE
2770 #define DUK_USE_SOURCE_NONBMP
2771 #undef DUK_USE_STRHASH16
2772 #undef DUK_USE_STRHASH_DENSE
2773 #define DUK_USE_STRHASH_SKIP_SHIFT 5
2774 #define DUK_USE_STRICT_DECL
2775 #undef DUK_USE_STRICT_UTF8_SOURCE
2776 #define DUK_USE_STRING_BUILTIN
2777 #undef DUK_USE_STRLEN16
2778 #undef DUK_USE_STRTAB_CHAIN
2779 #undef DUK_USE_STRTAB_CHAIN_SIZE
2780 #define DUK_USE_STRTAB_PROBE
2781 #undef DUK_USE_SYMBOL_BUILTIN
2782 #define DUK_USE_TAILCALL
2783 #define DUK_USE_TARGET_INFO "unknown"
2784 #define DUK_USE_TRACEBACKS
2785 #define DUK_USE_TRACEBACK_DEPTH 10
2786 #define DUK_USE_USER_DECLARE()
2787 #undef DUK_USE_VALSTACK_UNSAFE
2788 #define DUK_USE_VERBOSE_ERRORS
2789 #define DUK_USE_VERBOSE_EXECUTOR_ERRORS
2790 #define DUK_USE_VOLUNTARY_GC
2791 #define DUK_USE_ZERO_BUFFER_DATA
2809 #if defined(DUK_COMPILING_DUKTAPE)
2811 #if defined(DUK_USE_DATE_GET_NOW)
2813 #elif defined(DUK_USE_DATE_NOW_GETTIMEOFDAY)
2814 #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_gettimeofday((ctx))
2815 #elif defined(DUK_USE_DATE_NOW_TIME)
2816 #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_time((ctx))
2817 #elif defined(DUK_USE_DATE_NOW_WINDOWS)
2818 #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_windows((ctx))
2820 #error no provider for DUK_USE_DATE_GET_NOW()
2823 #if defined(DUK_USE_DATE_GET_LOCAL_TZOFFSET)
2825 #elif defined(DUK_USE_DATE_TZO_GMTIME_R) || defined(DUK_USE_DATE_TZO_GMTIME)
2826 #define DUK_USE_DATE_GET_LOCAL_TZOFFSET(d) duk_bi_date_get_local_tzoffset_gmtime((d))
2827 #elif defined(DUK_USE_DATE_TZO_WINDOWS)
2828 #define DUK_USE_DATE_GET_LOCAL_TZOFFSET(d) duk_bi_date_get_local_tzoffset_windows((d))
2830 #error no provider for DUK_USE_DATE_GET_LOCAL_TZOFFSET()
2833 #if defined(DUK_USE_DATE_PARSE_STRING)
2835 #elif defined(DUK_USE_DATE_PRS_STRPTIME)
2836 #define DUK_USE_DATE_PARSE_STRING(ctx,str) duk_bi_date_parse_string_strptime((ctx), (str))
2837 #elif defined(DUK_USE_DATE_PRS_GETDATE)
2838 #define DUK_USE_DATE_PARSE_STRING(ctx,str) duk_bi_date_parse_string_getdate((ctx), (str))
2843 #if defined(DUK_USE_DATE_FORMAT_STRING)
2845 #elif defined(DUK_USE_DATE_FMT_STRFTIME)
2846 #define DUK_USE_DATE_FORMAT_STRING(ctx,parts,tzoffset,flags) \
2847 duk_bi_date_format_parts_strftime((ctx), (parts), (tzoffset), (flags))
2859 #if defined(DUK_USE_BYTEORDER)
2860 #if (DUK_USE_BYTEORDER == 1)
2861 #define DUK_USE_INTEGER_LE
2862 #define DUK_USE_DOUBLE_LE
2863 #elif (DUK_USE_BYTEORDER == 2)
2864 #define DUK_USE_INTEGER_LE
2865 #define DUK_USE_DOUBLE_ME
2866 #elif (DUK_USE_BYTEORDER == 3)
2867 #define DUK_USE_INTEGER_BE
2868 #define DUK_USE_DOUBLE_BE
2870 #error unsupported: byte order invalid
2873 #error unsupported: byte order detection failed