@zigc/lib 0.17.0-dev.135 → 0.17.0-dev.224

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.
Files changed (713) hide show
  1. package/c/stdlib.zig +32 -22
  2. package/compiler/aro/aro/Compilation.zig +0 -3
  3. package/compiler/translate-c/ast.zig +5 -2
  4. package/compiler_rt/arm.zig +3 -3
  5. package/compiler_rt/trunctfhf2.zig +3 -0
  6. package/compiler_rt.zig +1 -22
  7. package/docs/wasm/markdown/Parser.zig +5 -9
  8. package/include/__clang_spirv_builtins.h +12 -12
  9. package/include/__float_float.h +176 -0
  10. package/include/__float_header_macro.h +12 -0
  11. package/include/__float_infinity_nan.h +20 -0
  12. package/include/amo.h +131 -0
  13. package/include/amxavx512intrin.h +215 -1
  14. package/include/amxintrin.h +0 -2
  15. package/include/arm_acle.h +37 -27
  16. package/include/arm_neon.h +218 -82
  17. package/include/arm_sme.h +8 -8
  18. package/include/arm_sve.h +4162 -3782
  19. package/include/avx10_2_512bf16intrin.h +19 -12
  20. package/include/avx10_2_512convertintrin.h +1 -1
  21. package/include/avx10_2_512niintrin.h +31 -31
  22. package/include/avx10_2_512satcvtdsintrin.h +1 -1
  23. package/include/avx10_2bf16intrin.h +54 -45
  24. package/include/avx10_2convertintrin.h +2 -2
  25. package/include/avx10_2copyintrin.h +1 -1
  26. package/include/avx10_2niintrin.h +14 -14
  27. package/include/avx10_2satcvtdsintrin.h +2 -2
  28. package/include/avx2intrin.h +275 -377
  29. package/include/avx512bf16intrin.h +25 -16
  30. package/include/avx512bitalgintrin.h +19 -30
  31. package/include/avx512bwintrin.h +386 -505
  32. package/include/avx512cdintrin.h +42 -55
  33. package/include/avx512dqintrin.h +132 -161
  34. package/include/avx512fintrin.h +1015 -1424
  35. package/include/avx512fp16intrin.h +112 -110
  36. package/include/avx512ifmaintrin.h +32 -34
  37. package/include/avx512ifmavlintrin.h +73 -46
  38. package/include/avx512vbmi2intrin.h +43 -32
  39. package/include/avx512vbmiintrin.h +19 -27
  40. package/include/avx512vbmivlintrin.h +35 -49
  41. package/include/avx512vlbf16intrin.h +32 -22
  42. package/include/avx512vlbitalgintrin.h +37 -53
  43. package/include/avx512vlbwintrin.h +470 -573
  44. package/include/avx512vlcdintrin.h +74 -102
  45. package/include/avx512vldqintrin.h +110 -127
  46. package/include/avx512vlfp16intrin.h +130 -111
  47. package/include/avx512vlintrin.h +945 -1299
  48. package/include/avx512vlvbmi2intrin.h +78 -63
  49. package/include/avx512vlvnniintrin.h +21 -18
  50. package/include/avx512vlvp2intersectintrin.h +2 -2
  51. package/include/avx512vnniintrin.h +10 -10
  52. package/include/avx512vp2intersectintrin.h +1 -2
  53. package/include/avx512vpopcntdqintrin.h +8 -10
  54. package/include/avx512vpopcntdqvlintrin.h +17 -15
  55. package/include/avxifmaintrin.h +16 -0
  56. package/include/avxintrin.h +165 -241
  57. package/include/avxvnniint16intrin.h +118 -99
  58. package/include/avxvnniint8intrin.h +56 -32
  59. package/include/avxvnniintrin.h +16 -8
  60. package/include/cpuid.h +101 -4
  61. package/include/emmintrin.h +168 -168
  62. package/include/f16cintrin.h +23 -9
  63. package/include/float.h +16 -155
  64. package/include/fma4intrin.h +98 -96
  65. package/include/fmaintrin.h +96 -66
  66. package/include/gfniintrin.h +21 -16
  67. package/include/hexagon_types.h +23 -20
  68. package/include/hvx_hexagon_protos.h +649 -860
  69. package/include/immintrin.h +0 -12
  70. package/include/intrin.h +4 -0
  71. package/include/lasxintrin.h +113 -0
  72. package/include/llvm_libc_wrappers/assert.h +3 -5
  73. package/include/llvm_libc_wrappers/ctype.h +3 -115
  74. package/include/llvm_libc_wrappers/inttypes.h +3 -5
  75. package/include/llvm_libc_wrappers/stdio.h +10 -38
  76. package/include/llvm_libc_wrappers/stdlib.h +3 -24
  77. package/include/llvm_libc_wrappers/string.h +2 -70
  78. package/include/llvm_libc_wrappers/time.h +4 -10
  79. package/include/mmintrin.h +188 -257
  80. package/include/module.modulemap +23 -4
  81. package/include/movrs_avx10_2_512intrin.h +2 -2
  82. package/include/movrs_avx10_2intrin.h +4 -4
  83. package/include/pmmintrin.h +12 -24
  84. package/include/ptrauth.h +16 -2
  85. package/include/riscv_mips.h +34 -0
  86. package/include/riscv_nds.h +89 -0
  87. package/include/sifive_vector.h +58 -2
  88. package/include/sm4evexintrin.h +2 -2
  89. package/include/smmintrin.h +77 -59
  90. package/include/spirvintrin.h +194 -0
  91. package/include/stddefer.h +19 -0
  92. package/include/tmmintrin.h +116 -147
  93. package/include/vaesintrin.h +1 -2
  94. package/include/xmmintrin.h +44 -70
  95. package/include/xopintrin.h +20 -10
  96. package/libcxx/include/__algorithm/all_of.h +11 -5
  97. package/libcxx/include/__algorithm/comp.h +4 -0
  98. package/libcxx/include/__algorithm/copy.h +28 -147
  99. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  100. package/libcxx/include/__algorithm/copy_n.h +50 -16
  101. package/libcxx/include/__algorithm/count.h +2 -2
  102. package/libcxx/include/__algorithm/equal.h +43 -55
  103. package/libcxx/include/__algorithm/fill.h +26 -8
  104. package/libcxx/include/__algorithm/fill_n.h +32 -46
  105. package/libcxx/include/__algorithm/find.h +96 -39
  106. package/libcxx/include/__algorithm/find_end.h +105 -0
  107. package/libcxx/include/__algorithm/for_each.h +18 -24
  108. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  109. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  110. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  111. package/libcxx/include/__algorithm/generate.h +4 -2
  112. package/libcxx/include/__algorithm/generate_n.h +19 -6
  113. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  114. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  115. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  116. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  117. package/libcxx/include/__algorithm/make_heap.h +16 -4
  118. package/libcxx/include/__algorithm/mismatch.h +2 -2
  119. package/libcxx/include/__algorithm/move.h +8 -19
  120. package/libcxx/include/__algorithm/move_backward.h +9 -24
  121. package/libcxx/include/__algorithm/none_of.h +4 -4
  122. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  123. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  124. package/libcxx/include/__algorithm/pstl.h +9 -9
  125. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  126. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  127. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  128. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  129. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  130. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  131. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  132. package/libcxx/include/__algorithm/rotate.h +27 -44
  133. package/libcxx/include/__algorithm/search_n.h +49 -37
  134. package/libcxx/include/__algorithm/sift_down.h +19 -18
  135. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  136. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  137. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  138. package/libcxx/include/__assertion_handler +31 -4
  139. package/libcxx/include/__atomic/atomic.h +36 -60
  140. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  141. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  142. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  143. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  144. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  145. package/libcxx/include/__atomic/contention_t.h +27 -3
  146. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  147. package/libcxx/include/__bit/countl.h +1 -2
  148. package/libcxx/include/__bit/countr.h +1 -2
  149. package/libcxx/include/__bit/has_single_bit.h +1 -1
  150. package/libcxx/include/__bit/popcount.h +0 -1
  151. package/libcxx/include/__bit/rotate.h +15 -26
  152. package/libcxx/include/__bit_reference +207 -18
  153. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  154. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  155. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  156. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  157. package/libcxx/include/__charconv/traits.h +3 -24
  158. package/libcxx/include/__chrono/day.h +11 -0
  159. package/libcxx/include/__chrono/duration.h +58 -33
  160. package/libcxx/include/__chrono/file_clock.h +4 -2
  161. package/libcxx/include/__chrono/is_clock.h +72 -0
  162. package/libcxx/include/__chrono/leap_second.h +13 -0
  163. package/libcxx/include/__chrono/month.h +13 -0
  164. package/libcxx/include/__chrono/month_weekday.h +22 -0
  165. package/libcxx/include/__chrono/monthday.h +20 -0
  166. package/libcxx/include/__chrono/steady_clock.h +1 -1
  167. package/libcxx/include/__chrono/system_clock.h +3 -3
  168. package/libcxx/include/__chrono/time_point.h +37 -13
  169. package/libcxx/include/__chrono/weekday.h +25 -0
  170. package/libcxx/include/__chrono/year.h +11 -0
  171. package/libcxx/include/__chrono/year_month.h +13 -0
  172. package/libcxx/include/__chrono/year_month_day.h +23 -0
  173. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  174. package/libcxx/include/__chrono/zoned_time.h +16 -0
  175. package/libcxx/include/__compare/is_eq.h +6 -6
  176. package/libcxx/include/__compare/strong_order.h +12 -30
  177. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  178. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  179. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  180. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  181. package/libcxx/include/__config +63 -280
  182. package/libcxx/include/__configuration/abi.h +14 -24
  183. package/libcxx/include/__configuration/availability.h +65 -118
  184. package/libcxx/include/__configuration/compiler.h +6 -6
  185. package/libcxx/include/__configuration/experimental.h +38 -0
  186. package/libcxx/include/__configuration/hardening.h +215 -0
  187. package/libcxx/include/__configuration/language.h +3 -0
  188. package/libcxx/include/__configuration/platform.h +9 -16
  189. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  190. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  191. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  192. package/libcxx/include/__exception/exception.h +6 -4
  193. package/libcxx/include/__exception/exception_ptr.h +27 -5
  194. package/libcxx/include/__exception/nested_exception.h +2 -2
  195. package/libcxx/include/__exception/operations.h +5 -5
  196. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  197. package/libcxx/include/__expected/expected.h +62 -64
  198. package/libcxx/include/__expected/unexpected.h +4 -4
  199. package/libcxx/include/__filesystem/copy_options.h +4 -4
  200. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  201. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  202. package/libcxx/include/__filesystem/directory_options.h +7 -4
  203. package/libcxx/include/__filesystem/file_status.h +3 -3
  204. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  205. package/libcxx/include/__filesystem/operations.h +97 -66
  206. package/libcxx/include/__filesystem/path.h +68 -64
  207. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  208. package/libcxx/include/__filesystem/perm_options.h +4 -4
  209. package/libcxx/include/__filesystem/perms.h +4 -4
  210. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  211. package/libcxx/include/__filesystem/space_info.h +1 -1
  212. package/libcxx/include/__filesystem/u8path.h +12 -14
  213. package/libcxx/include/__flat_map/flat_map.h +88 -71
  214. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  215. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  216. package/libcxx/include/__flat_map/utils.h +1 -0
  217. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  218. package/libcxx/include/__flat_set/flat_set.h +86 -68
  219. package/libcxx/include/__format/concepts.h +0 -14
  220. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  221. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  222. package/libcxx/include/__format/format_arg.h +7 -10
  223. package/libcxx/include/__format/format_args.h +1 -1
  224. package/libcxx/include/__format/format_context.h +5 -5
  225. package/libcxx/include/__format/format_parse_context.h +2 -2
  226. package/libcxx/include/__format/formatter_output.h +30 -34
  227. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  228. package/libcxx/include/__format/range_default_formatter.h +2 -41
  229. package/libcxx/include/__format/range_format.h +71 -0
  230. package/libcxx/include/__format/range_formatter.h +1 -0
  231. package/libcxx/include/__format/width_estimation_table.h +4 -2
  232. package/libcxx/include/__functional/bind.h +10 -15
  233. package/libcxx/include/__functional/bind_back.h +1 -1
  234. package/libcxx/include/__functional/bind_front.h +1 -1
  235. package/libcxx/include/__functional/function.h +57 -75
  236. package/libcxx/include/__functional/hash.h +1 -10
  237. package/libcxx/include/__functional/identity.h +1 -1
  238. package/libcxx/include/__functional/is_transparent.h +8 -0
  239. package/libcxx/include/__functional/mem_fn.h +2 -1
  240. package/libcxx/include/__functional/operations.h +18 -0
  241. package/libcxx/include/__functional/ranges_operations.h +7 -0
  242. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  243. package/libcxx/include/__functional/weak_result_type.h +14 -28
  244. package/libcxx/include/__fwd/ios.h +1 -1
  245. package/libcxx/include/__fwd/tuple.h +14 -0
  246. package/libcxx/include/__hash_table +371 -357
  247. package/libcxx/include/__ios/fpos.h +4 -4
  248. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  249. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  250. package/libcxx/include/__iterator/concepts.h +6 -9
  251. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  252. package/libcxx/include/__iterator/distance.h +40 -18
  253. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  254. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  255. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  256. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  257. package/libcxx/include/__iterator/iter_move.h +1 -1
  258. package/libcxx/include/__iterator/iterator.h +13 -0
  259. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  260. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  261. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  262. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  263. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  264. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  265. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  266. package/libcxx/include/__locale +3 -10
  267. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  268. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  269. package/libcxx/include/__locale_dir/messages.h +1 -1
  270. package/libcxx/include/__locale_dir/money.h +2 -2
  271. package/libcxx/include/__locale_dir/num.h +190 -243
  272. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  273. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  274. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  275. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  276. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  277. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  278. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  279. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  280. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  281. package/libcxx/include/__locale_dir/time.h +3 -7
  282. package/libcxx/include/__math/hypot.h +1 -1
  283. package/libcxx/include/__math/logarithms.h +1 -1
  284. package/libcxx/include/__math/traits.h +80 -11
  285. package/libcxx/include/__mdspan/extents.h +7 -4
  286. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  287. package/libcxx/include/__mdspan/mdspan.h +29 -23
  288. package/libcxx/include/__memory/addressof.h +7 -5
  289. package/libcxx/include/__memory/align.h +18 -1
  290. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  291. package/libcxx/include/__memory/allocator.h +14 -26
  292. package/libcxx/include/__memory/allocator_traits.h +6 -4
  293. package/libcxx/include/__memory/compressed_pair.h +15 -9
  294. package/libcxx/include/__memory/construct_at.h +12 -23
  295. package/libcxx/include/__memory/inout_ptr.h +1 -1
  296. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  297. package/libcxx/include/__memory/out_ptr.h +1 -1
  298. package/libcxx/include/__memory/pointer_traits.h +1 -1
  299. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  300. package/libcxx/include/__memory/shared_count.h +9 -30
  301. package/libcxx/include/__memory/shared_ptr.h +100 -145
  302. package/libcxx/include/__memory/temp_value.h +1 -2
  303. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  304. package/libcxx/include/__memory/unique_ptr.h +14 -16
  305. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  306. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  307. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  308. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  309. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  310. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  311. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  312. package/libcxx/include/__mutex/mutex.h +2 -2
  313. package/libcxx/include/__mutex/once_flag.h +14 -11
  314. package/libcxx/include/__mutex/tag_types.h +3 -3
  315. package/libcxx/include/__mutex/unique_lock.h +8 -7
  316. package/libcxx/include/__new/align_val_t.h +6 -0
  317. package/libcxx/include/__new/allocate.h +1 -2
  318. package/libcxx/include/__new/exceptions.h +8 -2
  319. package/libcxx/include/__new/global_new_delete.h +4 -11
  320. package/libcxx/include/__new/interference_size.h +0 -4
  321. package/libcxx/include/__new/launder.h +3 -5
  322. package/libcxx/include/__new/nothrow_t.h +1 -1
  323. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  324. package/libcxx/include/__numeric/midpoint.h +9 -14
  325. package/libcxx/include/__numeric/pstl.h +2 -2
  326. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  327. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  328. package/libcxx/include/__pstl/backends/default.h +14 -14
  329. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  330. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  331. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  332. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  333. package/libcxx/include/__random/binomial_distribution.h +10 -4
  334. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  335. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  336. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  337. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  338. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  339. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  340. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  341. package/libcxx/include/__ranges/common_view.h +7 -7
  342. package/libcxx/include/__ranges/drop_view.h +8 -8
  343. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  344. package/libcxx/include/__ranges/elements_of.h +49 -0
  345. package/libcxx/include/__ranges/empty_view.h +5 -5
  346. package/libcxx/include/__ranges/filter_view.h +10 -10
  347. package/libcxx/include/__ranges/iota_view.h +41 -22
  348. package/libcxx/include/__ranges/owning_view.h +15 -15
  349. package/libcxx/include/__ranges/ref_view.h +6 -6
  350. package/libcxx/include/__ranges/repeat_view.h +17 -10
  351. package/libcxx/include/__ranges/single_view.h +8 -8
  352. package/libcxx/include/__ranges/take_view.h +9 -9
  353. package/libcxx/include/__ranges/transform_view.h +1 -2
  354. package/libcxx/include/__ranges/view_interface.h +10 -10
  355. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  356. package/libcxx/include/__ranges/zip_view.h +20 -20
  357. package/libcxx/include/__split_buffer +612 -240
  358. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  359. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  360. package/libcxx/include/__stop_token/stop_source.h +1 -1
  361. package/libcxx/include/__stop_token/stop_state.h +4 -4
  362. package/libcxx/include/__stop_token/stop_token.h +1 -1
  363. package/libcxx/include/__string/char_traits.h +51 -31
  364. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  365. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  366. package/libcxx/include/__system_error/error_category.h +8 -8
  367. package/libcxx/include/__system_error/error_code.h +5 -5
  368. package/libcxx/include/__system_error/error_condition.h +4 -4
  369. package/libcxx/include/__system_error/system_error.h +1 -1
  370. package/libcxx/include/__thread/id.h +1 -1
  371. package/libcxx/include/__thread/jthread.h +1 -1
  372. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  373. package/libcxx/include/__thread/support/c11.h +8 -8
  374. package/libcxx/include/__thread/support/pthread.h +8 -8
  375. package/libcxx/include/__thread/support/windows.h +8 -8
  376. package/libcxx/include/__thread/thread.h +13 -8
  377. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  378. package/libcxx/include/__tree +849 -701
  379. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  380. package/libcxx/include/__tuple/tuple_element.h +0 -12
  381. package/libcxx/include/__tuple/tuple_size.h +0 -4
  382. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  383. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  384. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  385. package/libcxx/include/__type_traits/invoke.h +8 -0
  386. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  387. package/libcxx/include/__type_traits/is_array.h +26 -0
  388. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  389. package/libcxx/include/__type_traits/is_final.h +1 -1
  390. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  391. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  392. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  393. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  394. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  395. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  396. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  397. package/libcxx/include/__utility/cmp.h +19 -7
  398. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  399. package/libcxx/include/__utility/in_place.h +1 -1
  400. package/libcxx/include/__utility/integer_sequence.h +56 -41
  401. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  402. package/libcxx/include/__utility/pair.h +22 -25
  403. package/libcxx/include/__utility/scope_guard.h +2 -0
  404. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  405. package/libcxx/include/__vector/vector.h +187 -160
  406. package/libcxx/include/__vector/vector_bool.h +76 -83
  407. package/libcxx/include/any +118 -155
  408. package/libcxx/include/array +88 -56
  409. package/libcxx/include/atomic +2 -0
  410. package/libcxx/include/barrier +20 -24
  411. package/libcxx/include/bitset +49 -30
  412. package/libcxx/include/ccomplex +3 -11
  413. package/libcxx/include/chrono +47 -0
  414. package/libcxx/include/ciso646 +3 -6
  415. package/libcxx/include/complex +77 -65
  416. package/libcxx/include/complex.h +10 -10
  417. package/libcxx/include/condition_variable +3 -3
  418. package/libcxx/include/cstdalign +3 -10
  419. package/libcxx/include/cstdbool +3 -10
  420. package/libcxx/include/ctgmath +2 -11
  421. package/libcxx/include/ctype.h +24 -24
  422. package/libcxx/include/cwchar +2 -2
  423. package/libcxx/include/deque +109 -225
  424. package/libcxx/include/errno.h +269 -269
  425. package/libcxx/include/exception +4 -1
  426. package/libcxx/include/ext/hash_map +7 -48
  427. package/libcxx/include/ext/hash_set +2 -8
  428. package/libcxx/include/fenv.h +43 -43
  429. package/libcxx/include/flat_map +663 -11
  430. package/libcxx/include/flat_set +543 -8
  431. package/libcxx/include/float.h +16 -16
  432. package/libcxx/include/forward_list +33 -53
  433. package/libcxx/include/fstream +57 -42
  434. package/libcxx/include/future +41 -51
  435. package/libcxx/include/initializer_list +9 -3
  436. package/libcxx/include/inttypes.h +16 -16
  437. package/libcxx/include/ios +28 -28
  438. package/libcxx/include/istream +19 -13
  439. package/libcxx/include/iterator +10 -0
  440. package/libcxx/include/latch +7 -5
  441. package/libcxx/include/limits +4 -4
  442. package/libcxx/include/list +61 -79
  443. package/libcxx/include/map +386 -274
  444. package/libcxx/include/math.h +19 -0
  445. package/libcxx/include/mdspan +1 -5
  446. package/libcxx/include/mutex +29 -19
  447. package/libcxx/include/optional +644 -149
  448. package/libcxx/include/print +9 -5
  449. package/libcxx/include/queue +39 -37
  450. package/libcxx/include/ranges +48 -0
  451. package/libcxx/include/regex +33 -31
  452. package/libcxx/include/scoped_allocator +16 -11
  453. package/libcxx/include/semaphore +15 -18
  454. package/libcxx/include/set +220 -192
  455. package/libcxx/include/shared_mutex +3 -8
  456. package/libcxx/include/span +53 -37
  457. package/libcxx/include/sstream +34 -28
  458. package/libcxx/include/stack +13 -15
  459. package/libcxx/include/stddef.h +10 -10
  460. package/libcxx/include/stdexcept +2 -2
  461. package/libcxx/include/stdio.h +20 -21
  462. package/libcxx/include/streambuf +59 -19
  463. package/libcxx/include/string +574 -573
  464. package/libcxx/include/string_view +113 -89
  465. package/libcxx/include/strstream +10 -10
  466. package/libcxx/include/syncstream +4 -4
  467. package/libcxx/include/tgmath.h +12 -12
  468. package/libcxx/include/tuple +242 -212
  469. package/libcxx/include/type_traits +8 -2
  470. package/libcxx/include/typeindex +5 -3
  471. package/libcxx/include/typeinfo +92 -89
  472. package/libcxx/include/unordered_map +179 -304
  473. package/libcxx/include/unordered_set +168 -195
  474. package/libcxx/include/utility +12 -0
  475. package/libcxx/include/valarray +106 -161
  476. package/libcxx/include/variant +25 -33
  477. package/libcxx/include/version +41 -24
  478. package/libcxx/include/wctype.h +29 -29
  479. package/libcxx/libc/hdr/errno_macros.h +3 -1
  480. package/libcxx/libc/hdr/stdint_proxy.h +18 -0
  481. package/libcxx/libc/hdr/types/wchar_t.h +23 -0
  482. package/libcxx/libc/hdr/wchar_overlay.h +69 -0
  483. package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
  484. package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
  485. package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
  486. package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
  487. package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
  488. package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
  489. package/libcxx/libc/shared/libc_common.h +5 -0
  490. package/libcxx/libc/src/__support/CPP/bit.h +50 -12
  491. package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
  492. package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
  493. package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
  494. package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
  495. package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
  496. package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
  497. package/libcxx/libc/src/__support/big_int.h +14 -14
  498. package/libcxx/libc/src/__support/common.h +3 -2
  499. package/libcxx/libc/src/__support/ctype_utils.h +19 -12
  500. package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
  501. package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
  502. package/libcxx/libc/src/__support/libc_assert.h +2 -0
  503. package/libcxx/libc/src/__support/macros/attributes.h +44 -1
  504. package/libcxx/libc/src/__support/macros/config.h +23 -0
  505. package/libcxx/libc/src/__support/macros/null_check.h +1 -2
  506. package/libcxx/libc/src/__support/macros/optimization.h +3 -0
  507. package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
  508. package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
  509. package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
  510. package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
  511. package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
  512. package/libcxx/libc/src/__support/math_extras.h +20 -4
  513. package/libcxx/libc/src/__support/str_to_float.h +98 -125
  514. package/libcxx/libc/src/__support/str_to_integer.h +39 -27
  515. package/libcxx/libc/src/__support/wctype_utils.h +588 -0
  516. package/libcxx/src/any.cpp +4 -0
  517. package/libcxx/src/atomic.cpp +365 -80
  518. package/libcxx/src/barrier.cpp +4 -3
  519. package/libcxx/src/charconv.cpp +6 -3
  520. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  521. package/libcxx/src/error_category.cpp +3 -1
  522. package/libcxx/src/exception.cpp +2 -10
  523. package/libcxx/src/experimental/time_zone.cpp +1 -1
  524. package/libcxx/src/experimental/tzdb.cpp +4 -1
  525. package/libcxx/src/filesystem/error.h +4 -22
  526. package/libcxx/src/filesystem/format_string.h +9 -18
  527. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  528. package/libcxx/src/filesystem/operations.cpp +2 -9
  529. package/libcxx/src/filesystem/path.cpp +3 -1
  530. package/libcxx/src/include/aligned_alloc.h +65 -0
  531. package/libcxx/src/include/config_elast.h +1 -1
  532. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  533. package/libcxx/src/include/overridable_function.h +8 -10
  534. package/libcxx/src/iostream.cpp +56 -37
  535. package/libcxx/src/locale.cpp +213 -196
  536. package/libcxx/src/memory.cpp +12 -14
  537. package/libcxx/src/mutex_destructor.cpp +1 -1
  538. package/libcxx/src/new.cpp +5 -5
  539. package/libcxx/src/optional.cpp +4 -0
  540. package/libcxx/src/print.cpp +9 -1
  541. package/libcxx/src/random.cpp +0 -26
  542. package/libcxx/src/string.cpp +10 -25
  543. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  544. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  545. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  546. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  547. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  548. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  549. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  550. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  551. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  552. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  553. package/libcxx/src/system_error.cpp +2 -0
  554. package/libcxx/src/thread.cpp +1 -3
  555. package/libcxx/src/valarray.cpp +1 -2
  556. package/libcxx/src/vector.cpp +2 -2
  557. package/libcxxabi/include/__cxxabi_config.h +42 -23
  558. package/libcxxabi/src/cxa_exception.cpp +4 -2
  559. package/libcxxabi/src/cxa_exception.h +16 -14
  560. package/libcxxabi/src/cxa_personality.cpp +126 -9
  561. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  562. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  563. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  564. package/libcxxabi/src/demangle/Utility.h +21 -7
  565. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  566. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  567. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  568. package/libtsan/LICENSE.TXT +311 -0
  569. package/libtsan/builtins/assembly.h +41 -8
  570. package/libtsan/interception/interception_win.cpp +4 -0
  571. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  572. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  573. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  574. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  575. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  576. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  577. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  578. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  579. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  580. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  581. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  582. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  583. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  584. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  585. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  586. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  587. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  588. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  589. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  590. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  591. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  592. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  593. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  594. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  595. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  596. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  597. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  598. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  599. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  600. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  601. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  602. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  603. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  604. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  605. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  606. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  607. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  608. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  609. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  610. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  611. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  612. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  613. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  614. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  615. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  616. package/libtsan/tsan_debugging.cpp +2 -2
  617. package/libtsan/tsan_flags.cpp +37 -0
  618. package/libtsan/tsan_flags.h +8 -0
  619. package/libtsan/tsan_flags.inc +12 -0
  620. package/libtsan/tsan_interceptors.h +9 -1
  621. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  622. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  623. package/libtsan/tsan_interface.h +3 -3
  624. package/libtsan/tsan_interface_ann.cpp +23 -9
  625. package/libtsan/tsan_mman.cpp +18 -4
  626. package/libtsan/tsan_platform.h +44 -7
  627. package/libtsan/tsan_platform_linux.cpp +42 -14
  628. package/libtsan/tsan_platform_mac.cpp +16 -3
  629. package/libtsan/tsan_report.h +14 -1
  630. package/libtsan/tsan_rtl.cpp +14 -0
  631. package/libtsan/tsan_rtl.h +7 -2
  632. package/libtsan/tsan_rtl_aarch64.S +3 -5
  633. package/libtsan/tsan_rtl_access.cpp +8 -3
  634. package/libtsan/tsan_rtl_amd64.S +2 -0
  635. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  636. package/libtsan/tsan_rtl_report.cpp +132 -65
  637. package/libtsan/tsan_rtl_thread.cpp +31 -9
  638. package/libtsan/tsan_symbolize.cpp +1 -1
  639. package/libtsan/tsan_symbolize.h +1 -1
  640. package/libtsan/tsan_trace.h +1 -1
  641. package/libunwind/include/__libunwind_config.h +11 -2
  642. package/libunwind/include/libunwind.h +117 -11
  643. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  644. package/libunwind/src/AddressSpace.hpp +42 -20
  645. package/libunwind/src/CompactUnwinder.hpp +16 -5
  646. package/libunwind/src/DwarfInstructions.hpp +24 -13
  647. package/libunwind/src/DwarfParser.hpp +62 -23
  648. package/libunwind/src/EHHeaderParser.hpp +7 -4
  649. package/libunwind/src/Registers.hpp +226 -22
  650. package/libunwind/src/Unwind-seh.cpp +6 -7
  651. package/libunwind/src/Unwind-wasm.c +7 -7
  652. package/libunwind/src/UnwindCursor.hpp +167 -49
  653. package/libunwind/src/UnwindLevel1.c +46 -17
  654. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  655. package/libunwind/src/UnwindRegistersSave.S +86 -2
  656. package/libunwind/src/assembly.h +5 -1
  657. package/libunwind/src/config.h +9 -0
  658. package/libunwind/src/gcc_personality_v0.c +79 -6
  659. package/libunwind/src/libunwind.cpp +104 -4
  660. package/libunwind/src/libunwind_ext.h +7 -1
  661. package/libunwind/src/shadow_stack_unwind.h +2 -2
  662. package/lldb/pretty_printers.py +948 -0
  663. package/package.json +1 -1
  664. package/std/Build/Step/Compile.zig +18 -19
  665. package/std/Build/Step/Run.zig +13 -6
  666. package/std/Build/Step.zig +0 -3
  667. package/std/Io/Threaded.zig +3 -0
  668. package/std/Target/aarch64.zig +620 -77
  669. package/std/Target/amdgcn.zig +421 -21
  670. package/std/Target/arm.zig +40 -6
  671. package/std/Target/bpf.zig +6 -0
  672. package/std/Target/hexagon.zig +41 -6
  673. package/std/Target/loongarch.zig +18 -0
  674. package/std/Target/mips.zig +6 -0
  675. package/std/Target/nvptx.zig +58 -35
  676. package/std/Target/powerpc.zig +27 -19
  677. package/std/Target/riscv.zig +415 -177
  678. package/std/Target/sparc.zig +17 -0
  679. package/std/Target/wasm.zig +7 -0
  680. package/std/Target/x86.zig +200 -31
  681. package/std/Target/xtensa.zig +65 -0
  682. package/std/Target.zig +16 -8
  683. package/std/c.zig +7 -0
  684. package/std/crypto/ml_kem.zig +0 -15
  685. package/std/debug/Dwarf.zig +14 -11
  686. package/std/debug/Pdb.zig +24 -16
  687. package/std/hash/xxhash.zig +0 -6
  688. package/std/math/log10.zig +0 -2
  689. package/std/math/modf.zig +1 -2
  690. package/std/mem.zig +1 -2
  691. package/std/os/linux/x86.zig +2 -2
  692. package/std/os/windows.zig +130 -1
  693. package/std/simd.zig +4 -21
  694. package/std/start.zig +4 -3
  695. package/std/zig/Ast.zig +5 -7
  696. package/std/zig/AstGen.zig +20 -14
  697. package/std/zig/ErrorBundle.zig +6 -2
  698. package/std/zig/ZonGen.zig +13 -21
  699. package/std/zig/llvm/Builder.zig +2 -2
  700. package/std/zig/system/arm.zig +56 -2
  701. package/std/zig/system/windows.zig +34 -1
  702. package/std/zig/system/x86.zig +60 -16
  703. package/std/zig/system.zig +0 -10
  704. package/std/zig/target.zig +1 -2
  705. package/std/zon/parse.zig +1 -1
  706. package/include/amxbf16transposeintrin.h +0 -94
  707. package/include/amxcomplextransposeintrin.h +0 -303
  708. package/include/amxfp16transposeintrin.h +0 -94
  709. package/include/amxmovrstransposeintrin.h +0 -200
  710. package/include/amxtf32transposeintrin.h +0 -105
  711. package/include/amxtransposeintrin.h +0 -248
  712. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  713. package/std/Build/Step/CheckObject.zig +0 -2764
@@ -16,6 +16,7 @@
16
16
  #define LLVM_LIBC_SRC___SUPPORT_STR_TO_FLOAT_H
17
17
 
18
18
  #include "hdr/errno_macros.h" // For ERANGE
19
+ #include "hdr/stdint_proxy.h"
19
20
  #include "src/__support/CPP/bit.h"
20
21
  #include "src/__support/CPP/limits.h"
21
22
  #include "src/__support/CPP/optional.h"
@@ -32,8 +33,7 @@
32
33
  #include "src/__support/str_to_integer.h"
33
34
  #include "src/__support/str_to_num_result.h"
34
35
  #include "src/__support/uint128.h"
35
-
36
- #include <stdint.h>
36
+ #include "src/__support/wctype_utils.h"
37
37
 
38
38
  namespace LIBC_NAMESPACE_DECL {
39
39
  namespace internal {
@@ -335,9 +335,9 @@ constexpr int32_t NUM_POWERS_OF_TWO =
335
335
  // the Eisel-Lemire algorithm fails, it's slower but more accurate. It's based
336
336
  // on the Simple Decimal Conversion algorithm by Nigel Tao, described at this
337
337
  // link: https://nigeltao.github.io/blog/2020/parse-number-f64-simple.html
338
- template <class T>
338
+ template <typename T, typename CharType>
339
339
  LIBC_INLINE FloatConvertReturn<T> simple_decimal_conversion(
340
- const char *__restrict numStart,
340
+ const CharType *__restrict numStart,
341
341
  const size_t num_len = cpp::numeric_limits<size_t>::max(),
342
342
  RoundDirection round = RoundDirection::Nearest) {
343
343
  using FPBits = typename fputil::FPBits<T>;
@@ -677,12 +677,11 @@ template <> LIBC_INLINE constexpr int32_t get_lower_bound<double>() {
677
677
  // Takes a mantissa and base 10 exponent and converts it into its closest
678
678
  // floating point type T equivalient. First we try the Eisel-Lemire algorithm,
679
679
  // then if that fails then we fall back to a more accurate algorithm for
680
- // accuracy. The resulting mantissa and exponent are placed in outputMantissa
681
- // and outputExp2.
682
- template <class T>
680
+ // accuracy.
681
+ template <typename T, typename CharType>
683
682
  LIBC_INLINE FloatConvertReturn<T> decimal_exp_to_float(
684
683
  ExpandedFloat<T> init_num, bool truncated, RoundDirection round,
685
- const char *__restrict numStart,
684
+ const CharType *__restrict numStart,
686
685
  const size_t num_len = cpp::numeric_limits<size_t>::max()) {
687
686
  using FPBits = typename fputil::FPBits<T>;
688
687
  using StorageType = typename FPBits::StorageType;
@@ -861,36 +860,42 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
861
860
  return output;
862
861
  }
863
862
 
864
- // checks if the next 4 characters of the string pointer are the start of a
863
+ // Checks if the first characters of the string pointer are the start of a
865
864
  // hexadecimal floating point number. Does not advance the string pointer.
866
- LIBC_INLINE bool is_float_hex_start(const char *__restrict src,
867
- const char decimalPoint) {
868
- if (!(src[0] == '0' && tolower(src[1]) == 'x')) {
865
+ template <typename CharType>
866
+ LIBC_INLINE static bool is_float_hex_start(const CharType *__restrict src) {
867
+ if (!is_char_or_wchar(src[0], '0', L'0') ||
868
+ !is_char_or_wchar(tolower(src[1]), 'x', L'x')) {
869
869
  return false;
870
870
  }
871
871
  size_t first_digit = 2;
872
- if (src[2] == decimalPoint) {
872
+ if (src[2] == constants<CharType>::DECIMAL_POINT) {
873
873
  ++first_digit;
874
874
  }
875
875
  return isalnum(src[first_digit]) && b36_char_to_int(src[first_digit]) < 16;
876
876
  }
877
877
 
878
- // Takes the start of a string representing a decimal float, as well as the
879
- // local decimalPoint. It returns if it suceeded in parsing any digits, and if
880
- // the return value is true then the outputs are pointer to the end of the
881
- // number, and the mantissa and exponent for the closest float T representation.
882
- // If the return value is false, then it is assumed that there is no number
883
- // here.
884
- template <class T>
885
- LIBC_INLINE StrToNumResult<ExpandedFloat<T>>
886
- decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
887
- RoundDirection round) {
878
+ // Verifies that first prefix_len characters of str, when lowercased, match the
879
+ // specified prefix.
880
+ template <typename CharType>
881
+ LIBC_INLINE static bool tolower_starts_with(const CharType *str,
882
+ size_t prefix_len,
883
+ const CharType *prefix) {
884
+ for (size_t i = 0; i < prefix_len; ++i) {
885
+ if (tolower(str[i]) != prefix[i])
886
+ return false;
887
+ }
888
+ return true;
889
+ }
890
+
891
+ // Attempts parsing a decimal floating point number at the start of the string.
892
+ template <typename T, typename CharType>
893
+ LIBC_INLINE static StrToNumResult<ExpandedFloat<T>>
894
+ decimal_string_to_float(const CharType *__restrict src, RoundDirection round) {
888
895
  using FPBits = typename fputil::FPBits<T>;
889
896
  using StorageType = typename FPBits::StorageType;
890
897
 
891
898
  constexpr uint32_t BASE = 10;
892
- constexpr char EXPONENT_MARKER = 'e';
893
-
894
899
  bool truncated = false;
895
900
  bool seen_digit = false;
896
901
  bool after_decimal = false;
@@ -927,7 +932,7 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
927
932
  ++index;
928
933
  continue;
929
934
  }
930
- if (src[index] == DECIMAL_POINT) {
935
+ if (src[index] == constants<CharType>::DECIMAL_POINT) {
931
936
  if (after_decimal) {
932
937
  break; // this means that src[index] points to a second decimal point,
933
938
  // ending the number.
@@ -944,13 +949,10 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
944
949
  return output;
945
950
 
946
951
  // TODO: When adding max length argument, handle the case of a trailing
947
- // EXPONENT MARKER, see scanf for more details.
948
- if (tolower(src[index]) == EXPONENT_MARKER) {
949
- bool has_sign = false;
950
- if (src[index + 1] == '+' || src[index + 1] == '-') {
951
- has_sign = true;
952
- }
953
- if (isdigit(src[index + 1 + static_cast<size_t>(has_sign)])) {
952
+ // exponent marker, see scanf for more details.
953
+ if (tolower(src[index]) == constants<CharType>::DECIMAL_EXPONENT_MARKER) {
954
+ int sign = get_sign(src + index + 1);
955
+ if (isdigit(src[index + 1 + static_cast<size_t>(sign != 0)])) {
954
956
  ++index;
955
957
  auto result = strtointeger<int32_t>(src + index, 10);
956
958
  if (result.has_error())
@@ -986,22 +988,16 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
986
988
  return output;
987
989
  }
988
990
 
989
- // Takes the start of a string representing a hexadecimal float, as well as the
990
- // local decimal point. It returns if it suceeded in parsing any digits, and if
991
- // the return value is true then the outputs are pointer to the end of the
992
- // number, and the mantissa and exponent for the closest float T representation.
993
- // If the return value is false, then it is assumed that there is no number
994
- // here.
995
- template <class T>
996
- LIBC_INLINE StrToNumResult<ExpandedFloat<T>>
997
- hexadecimal_string_to_float(const char *__restrict src,
998
- const char DECIMAL_POINT, RoundDirection round) {
991
+ // Attempts parsing a hexadecimal floating point number at the start of the
992
+ // string.
993
+ template <typename T, typename CharType>
994
+ LIBC_INLINE static StrToNumResult<ExpandedFloat<T>>
995
+ hexadecimal_string_to_float(const CharType *__restrict src,
996
+ RoundDirection round) {
999
997
  using FPBits = typename fputil::FPBits<T>;
1000
998
  using StorageType = typename FPBits::StorageType;
1001
999
 
1002
1000
  constexpr uint32_t BASE = 16;
1003
- constexpr char EXPONENT_MARKER = 'p';
1004
-
1005
1001
  bool truncated = false;
1006
1002
  bool seen_digit = false;
1007
1003
  bool after_decimal = false;
@@ -1039,7 +1035,7 @@ hexadecimal_string_to_float(const char *__restrict src,
1039
1035
  ++index;
1040
1036
  continue;
1041
1037
  }
1042
- if (src[index] == DECIMAL_POINT) {
1038
+ if (src[index] == constants<CharType>::DECIMAL_POINT) {
1043
1039
  if (after_decimal) {
1044
1040
  break; // this means that src[index] points to a second decimal point,
1045
1041
  // ending the number.
@@ -1058,12 +1054,9 @@ hexadecimal_string_to_float(const char *__restrict src,
1058
1054
  // Convert the exponent from having a base of 16 to having a base of 2.
1059
1055
  exponent *= 4;
1060
1056
 
1061
- if (tolower(src[index]) == EXPONENT_MARKER) {
1062
- bool has_sign = false;
1063
- if (src[index + 1] == '+' || src[index + 1] == '-') {
1064
- has_sign = true;
1065
- }
1066
- if (isdigit(src[index + 1 + static_cast<size_t>(has_sign)])) {
1057
+ if (tolower(src[index]) == constants<CharType>::HEX_EXPONENT_MARKER) {
1058
+ int sign = get_sign(src + index + 1);
1059
+ if (isdigit(src[index + 1 + static_cast<size_t>(sign != 0)])) {
1067
1060
  ++index;
1068
1061
  auto result = strtointeger<int32_t>(src + index, 10);
1069
1062
  if (result.has_error())
@@ -1099,21 +1092,21 @@ hexadecimal_string_to_float(const char *__restrict src,
1099
1092
  return output;
1100
1093
  }
1101
1094
 
1102
- template <class T>
1095
+ template <typename T, typename CharType>
1103
1096
  LIBC_INLINE typename fputil::FPBits<T>::StorageType
1104
- nan_mantissa_from_ncharseq(const cpp::string_view ncharseq) {
1097
+ nan_mantissa_from_ncharseq(const CharType *str, size_t len) {
1105
1098
  using FPBits = typename fputil::FPBits<T>;
1106
1099
  using StorageType = typename FPBits::StorageType;
1107
1100
 
1108
1101
  StorageType nan_mantissa = 0;
1109
1102
 
1110
- if (ncharseq.data() != nullptr && isdigit(ncharseq[0])) {
1103
+ if (len > 0 && isdigit(str[0])) {
1111
1104
  StrToNumResult<StorageType> strtoint_result =
1112
- strtointeger<StorageType>(ncharseq.data(), 0);
1105
+ strtointeger<StorageType>(str, 0, len);
1113
1106
  if (!strtoint_result.has_error())
1114
1107
  nan_mantissa = strtoint_result.value;
1115
1108
 
1116
- if (strtoint_result.parsed_len != static_cast<ptrdiff_t>(ncharseq.size()))
1109
+ if (strtoint_result.parsed_len != static_cast<ptrdiff_t>(len))
1117
1110
  nan_mantissa = 0;
1118
1111
  }
1119
1112
 
@@ -1124,59 +1117,44 @@ nan_mantissa_from_ncharseq(const cpp::string_view ncharseq) {
1124
1117
  // is used as the backend for all of the string to float functions.
1125
1118
  // TODO: Add src_len member to match strtointeger.
1126
1119
  // TODO: Next, move from char* and length to string_view
1127
- template <class T>
1128
- LIBC_INLINE StrToNumResult<T> strtofloatingpoint(const char *__restrict src) {
1120
+ template <typename T, typename CharType>
1121
+ LIBC_INLINE StrToNumResult<T>
1122
+ strtofloatingpoint(const CharType *__restrict src) {
1129
1123
  using FPBits = typename fputil::FPBits<T>;
1130
1124
  using StorageType = typename FPBits::StorageType;
1131
1125
 
1132
1126
  FPBits result = FPBits();
1133
1127
  bool seen_digit = false;
1134
- char sign = '+';
1135
-
1136
1128
  int error = 0;
1137
1129
 
1138
1130
  size_t index = first_non_whitespace(src);
1131
+ int sign = get_sign(src + index);
1132
+ bool is_positive = (sign >= 0);
1133
+ index += (sign != 0);
1139
1134
 
1140
- if (src[index] == '+' || src[index] == '-') {
1141
- sign = src[index];
1142
- ++index;
1143
- }
1144
-
1145
- if (sign == '-') {
1135
+ if (sign < 0) {
1146
1136
  result.set_sign(Sign::NEG);
1147
1137
  }
1148
1138
 
1149
- static constexpr char DECIMAL_POINT = '.';
1150
- static const char *inf_string = "infinity";
1151
- static const char *nan_string = "nan";
1152
-
1153
- if (isdigit(src[index]) || src[index] == DECIMAL_POINT) { // regular number
1139
+ if (isdigit(src[index]) ||
1140
+ src[index] == constants<CharType>::DECIMAL_POINT) { // regular number
1154
1141
  int base = 10;
1155
- if (is_float_hex_start(src + index, DECIMAL_POINT)) {
1142
+ if (is_float_hex_start(src + index)) {
1156
1143
  base = 16;
1157
1144
  index += 2;
1158
1145
  seen_digit = true;
1159
1146
  }
1160
1147
 
1161
1148
  RoundDirection round_direction = RoundDirection::Nearest;
1162
-
1163
1149
  switch (fputil::quick_get_round()) {
1164
1150
  case FE_TONEAREST:
1165
1151
  round_direction = RoundDirection::Nearest;
1166
1152
  break;
1167
1153
  case FE_UPWARD:
1168
- if (sign == '+') {
1169
- round_direction = RoundDirection::Up;
1170
- } else {
1171
- round_direction = RoundDirection::Down;
1172
- }
1154
+ round_direction = is_positive ? RoundDirection::Up : RoundDirection::Down;
1173
1155
  break;
1174
1156
  case FE_DOWNWARD:
1175
- if (sign == '+') {
1176
- round_direction = RoundDirection::Down;
1177
- } else {
1178
- round_direction = RoundDirection::Up;
1179
- }
1157
+ round_direction = is_positive ? RoundDirection::Down : RoundDirection::Up;
1180
1158
  break;
1181
1159
  case FE_TOWARDZERO:
1182
1160
  round_direction = RoundDirection::Down;
@@ -1185,58 +1163,53 @@ LIBC_INLINE StrToNumResult<T> strtofloatingpoint(const char *__restrict src) {
1185
1163
 
1186
1164
  StrToNumResult<ExpandedFloat<T>> parse_result({0, 0});
1187
1165
  if (base == 16) {
1188
- parse_result = hexadecimal_string_to_float<T>(src + index, DECIMAL_POINT,
1189
- round_direction);
1166
+ parse_result =
1167
+ hexadecimal_string_to_float<T>(src + index, round_direction);
1190
1168
  } else { // base is 10
1191
- parse_result = decimal_string_to_float<T>(src + index, DECIMAL_POINT,
1192
- round_direction);
1169
+ parse_result = decimal_string_to_float<T>(src + index, round_direction);
1193
1170
  }
1194
1171
  seen_digit = parse_result.parsed_len != 0;
1195
1172
  result.set_mantissa(parse_result.value.mantissa);
1196
1173
  result.set_biased_exponent(parse_result.value.exponent);
1197
1174
  index += parse_result.parsed_len;
1198
1175
  error = parse_result.error;
1199
- } else if (tolower(src[index]) == 'n') { // NaN
1200
- if (tolower(src[index + 1]) == nan_string[1] &&
1201
- tolower(src[index + 2]) == nan_string[2]) {
1202
- seen_digit = true;
1203
- index += 3;
1204
- StorageType nan_mantissa = 0;
1205
- // this handles the case of `NaN(n-character-sequence)`, where the
1206
- // n-character-sequence is made of 0 or more letters, numbers, or
1207
- // underscore characters in any order.
1208
- if (src[index] == '(') {
1209
- size_t left_paren = index;
1176
+ } else if (tolower_starts_with(src + index, 3,
1177
+ constants<CharType>::NAN_STRING)) {
1178
+ // NAN
1179
+ seen_digit = true;
1180
+ index += 3;
1181
+ StorageType nan_mantissa = 0;
1182
+ // this handles the case of `NaN(n-character-sequence)`, where the
1183
+ // n-character-sequence is made of 0 or more letters, numbers, or
1184
+ // underscore characters in any order.
1185
+ if (is_char_or_wchar(src[index], '(', L'(')) {
1186
+ size_t left_paren = index;
1187
+ ++index;
1188
+ while (isalnum(src[index]) || is_char_or_wchar(src[index], '_', L'_'))
1210
1189
  ++index;
1211
- while (isalnum(src[index]) || src[index] == '_')
1212
- ++index;
1213
- if (src[index] == ')') {
1214
- ++index;
1215
- nan_mantissa = nan_mantissa_from_ncharseq<T>(
1216
- cpp::string_view(src + (left_paren + 1), index - left_paren - 2));
1217
- } else {
1218
- index = left_paren;
1219
- }
1220
- }
1221
- result = FPBits(result.quiet_nan(result.sign(), nan_mantissa));
1222
- }
1223
- } else if (tolower(src[index]) == 'i') { // INF
1224
- if (tolower(src[index + 1]) == inf_string[1] &&
1225
- tolower(src[index + 2]) == inf_string[2]) {
1226
- seen_digit = true;
1227
- result = FPBits(result.inf(result.sign()));
1228
- if (tolower(src[index + 3]) == inf_string[3] &&
1229
- tolower(src[index + 4]) == inf_string[4] &&
1230
- tolower(src[index + 5]) == inf_string[5] &&
1231
- tolower(src[index + 6]) == inf_string[6] &&
1232
- tolower(src[index + 7]) == inf_string[7]) {
1233
- // if the string is "INFINITY" then consume 8 characters.
1234
- index += 8;
1190
+ if (is_char_or_wchar(src[index], ')', L')')) {
1191
+ ++index;
1192
+ nan_mantissa = nan_mantissa_from_ncharseq<T>(src + (left_paren + 1),
1193
+ index - left_paren - 2);
1235
1194
  } else {
1236
- index += 3;
1195
+ index = left_paren;
1237
1196
  }
1238
1197
  }
1198
+ result = FPBits(result.quiet_nan(result.sign(), nan_mantissa));
1199
+ } else if (tolower_starts_with(src + index, 8,
1200
+ constants<CharType>::INF_STRING)) {
1201
+ // INFINITY
1202
+ seen_digit = true;
1203
+ result = FPBits(result.inf(result.sign()));
1204
+ index += 8;
1205
+ } else if (tolower_starts_with(src + index, 3,
1206
+ constants<CharType>::INF_STRING)) {
1207
+ // INF
1208
+ seen_digit = true;
1209
+ result = FPBits(result.inf(result.sign()));
1210
+ index += 3;
1239
1211
  }
1212
+
1240
1213
  if (!seen_digit) { // If there is nothing to actually parse, then return 0.
1241
1214
  return {T(0), 0, error};
1242
1215
  }
@@ -1263,7 +1236,7 @@ template <class T> LIBC_INLINE StrToNumResult<T> strtonan(const char *arg) {
1263
1236
  ++index;
1264
1237
 
1265
1238
  if (arg[index] == '\0')
1266
- nan_mantissa = nan_mantissa_from_ncharseq<T>(cpp::string_view(arg, index));
1239
+ nan_mantissa = nan_mantissa_from_ncharseq<T>(arg, index);
1267
1240
 
1268
1241
  result = FPBits::quiet_nan(Sign::POS, nan_mantissa);
1269
1242
  return {result.get_val(), 0, error};
@@ -25,36 +25,51 @@
25
25
  #include "src/__support/macros/config.h"
26
26
  #include "src/__support/str_to_num_result.h"
27
27
  #include "src/__support/uint128.h"
28
+ #include "src/__support/wctype_utils.h"
28
29
 
29
30
  namespace LIBC_NAMESPACE_DECL {
30
31
  namespace internal {
31
32
 
32
33
  // Returns the idx to the first character in src that is not a whitespace
33
34
  // character (as determined by isspace())
35
+ template <typename CharType>
34
36
  LIBC_INLINE size_t
35
- first_non_whitespace(const char *__restrict src,
37
+ first_non_whitespace(const CharType *__restrict src,
36
38
  size_t src_len = cpp::numeric_limits<size_t>::max()) {
37
39
  size_t src_cur = 0;
38
- while (src_cur < src_len && internal::isspace(src[src_cur])) {
39
- ++src_cur;
40
- }
40
+ for (; src_cur < src_len && internal::isspace(src[src_cur]); ++src_cur)
41
+ ;
41
42
  return src_cur;
42
43
  }
43
44
 
45
+ // Returns +1, -1, or 0 if 'src' starts with (respectively)
46
+ // plus sign, minus sign, or neither.
47
+ template <typename CharType>
48
+ LIBC_INLINE static int get_sign(const CharType *__restrict src) {
49
+ if (is_char_or_wchar(src[0], '+', L'+'))
50
+ return 1;
51
+ if (is_char_or_wchar(src[0], '-', L'-'))
52
+ return -1;
53
+ return 0;
54
+ }
55
+
44
56
  // checks if the next 3 characters of the string pointer are the start of a
45
57
  // hexadecimal number. Does not advance the string pointer.
46
- LIBC_INLINE bool
47
- is_hex_start(const char *__restrict src,
48
- size_t src_len = cpp::numeric_limits<size_t>::max()) {
58
+ template <typename CharType>
59
+ LIBC_INLINE static bool is_hex_start(const CharType *__restrict src,
60
+ size_t src_len) {
49
61
  if (src_len < 3)
50
62
  return false;
51
- return *src == '0' && tolower(*(src + 1)) == 'x' && isalnum(*(src + 2)) &&
52
- b36_char_to_int(*(src + 2)) < 16;
63
+ return is_char_or_wchar(src[0], '0', L'0') &&
64
+ is_char_or_wchar(tolower(src[1]), 'x', L'x') && isalnum(src[2]) &&
65
+ b36_char_to_int(src[2]) < 16;
53
66
  }
54
67
 
55
68
  // Takes the address of the string pointer and parses the base from the start of
56
69
  // it.
57
- LIBC_INLINE int infer_base(const char *__restrict src, size_t src_len) {
70
+ template <typename CharType>
71
+ LIBC_INLINE static int infer_base(const CharType *__restrict src,
72
+ size_t src_len) {
58
73
  // A hexadecimal number is defined as "the prefix 0x or 0X followed by a
59
74
  // sequence of the decimal digits and the letters a (or A) through f (or F)
60
75
  // with values 10 through 15 respectively." (C standard 6.4.4.1)
@@ -63,8 +78,9 @@ LIBC_INLINE int infer_base(const char *__restrict src, size_t src_len) {
63
78
  // An octal number is defined as "the prefix 0 optionally followed by a
64
79
  // sequence of the digits 0 through 7 only" (C standard 6.4.4.1) and so any
65
80
  // number that starts with 0, including just 0, is an octal number.
66
- if (src_len > 0 && src[0] == '0')
81
+ if (src_len > 0 && is_char_or_wchar(src[0], '0', L'0')) {
67
82
  return 8;
83
+ }
68
84
  // A decimal number is defined as beginning "with a nonzero digit and
69
85
  // consist[ing] of a sequence of decimal digits." (C standard 6.4.4.1)
70
86
  return 10;
@@ -77,32 +93,27 @@ LIBC_INLINE int infer_base(const char *__restrict src, size_t src_len) {
77
93
  // -----------------------------------------------------------------------------
78
94
  // Takes a pointer to a string and the base to convert to. This function is used
79
95
  // as the backend for all of the string to int functions.
80
- template <class T>
96
+ template <typename T, typename CharType>
81
97
  LIBC_INLINE StrToNumResult<T>
82
- strtointeger(const char *__restrict src, int base,
98
+ strtointeger(const CharType *__restrict src, int base,
83
99
  const size_t src_len = cpp::numeric_limits<size_t>::max()) {
84
100
  using ResultType = make_integral_or_big_int_unsigned_t<T>;
85
101
 
86
- ResultType result = 0;
87
-
88
- bool is_number = false;
89
- size_t src_cur = 0;
90
- int error_val = 0;
91
-
92
102
  if (src_len == 0)
93
103
  return {0, 0, 0};
94
104
 
95
105
  if (base < 0 || base == 1 || base > 36)
96
106
  return {0, 0, EINVAL};
97
107
 
98
- src_cur = first_non_whitespace(src, src_len);
99
-
100
- char result_sign = '+';
101
- if (src[src_cur] == '+' || src[src_cur] == '-') {
102
- result_sign = src[src_cur];
103
- ++src_cur;
108
+ size_t src_cur = first_non_whitespace(src, src_len);
109
+ if (src_cur == src_len) {
110
+ return {0, 0, 0};
104
111
  }
105
112
 
113
+ int sign = get_sign(src + src_cur);
114
+ bool is_positive = (sign >= 0);
115
+ src_cur += (sign != 0);
116
+
106
117
  if (base == 0)
107
118
  base = infer_base(src + src_cur, src_len - src_cur);
108
119
 
@@ -110,8 +121,6 @@ strtointeger(const char *__restrict src, int base,
110
121
  src_cur = src_cur + 2;
111
122
 
112
123
  constexpr bool IS_UNSIGNED = cpp::is_unsigned_v<T>;
113
- const bool is_positive = (result_sign == '+');
114
-
115
124
  ResultType constexpr NEGATIVE_MAX =
116
125
  !IS_UNSIGNED ? static_cast<ResultType>(cpp::numeric_limits<T>::max()) + 1
117
126
  : cpp::numeric_limits<T>::max();
@@ -120,6 +129,9 @@ strtointeger(const char *__restrict src, int base,
120
129
  ResultType const abs_max_div_by_base =
121
130
  abs_max / static_cast<ResultType>(base);
122
131
 
132
+ bool is_number = false;
133
+ int error_val = 0;
134
+ ResultType result = 0;
123
135
  while (src_cur < src_len && isalnum(src[src_cur])) {
124
136
  int cur_digit = b36_char_to_int(src[src_cur]);
125
137
  if (cur_digit >= base)