duktape 2.0.1.1 → 2.3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a55792db62545259c3fa48e0c038e76fce0494a1
4
- data.tar.gz: cd720974a36c9e6e3b5c9c5667c9f51cd1f18848
3
+ metadata.gz: fb1c81939c930da5931c156d092800ce1a1d46db
4
+ data.tar.gz: fddc0fee4d0b9b047ca9ccab96f80e7e5e511590
5
5
  SHA512:
6
- metadata.gz: 8a6ce6ce9e19b4b76d0a6e7183f7cb3bfc188a7073acf36cf1af665a229c27e81b70b4ac8f24979d1441abc4532f47ac52c8fb791ce2d45c839310797565125a
7
- data.tar.gz: fa7eb3f658f730fb5be6822cc94669fce3c5f1237f3ed9d37882ec7974bcc45c2515bca3b7ac8068b4ace67ad2f68aa712f6347e6bed339871a27c2e01df4346
6
+ metadata.gz: 2235641010578d7a47564799435145360357389e358f6a1611372782629fff551e0c70d998189afda7801479847c098e5d49d0b80bba0ec34ee34d5f9d4bd8b4
7
+ data.tar.gz: 80e1165ed988c883fa90f59f2ce7a38d12d66e50f923ac30f94acadb7b473f7d05feb8f192673be1306eb39b069170739f8df97ee021eb8598769f3c5f4901d5
@@ -1,5 +1,9 @@
1
1
  # ChangeLog
2
2
 
3
+ ## v2.3.0.0 (2019-05-15)
4
+
5
+ * Upgrade to Duktape v2.3.0
6
+
3
7
  ## v2.0.1.1 (2019-05-13)
4
8
 
5
9
  * Support passing big numbers (64-bit + bignum) to JS (#43, did, judofyr)
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * duk_config.h configuration header generated by genconfig.py.
3
3
  *
4
- * Git commit: bb8eee866e835d3efbea1e26faf6dc804381b024
5
- * Git describe: v1.6.1.0-dirty
4
+ * Git commit: 7551eee6615c2633375bff51ceb297bc3bc7c77e
5
+ * Git describe: v2.0.1.0-5-g7551eee-dirty
6
6
  * Git branch: master
7
7
  *
8
8
  * Supported platforms:
@@ -12,6 +12,7 @@
12
12
  * - Generic BSD
13
13
  * - Atari ST TOS
14
14
  * - AmigaOS
15
+ * - Durango (XboxOne)
15
16
  * - Windows
16
17
  * - Flashplayer (Crossbridge)
17
18
  * - QNX
@@ -19,6 +20,8 @@
19
20
  * - Emscripten
20
21
  * - Linux
21
22
  * - Solaris
23
+ * - AIX
24
+ * - HPUX
22
25
  * - Generic POSIX
23
26
  * - Cygwin
24
27
  * - Generic UNIX
@@ -126,6 +129,11 @@
126
129
  #endif
127
130
  #endif
128
131
 
132
+ /* Durango (Xbox One) */
133
+ #if defined(_DURANGO) || defined(_XBOX_ONE)
134
+ #define DUK_F_DURANGO
135
+ #endif
136
+
129
137
  /* Windows, both 32-bit and 64-bit */
130
138
  #if defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64) || \
131
139
  defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__)
@@ -170,6 +178,28 @@
170
178
  /* illumos / Solaris */
171
179
  #if defined(__sun) && defined(__SVR4)
172
180
  #define DUK_F_SUN
181
+ #if defined(__SUNPRO_C) && (__SUNPRO_C < 0x550)
182
+ #define DUK_F_OLD_SOLARIS
183
+ /* Defines _ILP32 / _LP64 required by DUK_F_X86/DUK_F_X64. Platforms
184
+ * are processed before architectures, so this happens before the
185
+ * DUK_F_X86/DUK_F_X64 detection is emitted.
186
+ */
187
+ #include <sys/isa_defs.h>
188
+ #endif
189
+ #endif
190
+
191
+ /* AIX */
192
+ #if defined(_AIX)
193
+ /* defined(__xlc__) || defined(__IBMC__): works but too wide */
194
+ #define DUK_F_AIX
195
+ #endif
196
+
197
+ /* HPUX */
198
+ #if defined(__hpux)
199
+ #define DUK_F_HPUX
200
+ #if defined(__ia64)
201
+ #define DUK_F_HPUX_ITANIUM
202
+ #endif
173
203
  #endif
174
204
 
175
205
  /* POSIX */
@@ -188,26 +218,12 @@
188
218
  #define DUK_F_UNIX
189
219
  #endif
190
220
 
191
- /* stdint.h not available */
192
- #if defined(DUK_F_WINDOWS) && defined(_MSC_VER)
193
- #if (_MSC_VER < 1700)
194
- /* VS2012+ has stdint.h, < VS2012 does not (but it's available for download). */
195
- #define DUK_F_NO_STDINT_H
196
- #endif
197
- #endif
198
- #if !defined(DUK_F_NO_STDINT_H) && (defined(DUK_F_TOS) || defined(DUK_F_BCC))
199
- #define DUK_F_NO_STDINT_H
200
- #endif
201
-
202
- /* C++ */
203
- #undef DUK_F_CPP
204
- #if defined(__cplusplus)
205
- #define DUK_F_CPP
206
- #endif
207
-
208
221
  /* Intel x86 (32-bit), x64 (64-bit) or x32 (64-bit but 32-bit pointers),
209
222
  * define only one of DUK_F_X86, DUK_F_X64, DUK_F_X32.
210
223
  * https://sites.google.com/site/x32abi/
224
+ *
225
+ * With DUK_F_OLD_SOLARIS the <sys/isa_defs.h> header must be included
226
+ * before this.
211
227
  */
212
228
  #if defined(__amd64__) || defined(__amd64) || \
213
229
  defined(__x86_64__) || defined(__x86_64) || \
@@ -279,6 +295,12 @@
279
295
  #define DUK_F_CLANG
280
296
  #endif
281
297
 
298
+ /* C++ */
299
+ #undef DUK_F_CPP
300
+ #if defined(__cplusplus)
301
+ #define DUK_F_CPP
302
+ #endif
303
+
282
304
  /* C99 or above */
283
305
  #undef DUK_F_C99
284
306
  #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
@@ -334,6 +356,15 @@
334
356
  #define DUK_F_VBCC
335
357
  #endif
336
358
 
359
+ #if defined(ANDROID) || defined(__ANDROID__)
360
+ #define DUK_F_ANDROID
361
+ #endif
362
+
363
+ /* Atari Mint */
364
+ #if defined(__MINT__)
365
+ #define DUK_F_MINT
366
+ #endif
367
+
337
368
  /*
338
369
  * Platform autodetection
339
370
  */
@@ -458,8 +489,13 @@
458
489
  #if !defined(DUK_USE_BYTEORDER) && (defined(DUK_F_M68K) || defined(DUK_F_PPC))
459
490
  #define DUK_USE_BYTEORDER 3
460
491
  #endif
461
- #elif defined(DUK_F_WINDOWS)
462
- /* --- Windows --- */
492
+ #elif defined(DUK_F_DURANGO)
493
+ /* --- Durango (XboxOne) --- */
494
+ /* Durango = XboxOne
495
+ * Configuration is nearly identical to Windows, except for
496
+ * DUK_USE_DATE_TZO_WINDOWS.
497
+ */
498
+
463
499
  /* Initial fix: disable secure CRT related warnings when compiling Duktape
464
500
  * itself (must be defined before including Windows headers). Don't define
465
501
  * for user code including duktape.h.
@@ -468,10 +504,9 @@
468
504
  #define _CRT_SECURE_NO_WARNINGS
469
505
  #endif
470
506
 
471
- /* Windows 32-bit and 64-bit are currently the same. */
472
507
  /* MSVC does not have sys/param.h */
473
508
  #define DUK_USE_DATE_NOW_WINDOWS
474
- #define DUK_USE_DATE_TZO_WINDOWS
509
+ #define DUK_USE_DATE_TZO_WINDOWS_NO_DST
475
510
  /* Note: PRS and FMT are intentionally left undefined for now. This means
476
511
  * there is no platform specific date parsing/formatting but there is still
477
512
  * the ISO 8601 standard format.
@@ -483,6 +518,64 @@
483
518
  #include <windows.h>
484
519
  #endif
485
520
 
521
+ #define DUK_USE_OS_STRING "durango"
522
+
523
+ #if !defined(DUK_USE_BYTEORDER)
524
+ #define DUK_USE_BYTEORDER 1
525
+ #endif
526
+ #elif defined(DUK_F_WINDOWS)
527
+ /* --- Windows --- */
528
+ /* Windows version can't obviously be determined at compile time,
529
+ * but _WIN32_WINNT indicates the minimum version targeted:
530
+ * - https://msdn.microsoft.com/en-us/library/6sehtctf.aspx
531
+ */
532
+
533
+ /* Initial fix: disable secure CRT related warnings when compiling Duktape
534
+ * itself (must be defined before including Windows headers). Don't define
535
+ * for user code including duktape.h.
536
+ */
537
+ #if defined(DUK_COMPILING_DUKTAPE) && !defined(_CRT_SECURE_NO_WARNINGS)
538
+ #define _CRT_SECURE_NO_WARNINGS
539
+ #endif
540
+
541
+ /* Windows 32-bit and 64-bit are currently the same. */
542
+ /* MSVC does not have sys/param.h */
543
+
544
+ #if defined(DUK_COMPILING_DUKTAPE)
545
+ /* Only include when compiling Duktape to avoid polluting application build
546
+ * with a lot of unnecessary defines.
547
+ */
548
+ #include <windows.h>
549
+ #endif
550
+
551
+ /* GetSystemTimePreciseAsFileTime() available from Windows 8:
552
+ * https://msdn.microsoft.com/en-us/library/windows/desktop/hh706895(v=vs.85).aspx
553
+ */
554
+ #if defined(DUK_USE_DATE_NOW_WINDOWS_SUBMS) || defined(DUK_USE_DATE_NOW_WINDOWS)
555
+ /* User forced provider. */
556
+ #else
557
+ #if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)
558
+ #define DUK_USE_DATE_NOW_WINDOWS_SUBMS
559
+ #else
560
+ #define DUK_USE_DATE_NOW_WINDOWS
561
+ #endif
562
+ #endif
563
+
564
+ #define DUK_USE_DATE_TZO_WINDOWS
565
+
566
+ /* Note: PRS and FMT are intentionally left undefined for now. This means
567
+ * there is no platform specific date parsing/formatting but there is still
568
+ * the ISO 8601 standard format.
569
+ */
570
+
571
+ /* QueryPerformanceCounter() may go backwards in Windows XP, so enable for
572
+ * Vista and later: https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx#qpc_support_in_windows_versions
573
+ */
574
+ #if !defined(DUK_USE_GET_MONOTONIC_TIME_WINDOWS_QPC) && \
575
+ defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
576
+ #define DUK_USE_GET_MONOTONIC_TIME_WINDOWS_QPC
577
+ #endif
578
+
486
579
  #define DUK_USE_OS_STRING "windows"
487
580
 
488
581
  /* On Windows, assume we're little endian. Even Itanium which has a
@@ -527,6 +620,10 @@
527
620
  #define DUK_USE_OS_STRING "qnx"
528
621
  #elif defined(DUK_F_TINSPIRE)
529
622
  /* --- TI-Nspire --- */
623
+ #if defined(DUK_COMPILING_DUKTAPE) && !defined(_XOPEN_SOURCE)
624
+ #define _XOPEN_SOURCE /* e.g. strptime */
625
+ #endif
626
+
530
627
  #define DUK_USE_DATE_NOW_GETTIMEOFDAY
531
628
  #define DUK_USE_DATE_TZO_GMTIME_R
532
629
  #define DUK_USE_DATE_PRS_STRPTIME
@@ -598,6 +695,10 @@
598
695
  #define DUK_USE_DATE_PRS_STRPTIME
599
696
  #define DUK_USE_DATE_FMT_STRFTIME
600
697
 
698
+ #if 0 /* XXX: safe condition? */
699
+ #define DUK_USE_GET_MONOTONIC_TIME_CLOCK_GETTIME
700
+ #endif
701
+
601
702
  #define DUK_USE_OS_STRING "linux"
602
703
  #elif defined(DUK_F_SUN)
603
704
  /* --- Solaris --- */
@@ -607,12 +708,50 @@
607
708
  #define DUK_USE_DATE_FMT_STRFTIME
608
709
 
609
710
  #include <sys/types.h>
711
+ #if defined(DUK_F_OLD_SOLARIS)
712
+ /* Old Solaris with no endian.h, stdint.h */
713
+ #define DUK_F_NO_STDINT_H
714
+ #if !defined(DUK_USE_BYTEORDER)
715
+ #define DUK_USE_BYTEORDER 3
716
+ #endif
717
+ #else /* DUK_F_OLD_SOLARIS */
610
718
  #include <ast/endian.h>
719
+ #endif /* DUK_F_OLD_SOLARIS */
720
+
611
721
  #include <sys/param.h>
612
722
  #include <sys/time.h>
613
723
  #include <time.h>
614
724
 
615
725
  #define DUK_USE_OS_STRING "solaris"
726
+ #elif defined(DUK_F_AIX)
727
+ /* --- AIX --- */
728
+ #if !defined(DUK_USE_BYTEORDER)
729
+ #define DUK_USE_BYTEORDER 3
730
+ #endif
731
+ #define DUK_USE_DATE_NOW_GETTIMEOFDAY
732
+ #define DUK_USE_DATE_TZO_GMTIME_R
733
+ #define DUK_USE_DATE_PRS_STRPTIME
734
+ #define DUK_USE_DATE_FMT_STRFTIME
735
+ #include <sys/param.h>
736
+ #include <sys/time.h>
737
+ #include <time.h>
738
+
739
+ #define DUK_USE_OS_STRING "aix"
740
+ #elif defined(DUK_F_HPUX)
741
+ /* --- HPUX --- */
742
+ #define DUK_F_NO_STDINT_H
743
+ #if !defined(DUK_USE_BYTEORDER)
744
+ #define DUK_USE_BYTEORDER 3
745
+ #endif
746
+ #define DUK_USE_DATE_NOW_GETTIMEOFDAY
747
+ #define DUK_USE_DATE_TZO_GMTIME_R
748
+ #define DUK_USE_DATE_PRS_STRPTIME
749
+ #define DUK_USE_DATE_FMT_STRFTIME
750
+ #include <sys/param.h>
751
+ #include <sys/time.h>
752
+ #include <time.h>
753
+
754
+ #define DUK_USE_OS_STRING "hpux"
616
755
  #elif defined(DUK_F_POSIX)
617
756
  /* --- Generic POSIX --- */
618
757
  #define DUK_USE_DATE_NOW_GETTIMEOFDAY
@@ -697,9 +836,7 @@
697
836
  #include <stdint.h>
698
837
  #endif
699
838
 
700
- #if defined(DUK_F_CPP)
701
- #include <exception> /* std::exception */
702
- #endif
839
+ /* <exception> is only included if needed, based on DUK_USE_xxx flags. */
703
840
 
704
841
  /*
705
842
  * Architecture autodetection
@@ -711,13 +848,16 @@
711
848
  #if !defined(DUK_USE_BYTEORDER)
712
849
  #define DUK_USE_BYTEORDER 1
713
850
  #endif
714
- /* XXX: This is technically not guaranteed because it's possible to configure
715
- * an x86 to require aligned accesses with Alignment Check (AC) flag.
851
+
852
+ #define DUK_USE_PACKED_TVAL
853
+
854
+ /* FreeBSD, -m32, and clang prior to 5.0 has union aliasing issues which
855
+ * break duk_tval copying. Disable packed duk_tval automatically.
716
856
  */
717
- #if !defined(DUK_USE_ALIGN_BY)
718
- #define DUK_USE_ALIGN_BY 1
857
+ #if defined(DUK_F_FREEBSD) && defined(DUK_F_X86) && \
858
+ defined(__clang__) && defined(__clang_major__) && (__clang_major__ < 5)
859
+ #undef DUK_USE_PACKED_TVAL
719
860
  #endif
720
- #define DUK_USE_PACKED_TVAL
721
861
  #define DUK_F_PACKED_TVAL_PROVIDED
722
862
  #elif defined(DUK_F_X64)
723
863
  /* --- x64 --- */
@@ -725,12 +865,6 @@
725
865
  #if !defined(DUK_USE_BYTEORDER)
726
866
  #define DUK_USE_BYTEORDER 1
727
867
  #endif
728
- /* XXX: This is technically not guaranteed because it's possible to configure
729
- * an x86 to require aligned accesses with Alignment Check (AC) flag.
730
- */
731
- #if !defined(DUK_USE_ALIGN_BY)
732
- #define DUK_USE_ALIGN_BY 1
733
- #endif
734
868
  #undef DUK_USE_PACKED_TVAL
735
869
  #define DUK_F_PACKED_TVAL_PROVIDED
736
870
  #elif defined(DUK_F_X32)
@@ -739,55 +873,30 @@
739
873
  #if !defined(DUK_USE_BYTEORDER)
740
874
  #define DUK_USE_BYTEORDER 1
741
875
  #endif
742
- /* XXX: This is technically not guaranteed because it's possible to configure
743
- * an x86 to require aligned accesses with Alignment Check (AC) flag.
744
- */
745
- #if !defined(DUK_USE_ALIGN_BY)
746
- #define DUK_USE_ALIGN_BY 1
747
- #endif
748
876
  #define DUK_USE_PACKED_TVAL
749
877
  #define DUK_F_PACKED_TVAL_PROVIDED
750
878
  #elif defined(DUK_F_ARM32)
751
879
  /* --- ARM 32-bit --- */
752
880
  #define DUK_USE_ARCH_STRING "arm32"
753
881
  /* Byte order varies, so rely on autodetect. */
754
- #if !defined(DUK_USE_ALIGN_BY)
755
- #define DUK_USE_ALIGN_BY 4
756
- #endif
757
882
  #define DUK_USE_PACKED_TVAL
758
883
  #define DUK_F_PACKED_TVAL_PROVIDED
759
884
  #elif defined(DUK_F_ARM64)
760
885
  /* --- ARM 64-bit --- */
761
886
  #define DUK_USE_ARCH_STRING "arm64"
762
887
  /* Byte order varies, so rely on autodetect. */
763
- #if !defined(DUK_USE_ALIGN_BY)
764
- #define DUK_USE_ALIGN_BY 8
765
- #endif
766
888
  #undef DUK_USE_PACKED_TVAL
767
889
  #define DUK_F_PACKED_TVAL_PROVIDED
768
890
  #elif defined(DUK_F_MIPS32)
769
891
  /* --- MIPS 32-bit --- */
770
892
  #define DUK_USE_ARCH_STRING "mips32"
771
893
  /* MIPS byte order varies so rely on autodetection. */
772
- /* Based on 'make checkalign' there are no alignment requirements on
773
- * Linux MIPS except for doubles, which need align by 4. Alignment
774
- * requirements vary based on target though.
775
- */
776
- #if !defined(DUK_USE_ALIGN_BY)
777
- #define DUK_USE_ALIGN_BY 4
778
- #endif
779
894
  #define DUK_USE_PACKED_TVAL
780
895
  #define DUK_F_PACKED_TVAL_PROVIDED
781
896
  #elif defined(DUK_F_MIPS64)
782
897
  /* --- MIPS 64-bit --- */
783
898
  #define DUK_USE_ARCH_STRING "mips64"
784
899
  /* MIPS byte order varies so rely on autodetection. */
785
- /* Good default is a bit arbitrary because alignment requirements
786
- * depend on target. See https://github.com/svaarala/duktape/issues/102.
787
- */
788
- #if !defined(DUK_USE_ALIGN_BY)
789
- #define DUK_USE_ALIGN_BY 8
790
- #endif
791
900
  #undef DUK_USE_PACKED_TVAL
792
901
  #define DUK_F_PACKED_TVAL_PROVIDED
793
902
  #elif defined(DUK_F_PPC32)
@@ -796,9 +905,6 @@
796
905
  #if !defined(DUK_USE_BYTEORDER)
797
906
  #define DUK_USE_BYTEORDER 3
798
907
  #endif
799
- #if !defined(DUK_USE_ALIGN_BY)
800
- #define DUK_USE_ALIGN_BY 8
801
- #endif
802
908
  #define DUK_USE_PACKED_TVAL
803
909
  #define DUK_F_PACKED_TVAL_PROVIDED
804
910
  #elif defined(DUK_F_PPC64)
@@ -807,39 +913,24 @@
807
913
  #if !defined(DUK_USE_BYTEORDER)
808
914
  #define DUK_USE_BYTEORDER 3
809
915
  #endif
810
- #if !defined(DUK_USE_ALIGN_BY)
811
- #define DUK_USE_ALIGN_BY 8
812
- #endif
813
916
  #undef DUK_USE_PACKED_TVAL
814
917
  #define DUK_F_PACKED_TVAL_PROVIDED
815
918
  #elif defined(DUK_F_SPARC32)
816
919
  /* --- SPARC 32-bit --- */
817
920
  #define DUK_USE_ARCH_STRING "sparc32"
818
921
  /* SPARC byte order varies so rely on autodetection. */
819
- #if !defined(DUK_USE_ALIGN_BY)
820
- #define DUK_USE_ALIGN_BY 8
821
- #endif
822
922
  #define DUK_USE_PACKED_TVAL
823
923
  #define DUK_F_PACKED_TVAL_PROVIDED
824
924
  #elif defined(DUK_F_SPARC64)
825
925
  /* --- SPARC 64-bit --- */
826
926
  #define DUK_USE_ARCH_STRING "sparc64"
827
927
  /* SPARC byte order varies so rely on autodetection. */
828
- #if !defined(DUK_USE_ALIGN_BY)
829
- #define DUK_USE_ALIGN_BY 8
830
- #endif
831
928
  #undef DUK_USE_PACKED_TVAL
832
929
  #define DUK_F_PACKED_TVAL_PROVIDED
833
930
  #elif defined(DUK_F_SUPERH)
834
931
  /* --- SuperH --- */
835
932
  #define DUK_USE_ARCH_STRING "sh"
836
933
  /* Byte order varies, rely on autodetection. */
837
- /* Based on 'make checkalign' there are no alignment requirements on
838
- * Linux SH4, but align by 4 is probably a good basic default.
839
- */
840
- #if !defined(DUK_USE_ALIGN_BY)
841
- #define DUK_USE_ALIGN_BY 4
842
- #endif
843
934
  #define DUK_USE_PACKED_TVAL
844
935
  #define DUK_F_PACKED_TVAL_PROVIDED
845
936
  #elif defined(DUK_F_M68K)
@@ -848,9 +939,6 @@
848
939
  #if !defined(DUK_USE_BYTEORDER)
849
940
  #define DUK_USE_BYTEORDER 3
850
941
  #endif
851
- #if !defined(DUK_USE_ALIGN_BY)
852
- #define DUK_USE_ALIGN_BY 8
853
- #endif
854
942
  #define DUK_USE_PACKED_TVAL
855
943
  #define DUK_F_PACKED_TVAL_PROVIDED
856
944
  #elif defined(DUK_F_EMSCRIPTEN)
@@ -859,9 +947,6 @@
859
947
  #if !defined(DUK_USE_BYTEORDER)
860
948
  #define DUK_USE_BYTEORDER 1
861
949
  #endif
862
- #if !defined(DUK_USE_ALIGN_BY)
863
- #define DUK_USE_ALIGN_BY 8
864
- #endif
865
950
  #undef DUK_USE_PACKED_TVAL
866
951
  #define DUK_F_PACKED_TVAL_PROVIDED
867
952
  #else
@@ -908,6 +993,9 @@
908
993
  #define DUK_ALWAYS_INLINE inline __attribute__((always_inline))
909
994
  #endif
910
995
 
996
+ /* DUK_HOT */
997
+ /* DUK_COLD */
998
+
911
999
  #if defined(DUK_F_DLL_BUILD) && defined(DUK_F_WINDOWS)
912
1000
  /* MSVC dllexport/dllimport: appropriate __declspec depends on whether we're
913
1001
  * compiling Duktape or the application.
@@ -1018,6 +1106,12 @@
1018
1106
  #define DUK_ALWAYS_INLINE inline __attribute__((always_inline))
1019
1107
  #endif
1020
1108
 
1109
+ #if (defined(DUK_F_C99) || defined(DUK_F_CPP11)) && \
1110
+ defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40300)
1111
+ #define DUK_HOT __attribute__((hot))
1112
+ #define DUK_COLD __attribute__((cold))
1113
+ #endif
1114
+
1021
1115
  #if defined(DUK_F_DLL_BUILD) && defined(DUK_F_WINDOWS)
1022
1116
  /* MSVC dllexport/dllimport: appropriate __declspec depends on whether we're
1023
1117
  * compiling Duktape or the application.
@@ -1198,7 +1292,16 @@
1198
1292
  #endif
1199
1293
 
1200
1294
  /* Avoid warning when doing DUK_UNREF(some_function). */
1295
+ #if defined(_MSC_VER) && (_MSC_VER < 1500)
1296
+ #pragma warning(disable: 4100 4101 4550 4551)
1297
+ #define DUK_UNREF(x)
1298
+ #else
1201
1299
  #define DUK_UNREF(x) do { __pragma(warning(suppress:4100 4101 4550 4551)) (x); } while (0)
1300
+ #endif
1301
+
1302
+ /* Older versions of MSVC don't support the LL/ULL suffix. */
1303
+ #define DUK_U64_CONSTANT(x) x##ui64
1304
+ #define DUK_I64_CONSTANT(x) x##i64
1202
1305
  #elif defined(DUK_F_EMSCRIPTEN)
1203
1306
  /* --- Emscripten --- */
1204
1307
  #define DUK_NORETURN(decl) decl __attribute__((noreturn))
@@ -1424,10 +1527,16 @@
1424
1527
  #if defined(DUK_F_X86) || defined(DUK_F_X32) || \
1425
1528
  defined(DUK_F_M68K) || defined(DUK_F_PPC32) || \
1426
1529
  defined(DUK_F_BCC) || \
1427
- (defined(__WORDSIZE) && (__WORDSIZE == 32))
1530
+ (defined(__WORDSIZE) && (__WORDSIZE == 32)) || \
1531
+ ((defined(DUK_F_OLD_SOLARIS) || defined(DUK_F_AIX) || \
1532
+ defined(DUK_F_HPUX)) && defined(_ILP32)) || \
1533
+ defined(DUK_F_ARM32)
1428
1534
  #define DUK_F_32BIT_PTRS
1429
1535
  #elif defined(DUK_F_X64) || \
1430
- (defined(__WORDSIZE) && (__WORDSIZE == 64))
1536
+ (defined(__WORDSIZE) && (__WORDSIZE == 64)) || \
1537
+ ((defined(DUK_F_OLD_SOLARIS) || defined(DUK_F_AIX) || \
1538
+ defined(DUK_F_HPUX)) && defined(_LP64)) || \
1539
+ defined(DUK_F_ARM64)
1431
1540
  #define DUK_F_64BIT_PTRS
1432
1541
  #else
1433
1542
  /* not sure, not needed with C99 anyway */
@@ -1630,13 +1739,16 @@ typedef unsigned long long duk_uint64_t;
1630
1739
  typedef signed long long duk_int64_t;
1631
1740
  #endif
1632
1741
  #endif
1633
- #if !defined(DUK_F_HAVE_64BIT) && \
1634
- (defined(DUK_F_MINGW) || defined(DUK_F_MSVC))
1635
- /* Both MinGW and MSVC have a 64-bit type. */
1742
+ #if !defined(DUK_F_HAVE_64BIT) && defined(DUK_F_MINGW)
1636
1743
  #define DUK_F_HAVE_64BIT
1637
1744
  typedef unsigned long duk_uint64_t;
1638
1745
  typedef signed long duk_int64_t;
1639
1746
  #endif
1747
+ #if !defined(DUK_F_HAVE_64BIT) && defined(DUK_F_MSVC)
1748
+ #define DUK_F_HAVE_64BIT
1749
+ typedef unsigned __int64 duk_uint64_t;
1750
+ typedef signed __int64 duk_int64_t;
1751
+ #endif
1640
1752
  #if !defined(DUK_F_HAVE_64BIT)
1641
1753
  /* cannot detect 64-bit type, not always needed so don't error */
1642
1754
  #endif
@@ -1844,10 +1956,10 @@ typedef duk_uint_fast16_t duk_small_uint_fast_t;
1844
1956
  #define DUK_SMALL_UINT_FAST_MIN DUK_UINT_FAST16_MIN
1845
1957
  #define DUK_SMALL_UINT_FAST_MAX DUK_UINT_FAST16_MAX
1846
1958
 
1847
- /* Boolean values are represented with the platform 'int'. */
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
1959
+ /* Boolean values are represented with the platform 'unsigned int'. */
1960
+ typedef duk_small_uint_t duk_bool_t;
1961
+ #define DUK_BOOL_MIN DUK_SMALL_UINT_MIN
1962
+ #define DUK_BOOL_MAX DUK_SMALL_UINT_MAX
1851
1963
 
1852
1964
  /* Index values must have at least 32-bit signed range. */
1853
1965
  typedef duk_int_t duk_idx_t;
@@ -1916,7 +2028,10 @@ typedef double duk_double_t;
1916
2028
  #endif
1917
2029
  #endif
1918
2030
 
1919
- /* Type for public API calls. */
2031
+ /* Type used in public API declarations and user code. Typedef maps to
2032
+ * 'struct duk_hthread' like the 'duk_hthread' typedef which is used
2033
+ * exclusively in internals.
2034
+ */
1920
2035
  typedef struct duk_hthread duk_context;
1921
2036
 
1922
2037
  /* Check whether we should use 64-bit integers or not.
@@ -2050,7 +2165,8 @@ typedef struct duk_hthread duk_context;
2050
2165
  #define DUK_DOUBLE_INFINITY (__builtin_inf())
2051
2166
  #elif defined(INFINITY)
2052
2167
  #define DUK_DOUBLE_INFINITY ((double) INFINITY)
2053
- #elif !defined(DUK_F_VBCC) && !defined(DUK_F_MSVC) && !defined(DUK_F_BCC)
2168
+ #elif !defined(DUK_F_VBCC) && !defined(DUK_F_MSVC) && !defined(DUK_F_BCC) && \
2169
+ !defined(DUK_F_OLD_SOLARIS) && !defined(DUK_F_AIX)
2054
2170
  #define DUK_DOUBLE_INFINITY (1.0 / 0.0)
2055
2171
  #else
2056
2172
  /* In VBCC (1.0 / 0.0) results in a warning and 0.0 instead of infinity.
@@ -2066,7 +2182,8 @@ typedef struct duk_hthread duk_context;
2066
2182
  #undef DUK_USE_COMPUTED_NAN
2067
2183
  #if defined(NAN)
2068
2184
  #define DUK_DOUBLE_NAN NAN
2069
- #elif !defined(DUK_F_VBCC) && !defined(DUK_F_MSVC) && !defined(DUK_F_BCC)
2185
+ #elif !defined(DUK_F_VBCC) && !defined(DUK_F_MSVC) && !defined(DUK_F_BCC) && \
2186
+ !defined(DUK_F_OLD_SOLARIS) && !defined(DUK_F_AIX)
2070
2187
  #define DUK_DOUBLE_NAN (0.0 / 0.0)
2071
2188
  #else
2072
2189
  /* In VBCC (0.0 / 0.0) results in a warning and 0.0 instead of NaN.
@@ -2115,6 +2232,9 @@ typedef struct duk_hthread duk_context;
2115
2232
  * To be safe, use replacements.
2116
2233
  */
2117
2234
  #define DUK_F_USE_REPL_ALL
2235
+ #elif defined(DUK_F_AIX)
2236
+ /* Older versions may be missing isnan(), etc. */
2237
+ #define DUK_F_USE_REPL_ALL
2118
2238
  #endif
2119
2239
 
2120
2240
  #if defined(DUK_F_USE_REPL_ALL)
@@ -2203,9 +2323,10 @@ typedef struct duk_hthread duk_context;
2203
2323
  /* The functions below exist only in C99/C++11 or later and need a workaround
2204
2324
  * for platforms that don't include them. MSVC isn't detected as C99, but
2205
2325
  * these functions also exist in MSVC 2013 and later so include a clause for
2206
- * that too.
2326
+ * that too. Android doesn't have log2; disable all of these for Android.
2207
2327
  */
2208
- #if defined(DUK_F_C99) || defined(DUK_F_CPP11) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
2328
+ #if (defined(DUK_F_C99) || defined(DUK_F_CPP11) || (defined(_MSC_VER) && (_MSC_VER >= 1800))) && \
2329
+ !defined(DUK_F_ANDROID) && !defined(DUK_F_MINT)
2209
2330
  #if !defined(DUK_CBRT)
2210
2331
  #define DUK_CBRT cbrt
2211
2332
  #endif
@@ -2218,7 +2339,7 @@ typedef struct duk_hthread duk_context;
2218
2339
  #if !defined(DUK_TRUNC)
2219
2340
  #define DUK_TRUNC trunc
2220
2341
  #endif
2221
- #endif /* DUK_F_C99 */
2342
+ #endif /* DUK_F_C99 etc */
2222
2343
 
2223
2344
  /* NetBSD 6.0 x86 (at least) has a few problems with pow() semantics,
2224
2345
  * see test-bug-netbsd-math-pow.js. MinGW has similar (but different)
@@ -2372,10 +2493,13 @@ typedef struct duk_hthread duk_context;
2372
2493
  *
2373
2494
  * Assume unaligned accesses are not supported unless specifically allowed
2374
2495
  * in the target platform. Some platforms may support unaligned accesses
2375
- * but alignment to 4 or 8 may still be desirable.
2496
+ * but alignment to 4 or 8 may still be desirable. Note that unaligned
2497
+ * accesses (and even pointers) relative to natural alignment (regardless
2498
+ * of target alignment) are technically undefined behavior and thus
2499
+ * compiler/architecture specific.
2376
2500
  */
2377
2501
 
2378
- /* If not provided, use safe default for alignment. */
2502
+ /* If not forced, use safe default for alignment. */
2379
2503
  #if !defined(DUK_USE_ALIGN_BY)
2380
2504
  #define DUK_USE_ALIGN_BY 8
2381
2505
  #endif
@@ -2427,17 +2551,34 @@ typedef struct duk_hthread duk_context;
2427
2551
  */
2428
2552
  #define DUK_CAUSE_SEGFAULT() do { *((volatile duk_uint32_t *) NULL) = (duk_uint32_t) 0xdeadbeefUL; } while (0)
2429
2553
  #endif
2554
+
2430
2555
  #if !defined(DUK_UNREF)
2431
2556
  /* Macro for suppressing warnings for potentially unreferenced variables.
2432
2557
  * The variables can be actually unreferenced or unreferenced in some
2433
2558
  * specific cases only; for instance, if a variable is only debug printed,
2434
- * it is unreferenced when debug printing is disabled.
2559
+ * it is unreferenced when debug printing is disabled. May cause warnings
2560
+ * for volatile arguments.
2435
2561
  */
2436
2562
  #define DUK_UNREF(x) do { (void) (x); } while (0)
2437
2563
  #endif
2438
- #if !defined(DUK_NORETURN)
2564
+
2565
+ /* Fillin for DUK_NORETURN; DUK_WO_NORETURN() is used to insert dummy
2566
+ * dummy statements after noreturn calls to silence harmless compiler
2567
+ * warnings, e.g.:
2568
+ *
2569
+ * DUK_ERROR_TYPE(thr, "aiee");
2570
+ * DUK_WO_NORETURN(return 0;);
2571
+ *
2572
+ * Statements inside DUK_WO_NORETURN() must NEVER be actually reachable,
2573
+ * and they're only included to satisfy the compiler.
2574
+ */
2575
+ #if defined(DUK_NORETURN)
2576
+ #define DUK_WO_NORETURN(stmt) do { } while (0)
2577
+ #else
2439
2578
  #define DUK_NORETURN(decl) decl
2579
+ #define DUK_WO_NORETURN(stmt) do { stmt } while (0)
2440
2580
  #endif
2581
+
2441
2582
  #if !defined(DUK_UNREACHABLE)
2442
2583
  /* Don't know how to declare unreachable point, so don't do it; this
2443
2584
  * may cause some spurious compilation warnings (e.g. "variable used
@@ -2445,6 +2586,7 @@ typedef struct duk_hthread duk_context;
2445
2586
  */
2446
2587
  #define DUK_UNREACHABLE() do { } while (0)
2447
2588
  #endif
2589
+
2448
2590
  #if !defined(DUK_LOSE_CONST)
2449
2591
  /* Convert any input pointer into a "void *", losing a const qualifier.
2450
2592
  * This is not fully portable because casting through duk_uintptr_t may
@@ -2473,6 +2615,13 @@ typedef struct duk_hthread duk_context;
2473
2615
  #define DUK_ALWAYS_INLINE /*nop*/
2474
2616
  #endif
2475
2617
 
2618
+ #if !defined(DUK_HOT)
2619
+ #define DUK_HOT /*nop*/
2620
+ #endif
2621
+ #if !defined(DUK_COLD)
2622
+ #define DUK_COLD /*nop*/
2623
+ #endif
2624
+
2476
2625
  #if !defined(DUK_EXTERNAL_DECL)
2477
2626
  #define DUK_EXTERNAL_DECL extern
2478
2627
  #endif
@@ -2549,6 +2698,13 @@ typedef struct duk_hthread duk_context;
2549
2698
  #undef DUK_USE_GCC_PRAGMAS
2550
2699
  #endif
2551
2700
 
2701
+ #if !defined(DUK_U64_CONSTANT)
2702
+ #define DUK_U64_CONSTANT(x) x##ULL
2703
+ #endif
2704
+ #if !defined(DUK_I64_CONSTANT)
2705
+ #define DUK_I64_CONSTANT(x) x##LL
2706
+ #endif
2707
+
2552
2708
  /* Workaround for GH-323: avoid inlining control when compiling from
2553
2709
  * multiple sources, as it causes compiler portability trouble.
2554
2710
  */
@@ -2598,8 +2754,8 @@ typedef struct duk_hthread duk_context;
2598
2754
  #if defined(DUK_F_PACKED_TVAL_POSSIBLE)
2599
2755
  #define DUK_USE_PACKED_TVAL
2600
2756
  #endif
2601
-
2602
2757
  #undef DUK_F_PACKED_TVAL_POSSIBLE
2758
+
2603
2759
  #endif /* DUK_F_PACKED_TVAL_PROVIDED */
2604
2760
  /* Object property allocation layout has implications for memory and code
2605
2761
  * footprint and generated code size/speed. The best layout also depends
@@ -2634,6 +2790,7 @@ typedef struct duk_hthread duk_context;
2634
2790
  * Autogenerated defaults
2635
2791
  */
2636
2792
 
2793
+ #undef DUK_USE_ALLOW_UNDEFINED_BEHAVIOR
2637
2794
  #define DUK_USE_ARRAY_BUILTIN
2638
2795
  #define DUK_USE_ARRAY_FASTPATH
2639
2796
  #define DUK_USE_ARRAY_PROP_FASTPATH
@@ -2642,10 +2799,14 @@ typedef struct duk_hthread duk_context;
2642
2799
  #define DUK_USE_AUGMENT_ERROR_THROW
2643
2800
  #define DUK_USE_AVOID_PLATFORM_FUNCPTRS
2644
2801
  #define DUK_USE_BASE64_FASTPATH
2802
+ #define DUK_USE_BASE64_SUPPORT
2645
2803
  #define DUK_USE_BOOLEAN_BUILTIN
2646
2804
  #define DUK_USE_BUFFEROBJECT_SUPPORT
2647
2805
  #undef DUK_USE_BUFLEN16
2648
2806
  #define DUK_USE_BYTECODE_DUMP_SUPPORT
2807
+ #define DUK_USE_CACHE_ACTIVATION
2808
+ #define DUK_USE_CACHE_CATCHER
2809
+ #define DUK_USE_CALLSTACK_LIMIT 10000
2649
2810
  #define DUK_USE_COMMONJS_MODULES
2650
2811
  #define DUK_USE_COMPILER_RECLIMIT 2500
2651
2812
  #define DUK_USE_COROUTINE_SUPPORT
@@ -2680,7 +2841,10 @@ typedef struct duk_hthread duk_context;
2680
2841
  #define DUK_USE_ES6_PROXY
2681
2842
  #define DUK_USE_ES6_REGEXP_SYNTAX
2682
2843
  #define DUK_USE_ES6_UNICODE_ESCAPE
2844
+ #define DUK_USE_ES7
2683
2845
  #define DUK_USE_ES7_EXP_OPERATOR
2846
+ #define DUK_USE_ES8
2847
+ #define DUK_USE_ES9
2684
2848
  #define DUK_USE_ESBC_LIMITS
2685
2849
  #define DUK_USE_ESBC_MAX_BYTES 2147418112L
2686
2850
  #define DUK_USE_ESBC_MAX_LINENUMBER 2147418112L
@@ -2695,7 +2859,9 @@ typedef struct duk_hthread duk_context;
2695
2859
  #undef DUK_USE_FASTINT
2696
2860
  #define DUK_USE_FAST_REFCOUNT_DEFAULT
2697
2861
  #undef DUK_USE_FATAL_HANDLER
2862
+ #define DUK_USE_FATAL_MAXLEN 128
2698
2863
  #define DUK_USE_FINALIZER_SUPPORT
2864
+ #undef DUK_USE_FINALIZER_TORTURE
2699
2865
  #undef DUK_USE_FUNCPTR16
2700
2866
  #undef DUK_USE_FUNCPTR_DEC16
2701
2867
  #undef DUK_USE_FUNCPTR_ENC16
@@ -2703,17 +2869,30 @@ typedef struct duk_hthread duk_context;
2703
2869
  #define DUK_USE_FUNC_FILENAME_PROPERTY
2704
2870
  #define DUK_USE_FUNC_NAME_PROPERTY
2705
2871
  #undef DUK_USE_GC_TORTURE
2872
+ #undef DUK_USE_GET_MONOTONIC_TIME
2706
2873
  #undef DUK_USE_GET_RANDOM_DOUBLE
2874
+ #undef DUK_USE_GLOBAL_BINDING
2707
2875
  #define DUK_USE_GLOBAL_BUILTIN
2708
2876
  #undef DUK_USE_HEAPPTR16
2709
2877
  #undef DUK_USE_HEAPPTR_DEC16
2710
2878
  #undef DUK_USE_HEAPPTR_ENC16
2711
2879
  #define DUK_USE_HEX_FASTPATH
2880
+ #define DUK_USE_HEX_SUPPORT
2881
+ #define DUK_USE_HOBJECT_ARRAY_ABANDON_LIMIT 2
2882
+ #define DUK_USE_HOBJECT_ARRAY_FAST_RESIZE_LIMIT 9
2883
+ #define DUK_USE_HOBJECT_ARRAY_MINGROW_ADD 16
2884
+ #define DUK_USE_HOBJECT_ARRAY_MINGROW_DIVISOR 8
2885
+ #define DUK_USE_HOBJECT_ENTRY_MINGROW_ADD 16
2886
+ #define DUK_USE_HOBJECT_ENTRY_MINGROW_DIVISOR 8
2712
2887
  #define DUK_USE_HOBJECT_HASH_PART
2888
+ #define DUK_USE_HOBJECT_HASH_PROP_LIMIT 8
2713
2889
  #define DUK_USE_HSTRING_ARRIDX
2714
2890
  #define DUK_USE_HSTRING_CLEN
2715
2891
  #undef DUK_USE_HSTRING_EXTDATA
2892
+ #define DUK_USE_HSTRING_LAZY_CLEN
2893
+ #define DUK_USE_HTML_COMMENTS
2716
2894
  #define DUK_USE_IDCHAR_FASTPATH
2895
+ #undef DUK_USE_INJECT_HEAP_ALLOC_ERROR
2717
2896
  #undef DUK_USE_INTERRUPT_COUNTER
2718
2897
  #undef DUK_USE_INTERRUPT_DEBUG_FIXUP
2719
2898
  #define DUK_USE_JC
@@ -2729,13 +2908,10 @@ typedef struct duk_hthread duk_context;
2729
2908
  #define DUK_USE_JX
2730
2909
  #define DUK_USE_LEXER_SLIDING_WINDOW
2731
2910
  #undef DUK_USE_LIGHTFUNC_BUILTINS
2732
- #undef DUK_USE_MARKANDSWEEP_FINALIZER_TORTURE
2911
+ #define DUK_USE_LITCACHE_SIZE 256
2733
2912
  #define DUK_USE_MARK_AND_SWEEP_RECLIMIT 256
2734
2913
  #define DUK_USE_MATH_BUILTIN
2735
- #define DUK_USE_MS_STRINGTABLE_RESIZE
2736
2914
  #define DUK_USE_NATIVE_CALL_RECLIMIT 1000
2737
- #define DUK_USE_NONSTD_ARRAY_CONCAT_TRAILER
2738
- #define DUK_USE_NONSTD_ARRAY_MAP_TRAILER
2739
2915
  #define DUK_USE_NONSTD_ARRAY_SPLICE_DELCOUNT
2740
2916
  #undef DUK_USE_NONSTD_FUNC_CALLER_PROPERTY
2741
2917
  #undef DUK_USE_NONSTD_FUNC_SOURCE_PROPERTY
@@ -2749,12 +2925,15 @@ typedef struct duk_hthread duk_context;
2749
2925
  #undef DUK_USE_OBJSIZES16
2750
2926
  #undef DUK_USE_PARANOID_ERRORS
2751
2927
  #define DUK_USE_PC2LINE
2928
+ #define DUK_USE_PERFORMANCE_BUILTIN
2752
2929
  #undef DUK_USE_PREFER_SIZE
2930
+ #undef DUK_USE_PROMISE_BUILTIN
2753
2931
  #define DUK_USE_PROVIDE_DEFAULT_ALLOC_FUNCTIONS
2754
2932
  #undef DUK_USE_REFCOUNT16
2933
+ #define DUK_USE_REFCOUNT32
2755
2934
  #define DUK_USE_REFERENCE_COUNTING
2756
2935
  #define DUK_USE_REFLECT_BUILTIN
2757
- #undef DUK_USE_REFZERO_FINALIZER_TORTURE
2936
+ #define DUK_USE_REGEXP_CANON_BITMAP
2758
2937
  #undef DUK_USE_REGEXP_CANON_WORKAROUND
2759
2938
  #define DUK_USE_REGEXP_COMPILER_RECLIMIT 10000
2760
2939
  #define DUK_USE_REGEXP_EXECUTOR_RECLIMIT 10000
@@ -2766,6 +2945,7 @@ typedef struct duk_hthread duk_context;
2766
2945
  #undef DUK_USE_ROM_STRINGS
2767
2946
  #define DUK_USE_SECTION_B
2768
2947
  #undef DUK_USE_SELF_TESTS
2948
+ #define DUK_USE_SHEBANG_COMMENTS
2769
2949
  #undef DUK_USE_SHUFFLE_TORTURE
2770
2950
  #define DUK_USE_SOURCE_NONBMP
2771
2951
  #undef DUK_USE_STRHASH16
@@ -2775,15 +2955,23 @@ typedef struct duk_hthread duk_context;
2775
2955
  #undef DUK_USE_STRICT_UTF8_SOURCE
2776
2956
  #define DUK_USE_STRING_BUILTIN
2777
2957
  #undef DUK_USE_STRLEN16
2778
- #undef DUK_USE_STRTAB_CHAIN
2779
- #undef DUK_USE_STRTAB_CHAIN_SIZE
2780
- #define DUK_USE_STRTAB_PROBE
2958
+ #define DUK_USE_STRTAB_GROW_LIMIT 17
2959
+ #define DUK_USE_STRTAB_MAXSIZE 268435456L
2960
+ #define DUK_USE_STRTAB_MINSIZE 1024
2961
+ #undef DUK_USE_STRTAB_PTRCOMP
2962
+ #define DUK_USE_STRTAB_RESIZE_CHECK_MASK 255
2963
+ #define DUK_USE_STRTAB_SHRINK_LIMIT 6
2964
+ #undef DUK_USE_STRTAB_TORTURE
2781
2965
  #undef DUK_USE_SYMBOL_BUILTIN
2782
2966
  #define DUK_USE_TAILCALL
2783
2967
  #define DUK_USE_TARGET_INFO "unknown"
2784
2968
  #define DUK_USE_TRACEBACKS
2785
2969
  #define DUK_USE_TRACEBACK_DEPTH 10
2786
2970
  #define DUK_USE_USER_DECLARE() /* no user declarations */
2971
+ #define DUK_USE_VALSTACK_GROW_SHIFT 2
2972
+ #define DUK_USE_VALSTACK_LIMIT 1000000L
2973
+ #define DUK_USE_VALSTACK_SHRINK_CHECK_SHIFT 2
2974
+ #define DUK_USE_VALSTACK_SHRINK_SLACK_SHIFT 4
2787
2975
  #undef DUK_USE_VALSTACK_UNSAFE
2788
2976
  #define DUK_USE_VERBOSE_ERRORS
2789
2977
  #define DUK_USE_VERBOSE_EXECUTOR_ERRORS
@@ -2798,6 +2986,15 @@ typedef struct duk_hthread duk_context;
2798
2986
 
2799
2987
  /* __OVERRIDE_DEFINES__ */
2800
2988
 
2989
+ /*
2990
+ * Conditional includes
2991
+ */
2992
+
2993
+ #if defined(DUK_F_CPP) && defined(DUK_USE_CPP_EXCEPTIONS)
2994
+ #include <exception> /* std::exception */
2995
+ #include <stdexcept> /* std::runtime_error */
2996
+ #endif
2997
+
2801
2998
  /*
2802
2999
  * Date provider selection
2803
3000
  *
@@ -2811,21 +3008,25 @@ typedef struct duk_hthread duk_context;
2811
3008
  #if defined(DUK_USE_DATE_GET_NOW)
2812
3009
  /* External provider already defined. */
2813
3010
  #elif defined(DUK_USE_DATE_NOW_GETTIMEOFDAY)
2814
- #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_gettimeofday((ctx))
3011
+ #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_gettimeofday()
2815
3012
  #elif defined(DUK_USE_DATE_NOW_TIME)
2816
- #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_time((ctx))
3013
+ #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_time()
2817
3014
  #elif defined(DUK_USE_DATE_NOW_WINDOWS)
2818
- #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_windows((ctx))
3015
+ #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_windows()
3016
+ #elif defined(DUK_USE_DATE_NOW_WINDOWS_SUBMS)
3017
+ #define DUK_USE_DATE_GET_NOW(ctx) duk_bi_date_get_now_windows_subms()
2819
3018
  #else
2820
3019
  #error no provider for DUK_USE_DATE_GET_NOW()
2821
3020
  #endif
2822
3021
 
2823
3022
  #if defined(DUK_USE_DATE_GET_LOCAL_TZOFFSET)
2824
3023
  /* External provider already defined. */
2825
- #elif defined(DUK_USE_DATE_TZO_GMTIME_R) || defined(DUK_USE_DATE_TZO_GMTIME)
3024
+ #elif defined(DUK_USE_DATE_TZO_GMTIME_R) || defined(DUK_USE_DATE_TZO_GMTIME_S) || defined(DUK_USE_DATE_TZO_GMTIME)
2826
3025
  #define DUK_USE_DATE_GET_LOCAL_TZOFFSET(d) duk_bi_date_get_local_tzoffset_gmtime((d))
2827
3026
  #elif defined(DUK_USE_DATE_TZO_WINDOWS)
2828
3027
  #define DUK_USE_DATE_GET_LOCAL_TZOFFSET(d) duk_bi_date_get_local_tzoffset_windows((d))
3028
+ #elif defined(DUK_USE_DATE_TZO_WINDOWS_NO_DST)
3029
+ #define DUK_USE_DATE_GET_LOCAL_TZOFFSET(d) duk_bi_date_get_local_tzoffset_windows_no_dst((d))
2829
3030
  #else
2830
3031
  #error no provider for DUK_USE_DATE_GET_LOCAL_TZOFFSET()
2831
3032
  #endif
@@ -2849,6 +3050,16 @@ typedef struct duk_hthread duk_context;
2849
3050
  /* No provider for DUK_USE_DATE_FORMAT_STRING(), fall back to ISO 8601 only. */
2850
3051
  #endif
2851
3052
 
3053
+ #if defined(DUK_USE_GET_MONOTONIC_TIME)
3054
+ /* External provider already defined. */
3055
+ #elif defined(DUK_USE_GET_MONOTONIC_TIME_CLOCK_GETTIME)
3056
+ #define DUK_USE_GET_MONOTONIC_TIME(ctx) duk_bi_date_get_monotonic_time_clock_gettime()
3057
+ #elif defined(DUK_USE_GET_MONOTONIC_TIME_WINDOWS_QPC)
3058
+ #define DUK_USE_GET_MONOTONIC_TIME(ctx) duk_bi_date_get_monotonic_time_windows_qpc()
3059
+ #else
3060
+ /* No provider for DUK_USE_GET_MONOTONIC_TIME(), fall back to DUK_USE_DATE_GET_NOW(). */
3061
+ #endif
3062
+
2852
3063
  #endif /* DUK_COMPILING_DUKTAPE */
2853
3064
 
2854
3065
  /*