@shd101wyy/yo 0.0.2

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 (339) hide show
  1. package/LICENSE.md +17 -0
  2. package/README.md +80 -0
  3. package/out/cjs/index.cjs +51 -0
  4. package/out/cjs/yo-cli.cjs +2158 -0
  5. package/out/esm/index.mjs +51 -0
  6. package/out/types/src/codegen/async/runtime.d.ts +2 -0
  7. package/out/types/src/codegen/async/state-code-gen.d.ts +10 -0
  8. package/out/types/src/codegen/async/state-machine.d.ts +13 -0
  9. package/out/types/src/codegen/c/collection.d.ts +3 -0
  10. package/out/types/src/codegen/codegen-c.d.ts +12 -0
  11. package/out/types/src/codegen/constants.d.ts +3 -0
  12. package/out/types/src/codegen/expressions/array.d.ts +4 -0
  13. package/out/types/src/codegen/expressions/generation.d.ts +11 -0
  14. package/out/types/src/codegen/expressions/index.d.ts +2 -0
  15. package/out/types/src/codegen/functions/collection.d.ts +5 -0
  16. package/out/types/src/codegen/functions/context.d.ts +57 -0
  17. package/out/types/src/codegen/functions/generation.d.ts +25 -0
  18. package/out/types/src/codegen/functions/index.d.ts +2 -0
  19. package/out/types/src/codegen/index.d.ts +20 -0
  20. package/out/types/src/codegen/parallelism/runtime.d.ts +2 -0
  21. package/out/types/src/codegen/types/collection.d.ts +8 -0
  22. package/out/types/src/codegen/types/generation.d.ts +13 -0
  23. package/out/types/src/codegen/types/index.d.ts +2 -0
  24. package/out/types/src/codegen/utils/fixup.d.ts +2 -0
  25. package/out/types/src/codegen/utils/index.d.ts +77 -0
  26. package/out/types/src/codegen/values/index.d.ts +1 -0
  27. package/out/types/src/emitter.d.ts +11 -0
  28. package/out/types/src/env.d.ts +85 -0
  29. package/out/types/src/error.d.ts +45 -0
  30. package/out/types/src/evaluator/async/await-analysis-types.d.ts +23 -0
  31. package/out/types/src/evaluator/async/await-analysis.d.ts +5 -0
  32. package/out/types/src/evaluator/builtins/alignof.d.ts +8 -0
  33. package/out/types/src/evaluator/builtins/and_or.d.ts +8 -0
  34. package/out/types/src/evaluator/builtins/arc_fns.d.ts +58 -0
  35. package/out/types/src/evaluator/builtins/array_fns.d.ts +0 -0
  36. package/out/types/src/evaluator/builtins/as.d.ts +8 -0
  37. package/out/types/src/evaluator/builtins/async_fns.d.ts +8 -0
  38. package/out/types/src/evaluator/builtins/compt_assert.d.ts +8 -0
  39. package/out/types/src/evaluator/builtins/compt_boolean_fns.d.ts +8 -0
  40. package/out/types/src/evaluator/builtins/compt_expect_error.d.ts +8 -0
  41. package/out/types/src/evaluator/builtins/compt_list_fns.d.ts +33 -0
  42. package/out/types/src/evaluator/builtins/compt_print.d.ts +8 -0
  43. package/out/types/src/evaluator/builtins/compt_string_fns.d.ts +8 -0
  44. package/out/types/src/evaluator/builtins/consume.d.ts +8 -0
  45. package/out/types/src/evaluator/builtins/drop.d.ts +8 -0
  46. package/out/types/src/evaluator/builtins/dup.d.ts +8 -0
  47. package/out/types/src/evaluator/builtins/expr_fns.d.ts +33 -0
  48. package/out/types/src/evaluator/builtins/future_fns.d.ts +8 -0
  49. package/out/types/src/evaluator/builtins/gc.d.ts +8 -0
  50. package/out/types/src/evaluator/builtins/gensym.d.ts +8 -0
  51. package/out/types/src/evaluator/builtins/impl_constraint.d.ts +8 -0
  52. package/out/types/src/evaluator/builtins/macro_expand.d.ts +8 -0
  53. package/out/types/src/evaluator/builtins/numeric_fns.d.ts +8 -0
  54. package/out/types/src/evaluator/builtins/panic.d.ts +8 -0
  55. package/out/types/src/evaluator/builtins/ptr_fns.d.ts +8 -0
  56. package/out/types/src/evaluator/builtins/quote.d.ts +13 -0
  57. package/out/types/src/evaluator/builtins/rc.d.ts +8 -0
  58. package/out/types/src/evaluator/builtins/sizeof.d.ts +8 -0
  59. package/out/types/src/evaluator/builtins/the.d.ts +8 -0
  60. package/out/types/src/evaluator/builtins/type_fns.d.ts +28 -0
  61. package/out/types/src/evaluator/builtins/va_start.d.ts +8 -0
  62. package/out/types/src/evaluator/builtins/var_fns.d.ts +18 -0
  63. package/out/types/src/evaluator/calls/array.d.ts +13 -0
  64. package/out/types/src/evaluator/calls/array_type.d.ts +11 -0
  65. package/out/types/src/evaluator/calls/closure_type.d.ts +11 -0
  66. package/out/types/src/evaluator/calls/compt_function.d.ts +19 -0
  67. package/out/types/src/evaluator/calls/compt_list_type.d.ts +11 -0
  68. package/out/types/src/evaluator/calls/function.d.ts +16 -0
  69. package/out/types/src/evaluator/calls/function_type.d.ts +15 -0
  70. package/out/types/src/evaluator/calls/helper.d.ts +42 -0
  71. package/out/types/src/evaluator/calls/iso.d.ts +15 -0
  72. package/out/types/src/evaluator/calls/module_type.d.ts +11 -0
  73. package/out/types/src/evaluator/calls/numeric_type.d.ts +15 -0
  74. package/out/types/src/evaluator/calls/pointer.d.ts +8 -0
  75. package/out/types/src/evaluator/calls/pointer_type.d.ts +14 -0
  76. package/out/types/src/evaluator/calls/type.d.ts +12 -0
  77. package/out/types/src/evaluator/context.d.ts +169 -0
  78. package/out/types/src/evaluator/exprs/_expr.d.ts +8 -0
  79. package/out/types/src/evaluator/exprs/assignment.d.ts +9 -0
  80. package/out/types/src/evaluator/exprs/begin.d.ts +10 -0
  81. package/out/types/src/evaluator/exprs/binding.d.ts +12 -0
  82. package/out/types/src/evaluator/exprs/c_include.d.ts +8 -0
  83. package/out/types/src/evaluator/exprs/cond.d.ts +8 -0
  84. package/out/types/src/evaluator/exprs/destructuring_assignment.d.ts +33 -0
  85. package/out/types/src/evaluator/exprs/exists.d.ts +0 -0
  86. package/out/types/src/evaluator/exprs/expr.d.ts +9 -0
  87. package/out/types/src/evaluator/exprs/extern.d.ts +8 -0
  88. package/out/types/src/evaluator/exprs/identifer_and_operator.d.ts +9 -0
  89. package/out/types/src/evaluator/exprs/import.d.ts +9 -0
  90. package/out/types/src/evaluator/exprs/initialization_assignment.d.ts +8 -0
  91. package/out/types/src/evaluator/exprs/match.d.ts +8 -0
  92. package/out/types/src/evaluator/exprs/open.d.ts +8 -0
  93. package/out/types/src/evaluator/exprs/property_access.d.ts +8 -0
  94. package/out/types/src/evaluator/exprs/recur.d.ts +8 -0
  95. package/out/types/src/evaluator/exprs/subtype_of.d.ts +21 -0
  96. package/out/types/src/evaluator/exprs/test.d.ts +8 -0
  97. package/out/types/src/evaluator/exprs/typeof.d.ts +8 -0
  98. package/out/types/src/evaluator/exprs/while.d.ts +8 -0
  99. package/out/types/src/evaluator/index.d.ts +26 -0
  100. package/out/types/src/evaluator/types/array.d.ts +8 -0
  101. package/out/types/src/evaluator/types/closure.d.ts +8 -0
  102. package/out/types/src/evaluator/types/compt_list.d.ts +8 -0
  103. package/out/types/src/evaluator/types/concrete_module.d.ts +8 -0
  104. package/out/types/src/evaluator/types/dyn.d.ts +8 -0
  105. package/out/types/src/evaluator/types/enum.d.ts +8 -0
  106. package/out/types/src/evaluator/types/expr_synthesizer.d.ts +14 -0
  107. package/out/types/src/evaluator/types/field.d.ts +14 -0
  108. package/out/types/src/evaluator/types/fn_module.d.ts +8 -0
  109. package/out/types/src/evaluator/types/function.d.ts +58 -0
  110. package/out/types/src/evaluator/types/future_module.d.ts +8 -0
  111. package/out/types/src/evaluator/types/module.d.ts +19 -0
  112. package/out/types/src/evaluator/types/newtype.d.ts +8 -0
  113. package/out/types/src/evaluator/types/object.d.ts +8 -0
  114. package/out/types/src/evaluator/types/proofs.d.ts +0 -0
  115. package/out/types/src/evaluator/types/slice.d.ts +8 -0
  116. package/out/types/src/evaluator/types/struct.d.ts +8 -0
  117. package/out/types/src/evaluator/types/synthesizer.d.ts +16 -0
  118. package/out/types/src/evaluator/types/tuple.d.ts +18 -0
  119. package/out/types/src/evaluator/types/union.d.ts +8 -0
  120. package/out/types/src/evaluator/types/utils.d.ts +71 -0
  121. package/out/types/src/evaluator/types/validation.d.ts +3 -0
  122. package/out/types/src/evaluator/utils/array-utils.d.ts +15 -0
  123. package/out/types/src/evaluator/utils/closure.d.ts +35 -0
  124. package/out/types/src/evaluator/utils.d.ts +4 -0
  125. package/out/types/src/evaluator/values/anonymous_function.d.ts +8 -0
  126. package/out/types/src/evaluator/values/anonymous_module.d.ts +17 -0
  127. package/out/types/src/evaluator/values/anonymous_struct.d.ts +8 -0
  128. package/out/types/src/evaluator/values/array.d.ts +8 -0
  129. package/out/types/src/evaluator/values/boolean.d.ts +3 -0
  130. package/out/types/src/evaluator/values/char.d.ts +3 -0
  131. package/out/types/src/evaluator/values/compt_list.d.ts +8 -0
  132. package/out/types/src/evaluator/values/dyn.d.ts +8 -0
  133. package/out/types/src/evaluator/values/float.d.ts +4 -0
  134. package/out/types/src/evaluator/values/integer.d.ts +4 -0
  135. package/out/types/src/evaluator/values/module.d.ts +58 -0
  136. package/out/types/src/evaluator/values/string.d.ts +3 -0
  137. package/out/types/src/evaluator/values/tuple.d.ts +32 -0
  138. package/out/types/src/expr.d.ts +456 -0
  139. package/out/types/src/function-value.d.ts +42 -0
  140. package/out/types/src/index.d.ts +4 -0
  141. package/out/types/src/lexer.d.ts +2 -0
  142. package/out/types/src/logger.d.ts +1 -0
  143. package/out/types/src/module-manager.d.ts +30 -0
  144. package/out/types/src/naming-checker.d.ts +4 -0
  145. package/out/types/src/parser.d.ts +33 -0
  146. package/out/types/src/test-runner.d.ts +30 -0
  147. package/out/types/src/tests/codegen.test.d.ts +1 -0
  148. package/out/types/src/tests/fixme.test.d.ts +1 -0
  149. package/out/types/src/tests/module-manager.test.d.ts +1 -0
  150. package/out/types/src/tests/parser.test.d.ts +1 -0
  151. package/out/types/src/tests/sample.test.d.ts +0 -0
  152. package/out/types/src/tests/std.test.d.ts +1 -0
  153. package/out/types/src/token.d.ts +40 -0
  154. package/out/types/src/type-value.d.ts +7 -0
  155. package/out/types/src/types/compatibility.d.ts +16 -0
  156. package/out/types/src/types/creators.d.ts +73 -0
  157. package/out/types/src/types/definitions.d.ts +218 -0
  158. package/out/types/src/types/guards.d.ts +70 -0
  159. package/out/types/src/types/hierarchy.d.ts +4 -0
  160. package/out/types/src/types/index.d.ts +7 -0
  161. package/out/types/src/types/module_field.d.ts +2 -0
  162. package/out/types/src/types/tags.d.ts +45 -0
  163. package/out/types/src/types/utils.d.ts +50 -0
  164. package/out/types/src/unit-value.d.ts +7 -0
  165. package/out/types/src/utils.d.ts +6 -0
  166. package/out/types/src/value-tag.d.ts +29 -0
  167. package/out/types/src/value.d.ts +110 -0
  168. package/out/types/src/yo-cli.d.ts +1 -0
  169. package/out/types/tsconfig.tsbuildinfo +1 -0
  170. package/package.json +57 -0
  171. package/scripts/check-liburing.js +76 -0
  172. package/std/alg/hash.yo +50 -0
  173. package/std/allocator.yo +113 -0
  174. package/std/allocators/c_allocator.yo +118 -0
  175. package/std/async.yo +13 -0
  176. package/std/collections/array_list.yo +415 -0
  177. package/std/collections/hash_map.yo +482 -0
  178. package/std/collections/hash_set.yo +706 -0
  179. package/std/collections/index.yo +11 -0
  180. package/std/collections/linked_list.yo +439 -0
  181. package/std/error.yo +0 -0
  182. package/std/gc.yo +10 -0
  183. package/std/index.yo +12 -0
  184. package/std/io/file.yo +191 -0
  185. package/std/io/index.yo +5 -0
  186. package/std/libc/assert.yo +39 -0
  187. package/std/libc/ctype.yo +57 -0
  188. package/std/libc/errno.yo +182 -0
  189. package/std/libc/float.yo +87 -0
  190. package/std/libc/index.yo +29 -0
  191. package/std/libc/limits.yo +65 -0
  192. package/std/libc/math.yo +679 -0
  193. package/std/libc/signal.yo +101 -0
  194. package/std/libc/stdatomic.yo +213 -0
  195. package/std/libc/stdint.yo +214 -0
  196. package/std/libc/stdio.yo +225 -0
  197. package/std/libc/stdlib.yo +204 -0
  198. package/std/libc/string.yo +151 -0
  199. package/std/libc/time.yo +92 -0
  200. package/std/libc/unistd.yo +130 -0
  201. package/std/monad.yo +152 -0
  202. package/std/prelude.yo +3094 -0
  203. package/std/string/index.yo +8 -0
  204. package/std/string/rune.yo +82 -0
  205. package/std/string/string.yo +288 -0
  206. package/std/sync.yo +95 -0
  207. package/std/thread.yo +36 -0
  208. package/std/time.yo +13 -0
  209. package/std/worker.yo +36 -0
  210. package/vendor/mimalloc/.gitattributes +12 -0
  211. package/vendor/mimalloc/CMakeLists.txt +763 -0
  212. package/vendor/mimalloc/LICENSE +21 -0
  213. package/vendor/mimalloc/SECURITY.md +41 -0
  214. package/vendor/mimalloc/azure-pipelines.yml +251 -0
  215. package/vendor/mimalloc/bin/mimalloc-redirect-arm64.dll +0 -0
  216. package/vendor/mimalloc/bin/mimalloc-redirect-arm64.lib +0 -0
  217. package/vendor/mimalloc/bin/mimalloc-redirect-arm64ec.dll +0 -0
  218. package/vendor/mimalloc/bin/mimalloc-redirect-arm64ec.lib +0 -0
  219. package/vendor/mimalloc/bin/mimalloc-redirect.dll +0 -0
  220. package/vendor/mimalloc/bin/mimalloc-redirect.lib +0 -0
  221. package/vendor/mimalloc/bin/mimalloc-redirect32.dll +0 -0
  222. package/vendor/mimalloc/bin/mimalloc-redirect32.lib +0 -0
  223. package/vendor/mimalloc/bin/minject-arm64.exe +0 -0
  224. package/vendor/mimalloc/bin/minject.exe +0 -0
  225. package/vendor/mimalloc/bin/minject32.exe +0 -0
  226. package/vendor/mimalloc/bin/readme.md +118 -0
  227. package/vendor/mimalloc/cmake/JoinPaths.cmake +23 -0
  228. package/vendor/mimalloc/cmake/mimalloc-config-version.cmake +19 -0
  229. package/vendor/mimalloc/cmake/mimalloc-config.cmake +14 -0
  230. package/vendor/mimalloc/contrib/docker/alpine/Dockerfile +23 -0
  231. package/vendor/mimalloc/contrib/docker/alpine-arm32v7/Dockerfile +28 -0
  232. package/vendor/mimalloc/contrib/docker/alpine-x86/Dockerfile +28 -0
  233. package/vendor/mimalloc/contrib/docker/manylinux-x64/Dockerfile +23 -0
  234. package/vendor/mimalloc/contrib/docker/readme.md +10 -0
  235. package/vendor/mimalloc/contrib/vcpkg/portfile.cmake +64 -0
  236. package/vendor/mimalloc/contrib/vcpkg/readme.md +40 -0
  237. package/vendor/mimalloc/contrib/vcpkg/usage +20 -0
  238. package/vendor/mimalloc/contrib/vcpkg/vcpkg-cmake-wrapper.cmake +20 -0
  239. package/vendor/mimalloc/contrib/vcpkg/vcpkg.json +48 -0
  240. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-a.svg +887 -0
  241. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-b.svg +1185 -0
  242. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-a.svg +757 -0
  243. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-b.svg +1028 -0
  244. package/vendor/mimalloc/doc/bench-2020/bench-r5a-1.svg +769 -0
  245. package/vendor/mimalloc/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-a.svg +868 -0
  246. package/vendor/mimalloc/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-b.svg +1157 -0
  247. package/vendor/mimalloc/doc/bench-2020/bench-r5a-2.svg +983 -0
  248. package/vendor/mimalloc/doc/bench-2020/bench-r5a-rss-1.svg +683 -0
  249. package/vendor/mimalloc/doc/bench-2020/bench-r5a-rss-2.svg +854 -0
  250. package/vendor/mimalloc/doc/bench-2020/bench-spec-rss.svg +713 -0
  251. package/vendor/mimalloc/doc/bench-2020/bench-spec.svg +713 -0
  252. package/vendor/mimalloc/doc/bench-2020/bench-z4-1.svg +890 -0
  253. package/vendor/mimalloc/doc/bench-2020/bench-z4-2.svg +1146 -0
  254. package/vendor/mimalloc/doc/bench-2020/bench-z4-rss-1.svg +796 -0
  255. package/vendor/mimalloc/doc/bench-2020/bench-z4-rss-2.svg +974 -0
  256. package/vendor/mimalloc/doc/bench-2021/bench-amd5950x-2021-01-30-a.svg +952 -0
  257. package/vendor/mimalloc/doc/bench-2021/bench-amd5950x-2021-01-30-b.svg +1255 -0
  258. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-a.svg +955 -0
  259. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-b.svg +1269 -0
  260. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-a.svg +836 -0
  261. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-b.svg +1131 -0
  262. package/vendor/mimalloc/doc/bench-2021/bench-macmini-2021-01-30.svg +766 -0
  263. package/vendor/mimalloc/doc/doxyfile +2895 -0
  264. package/vendor/mimalloc/doc/ds-logo.jpg +0 -0
  265. package/vendor/mimalloc/doc/ds-logo.png +0 -0
  266. package/vendor/mimalloc/doc/mimalloc-doc.h +1452 -0
  267. package/vendor/mimalloc/doc/mimalloc-doxygen.css +60 -0
  268. package/vendor/mimalloc/doc/mimalloc-logo-100.png +0 -0
  269. package/vendor/mimalloc/doc/mimalloc-logo.png +0 -0
  270. package/vendor/mimalloc/doc/mimalloc-logo.svg +161 -0
  271. package/vendor/mimalloc/doc/spades-logo.png +0 -0
  272. package/vendor/mimalloc/doc/unreal-logo.svg +43 -0
  273. package/vendor/mimalloc/ide/vs2022/mimalloc-lib.vcxproj +500 -0
  274. package/vendor/mimalloc/ide/vs2022/mimalloc-lib.vcxproj.filters +108 -0
  275. package/vendor/mimalloc/ide/vs2022/mimalloc-override-dll.vcxproj +508 -0
  276. package/vendor/mimalloc/ide/vs2022/mimalloc-override-dll.vcxproj.filters +111 -0
  277. package/vendor/mimalloc/ide/vs2022/mimalloc-override-test-dep.vcxproj +355 -0
  278. package/vendor/mimalloc/ide/vs2022/mimalloc-override-test.vcxproj +360 -0
  279. package/vendor/mimalloc/ide/vs2022/mimalloc-test-api.vcxproj +295 -0
  280. package/vendor/mimalloc/ide/vs2022/mimalloc-test-stress.vcxproj +292 -0
  281. package/vendor/mimalloc/ide/vs2022/mimalloc-test.vcxproj +289 -0
  282. package/vendor/mimalloc/ide/vs2022/mimalloc.sln +151 -0
  283. package/vendor/mimalloc/include/mimalloc/atomic.h +557 -0
  284. package/vendor/mimalloc/include/mimalloc/internal.h +1153 -0
  285. package/vendor/mimalloc/include/mimalloc/prim.h +421 -0
  286. package/vendor/mimalloc/include/mimalloc/track.h +145 -0
  287. package/vendor/mimalloc/include/mimalloc/types.h +685 -0
  288. package/vendor/mimalloc/include/mimalloc-new-delete.h +66 -0
  289. package/vendor/mimalloc/include/mimalloc-override.h +68 -0
  290. package/vendor/mimalloc/include/mimalloc-stats.h +103 -0
  291. package/vendor/mimalloc/include/mimalloc.h +612 -0
  292. package/vendor/mimalloc/mimalloc.pc.in +11 -0
  293. package/vendor/mimalloc/readme.md +946 -0
  294. package/vendor/mimalloc/src/alloc-aligned.c +360 -0
  295. package/vendor/mimalloc/src/alloc-override.c +316 -0
  296. package/vendor/mimalloc/src/alloc-posix.c +185 -0
  297. package/vendor/mimalloc/src/alloc.c +692 -0
  298. package/vendor/mimalloc/src/arena-abandon.c +346 -0
  299. package/vendor/mimalloc/src/arena.c +1043 -0
  300. package/vendor/mimalloc/src/bitmap.c +441 -0
  301. package/vendor/mimalloc/src/bitmap.h +119 -0
  302. package/vendor/mimalloc/src/free.c +572 -0
  303. package/vendor/mimalloc/src/heap.c +733 -0
  304. package/vendor/mimalloc/src/init.c +714 -0
  305. package/vendor/mimalloc/src/libc.c +334 -0
  306. package/vendor/mimalloc/src/options.c +663 -0
  307. package/vendor/mimalloc/src/os.c +770 -0
  308. package/vendor/mimalloc/src/page-queue.c +390 -0
  309. package/vendor/mimalloc/src/page.c +1049 -0
  310. package/vendor/mimalloc/src/prim/emscripten/prim.c +249 -0
  311. package/vendor/mimalloc/src/prim/osx/alloc-override-zone.c +461 -0
  312. package/vendor/mimalloc/src/prim/osx/prim.c +9 -0
  313. package/vendor/mimalloc/src/prim/prim.c +76 -0
  314. package/vendor/mimalloc/src/prim/readme.md +9 -0
  315. package/vendor/mimalloc/src/prim/unix/prim.c +934 -0
  316. package/vendor/mimalloc/src/prim/wasi/prim.c +284 -0
  317. package/vendor/mimalloc/src/prim/windows/etw-mimalloc.wprp +61 -0
  318. package/vendor/mimalloc/src/prim/windows/etw.h +905 -0
  319. package/vendor/mimalloc/src/prim/windows/etw.man +0 -0
  320. package/vendor/mimalloc/src/prim/windows/prim.c +878 -0
  321. package/vendor/mimalloc/src/prim/windows/readme.md +17 -0
  322. package/vendor/mimalloc/src/random.c +258 -0
  323. package/vendor/mimalloc/src/segment-map.c +142 -0
  324. package/vendor/mimalloc/src/segment.c +1702 -0
  325. package/vendor/mimalloc/src/static.c +41 -0
  326. package/vendor/mimalloc/src/stats.c +635 -0
  327. package/vendor/mimalloc/test/CMakeLists.txt +56 -0
  328. package/vendor/mimalloc/test/main-override-dep.cpp +51 -0
  329. package/vendor/mimalloc/test/main-override-dep.h +11 -0
  330. package/vendor/mimalloc/test/main-override-static.c +539 -0
  331. package/vendor/mimalloc/test/main-override.c +36 -0
  332. package/vendor/mimalloc/test/main-override.cpp +497 -0
  333. package/vendor/mimalloc/test/main.c +46 -0
  334. package/vendor/mimalloc/test/readme.md +16 -0
  335. package/vendor/mimalloc/test/test-api-fill.c +343 -0
  336. package/vendor/mimalloc/test/test-api.c +466 -0
  337. package/vendor/mimalloc/test/test-stress.c +428 -0
  338. package/vendor/mimalloc/test/test-wrong.c +92 -0
  339. package/vendor/mimalloc/test/testhelper.h +49 -0
@@ -0,0 +1,390 @@
1
+ /*----------------------------------------------------------------------------
2
+ Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
3
+ This is free software; you can redistribute it and/or modify it under the
4
+ terms of the MIT license. A copy of the license can be found in the file
5
+ "LICENSE" at the root of this distribution.
6
+ -----------------------------------------------------------------------------*/
7
+
8
+ /* -----------------------------------------------------------
9
+ Definition of page queues for each block size
10
+ ----------------------------------------------------------- */
11
+
12
+ #ifndef MI_IN_PAGE_C
13
+ #error "this file should be included from 'page.c'"
14
+ // include to help an IDE
15
+ #include "mimalloc.h"
16
+ #include "mimalloc/internal.h"
17
+ #include "mimalloc/atomic.h"
18
+ #endif
19
+
20
+ /* -----------------------------------------------------------
21
+ Minimal alignment in machine words (i.e. `sizeof(void*)`)
22
+ ----------------------------------------------------------- */
23
+
24
+ #if (MI_MAX_ALIGN_SIZE > 4*MI_INTPTR_SIZE)
25
+ #error "define alignment for more than 4x word size for this platform"
26
+ #elif (MI_MAX_ALIGN_SIZE > 2*MI_INTPTR_SIZE)
27
+ #define MI_ALIGN4W // 4 machine words minimal alignment
28
+ #elif (MI_MAX_ALIGN_SIZE > MI_INTPTR_SIZE)
29
+ #define MI_ALIGN2W // 2 machine words minimal alignment
30
+ #else
31
+ // ok, default alignment is 1 word
32
+ #endif
33
+
34
+
35
+ /* -----------------------------------------------------------
36
+ Queue query
37
+ ----------------------------------------------------------- */
38
+
39
+
40
+ static inline bool mi_page_queue_is_huge(const mi_page_queue_t* pq) {
41
+ return (pq->block_size == (MI_MEDIUM_OBJ_SIZE_MAX+sizeof(uintptr_t)));
42
+ }
43
+
44
+ static inline bool mi_page_queue_is_full(const mi_page_queue_t* pq) {
45
+ return (pq->block_size == (MI_MEDIUM_OBJ_SIZE_MAX+(2*sizeof(uintptr_t))));
46
+ }
47
+
48
+ static inline bool mi_page_queue_is_special(const mi_page_queue_t* pq) {
49
+ return (pq->block_size > MI_MEDIUM_OBJ_SIZE_MAX);
50
+ }
51
+
52
+ /* -----------------------------------------------------------
53
+ Bins
54
+ ----------------------------------------------------------- */
55
+
56
+ // Return the bin for a given field size.
57
+ // Returns MI_BIN_HUGE if the size is too large.
58
+ // We use `wsize` for the size in "machine word sizes",
59
+ // i.e. byte size == `wsize*sizeof(void*)`.
60
+ static inline size_t mi_bin(size_t size) {
61
+ size_t wsize = _mi_wsize_from_size(size);
62
+ #if defined(MI_ALIGN4W)
63
+ if mi_likely(wsize <= 4) {
64
+ return (wsize <= 1 ? 1 : (wsize+1)&~1); // round to double word sizes
65
+ }
66
+ #elif defined(MI_ALIGN2W)
67
+ if mi_likely(wsize <= 8) {
68
+ return (wsize <= 1 ? 1 : (wsize+1)&~1); // round to double word sizes
69
+ }
70
+ #else
71
+ if mi_likely(wsize <= 8) {
72
+ return (wsize == 0 ? 1 : wsize);
73
+ }
74
+ #endif
75
+ else if mi_unlikely(wsize > MI_MEDIUM_OBJ_WSIZE_MAX) {
76
+ return MI_BIN_HUGE;
77
+ }
78
+ else {
79
+ #if defined(MI_ALIGN4W)
80
+ if (wsize <= 16) { wsize = (wsize+3)&~3; } // round to 4x word sizes
81
+ #endif
82
+ wsize--;
83
+ // find the highest bit
84
+ const size_t b = (MI_SIZE_BITS - 1 - mi_clz(wsize)); // note: wsize != 0
85
+ // and use the top 3 bits to determine the bin (~12.5% worst internal fragmentation).
86
+ // - adjust with 3 because we use do not round the first 8 sizes
87
+ // which each get an exact bin
88
+ const size_t bin = ((b << 2) + ((wsize >> (b - 2)) & 0x03)) - 3;
89
+ mi_assert_internal(bin > 0 && bin < MI_BIN_HUGE);
90
+ return bin;
91
+ }
92
+ }
93
+
94
+
95
+
96
+ /* -----------------------------------------------------------
97
+ Queue of pages with free blocks
98
+ ----------------------------------------------------------- */
99
+
100
+ size_t _mi_bin(size_t size) {
101
+ return mi_bin(size);
102
+ }
103
+
104
+ size_t _mi_bin_size(size_t bin) {
105
+ return _mi_heap_empty.pages[bin].block_size;
106
+ }
107
+
108
+ // Good size for allocation
109
+ size_t mi_good_size(size_t size) mi_attr_noexcept {
110
+ if (size <= MI_MEDIUM_OBJ_SIZE_MAX) {
111
+ return _mi_bin_size(mi_bin(size + MI_PADDING_SIZE));
112
+ }
113
+ else {
114
+ return _mi_align_up(size + MI_PADDING_SIZE,_mi_os_page_size());
115
+ }
116
+ }
117
+
118
+ #if (MI_DEBUG>1)
119
+ static bool mi_page_queue_contains(mi_page_queue_t* queue, const mi_page_t* page) {
120
+ mi_assert_internal(page != NULL);
121
+ mi_page_t* list = queue->first;
122
+ while (list != NULL) {
123
+ mi_assert_internal(list->next == NULL || list->next->prev == list);
124
+ mi_assert_internal(list->prev == NULL || list->prev->next == list);
125
+ if (list == page) break;
126
+ list = list->next;
127
+ }
128
+ return (list == page);
129
+ }
130
+
131
+ #endif
132
+
133
+ #if (MI_DEBUG>1)
134
+ static bool mi_heap_contains_queue(const mi_heap_t* heap, const mi_page_queue_t* pq) {
135
+ return (pq >= &heap->pages[0] && pq <= &heap->pages[MI_BIN_FULL]);
136
+ }
137
+ #endif
138
+
139
+ static inline bool mi_page_is_large_or_huge(const mi_page_t* page) {
140
+ return (mi_page_block_size(page) > MI_MEDIUM_OBJ_SIZE_MAX || mi_page_is_huge(page));
141
+ }
142
+
143
+ size_t _mi_page_bin(const mi_page_t* page) {
144
+ const size_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : (mi_page_is_huge(page) ? MI_BIN_HUGE : mi_bin(mi_page_block_size(page))));
145
+ mi_assert_internal(bin <= MI_BIN_FULL);
146
+ return bin;
147
+ }
148
+
149
+ static mi_page_queue_t* mi_heap_page_queue_of(mi_heap_t* heap, const mi_page_t* page) {
150
+ mi_assert_internal(heap!=NULL);
151
+ const size_t bin = _mi_page_bin(page);
152
+ mi_page_queue_t* pq = &heap->pages[bin];
153
+ mi_assert_internal((mi_page_block_size(page) == pq->block_size) ||
154
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(pq)) ||
155
+ (mi_page_is_in_full(page) && mi_page_queue_is_full(pq)));
156
+ return pq;
157
+ }
158
+
159
+ static mi_page_queue_t* mi_page_queue_of(const mi_page_t* page) {
160
+ mi_heap_t* heap = mi_page_heap(page);
161
+ mi_page_queue_t* pq = mi_heap_page_queue_of(heap, page);
162
+ mi_assert_expensive(mi_page_queue_contains(pq, page));
163
+ return pq;
164
+ }
165
+
166
+ // The current small page array is for efficiency and for each
167
+ // small size (up to 256) it points directly to the page for that
168
+ // size without having to compute the bin. This means when the
169
+ // current free page queue is updated for a small bin, we need to update a
170
+ // range of entries in `_mi_page_small_free`.
171
+ static inline void mi_heap_queue_first_update(mi_heap_t* heap, const mi_page_queue_t* pq) {
172
+ mi_assert_internal(mi_heap_contains_queue(heap,pq));
173
+ size_t size = pq->block_size;
174
+ if (size > MI_SMALL_SIZE_MAX) return;
175
+
176
+ mi_page_t* page = pq->first;
177
+ if (pq->first == NULL) page = (mi_page_t*)&_mi_page_empty;
178
+
179
+ // find index in the right direct page array
180
+ size_t start;
181
+ size_t idx = _mi_wsize_from_size(size);
182
+ mi_page_t** pages_free = heap->pages_free_direct;
183
+
184
+ if (pages_free[idx] == page) return; // already set
185
+
186
+ // find start slot
187
+ if (idx<=1) {
188
+ start = 0;
189
+ }
190
+ else {
191
+ // find previous size; due to minimal alignment upto 3 previous bins may need to be skipped
192
+ size_t bin = mi_bin(size);
193
+ const mi_page_queue_t* prev = pq - 1;
194
+ while( bin == mi_bin(prev->block_size) && prev > &heap->pages[0]) {
195
+ prev--;
196
+ }
197
+ start = 1 + _mi_wsize_from_size(prev->block_size);
198
+ if (start > idx) start = idx;
199
+ }
200
+
201
+ // set size range to the right page
202
+ mi_assert(start <= idx);
203
+ for (size_t sz = start; sz <= idx; sz++) {
204
+ pages_free[sz] = page;
205
+ }
206
+ }
207
+
208
+ /*
209
+ static bool mi_page_queue_is_empty(mi_page_queue_t* queue) {
210
+ return (queue->first == NULL);
211
+ }
212
+ */
213
+
214
+ static void mi_page_queue_remove(mi_page_queue_t* queue, mi_page_t* page) {
215
+ mi_assert_internal(page != NULL);
216
+ mi_assert_expensive(mi_page_queue_contains(queue, page));
217
+ mi_assert_internal(mi_page_block_size(page) == queue->block_size ||
218
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(queue)) ||
219
+ (mi_page_is_in_full(page) && mi_page_queue_is_full(queue)));
220
+ mi_heap_t* heap = mi_page_heap(page);
221
+
222
+ if (page->prev != NULL) page->prev->next = page->next;
223
+ if (page->next != NULL) page->next->prev = page->prev;
224
+ if (page == queue->last) queue->last = page->prev;
225
+ if (page == queue->first) {
226
+ queue->first = page->next;
227
+ // update first
228
+ mi_assert_internal(mi_heap_contains_queue(heap, queue));
229
+ mi_heap_queue_first_update(heap,queue);
230
+ }
231
+ heap->page_count--;
232
+ page->next = NULL;
233
+ page->prev = NULL;
234
+ // mi_atomic_store_ptr_release(mi_atomic_cast(void*, &page->heap), NULL);
235
+ mi_page_set_in_full(page,false);
236
+ }
237
+
238
+
239
+ static void mi_page_queue_push(mi_heap_t* heap, mi_page_queue_t* queue, mi_page_t* page) {
240
+ mi_assert_internal(mi_page_heap(page) == heap);
241
+ mi_assert_internal(!mi_page_queue_contains(queue, page));
242
+ #if MI_HUGE_PAGE_ABANDON
243
+ mi_assert_internal(_mi_page_segment(page)->kind != MI_SEGMENT_HUGE);
244
+ #endif
245
+ mi_assert_internal(mi_page_block_size(page) == queue->block_size ||
246
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(queue)) ||
247
+ (mi_page_is_in_full(page) && mi_page_queue_is_full(queue)));
248
+
249
+ mi_page_set_in_full(page, mi_page_queue_is_full(queue));
250
+ // mi_atomic_store_ptr_release(mi_atomic_cast(void*, &page->heap), heap);
251
+ page->next = queue->first;
252
+ page->prev = NULL;
253
+ if (queue->first != NULL) {
254
+ mi_assert_internal(queue->first->prev == NULL);
255
+ queue->first->prev = page;
256
+ queue->first = page;
257
+ }
258
+ else {
259
+ queue->first = queue->last = page;
260
+ }
261
+
262
+ // update direct
263
+ mi_heap_queue_first_update(heap, queue);
264
+ heap->page_count++;
265
+ }
266
+
267
+ static void mi_page_queue_move_to_front(mi_heap_t* heap, mi_page_queue_t* queue, mi_page_t* page) {
268
+ mi_assert_internal(mi_page_heap(page) == heap);
269
+ mi_assert_internal(mi_page_queue_contains(queue, page));
270
+ if (queue->first == page) return;
271
+ mi_page_queue_remove(queue, page);
272
+ mi_page_queue_push(heap, queue, page);
273
+ mi_assert_internal(queue->first == page);
274
+ }
275
+
276
+ static void mi_page_queue_enqueue_from_ex(mi_page_queue_t* to, mi_page_queue_t* from, bool enqueue_at_end, mi_page_t* page) {
277
+ mi_assert_internal(page != NULL);
278
+ mi_assert_expensive(mi_page_queue_contains(from, page));
279
+ mi_assert_expensive(!mi_page_queue_contains(to, page));
280
+ const size_t bsize = mi_page_block_size(page);
281
+ MI_UNUSED(bsize);
282
+ mi_assert_internal((bsize == to->block_size && bsize == from->block_size) ||
283
+ (bsize == to->block_size && mi_page_queue_is_full(from)) ||
284
+ (bsize == from->block_size && mi_page_queue_is_full(to)) ||
285
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(to)) ||
286
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_full(to)));
287
+
288
+ mi_heap_t* heap = mi_page_heap(page);
289
+
290
+ // delete from `from`
291
+ if (page->prev != NULL) page->prev->next = page->next;
292
+ if (page->next != NULL) page->next->prev = page->prev;
293
+ if (page == from->last) from->last = page->prev;
294
+ if (page == from->first) {
295
+ from->first = page->next;
296
+ // update first
297
+ mi_assert_internal(mi_heap_contains_queue(heap, from));
298
+ mi_heap_queue_first_update(heap, from);
299
+ }
300
+
301
+ // insert into `to`
302
+ if (enqueue_at_end) {
303
+ // enqueue at the end
304
+ page->prev = to->last;
305
+ page->next = NULL;
306
+ if (to->last != NULL) {
307
+ mi_assert_internal(heap == mi_page_heap(to->last));
308
+ to->last->next = page;
309
+ to->last = page;
310
+ }
311
+ else {
312
+ to->first = page;
313
+ to->last = page;
314
+ mi_heap_queue_first_update(heap, to);
315
+ }
316
+ }
317
+ else {
318
+ if (to->first != NULL) {
319
+ // enqueue at 2nd place
320
+ mi_assert_internal(heap == mi_page_heap(to->first));
321
+ mi_page_t* next = to->first->next;
322
+ page->prev = to->first;
323
+ page->next = next;
324
+ to->first->next = page;
325
+ if (next != NULL) {
326
+ next->prev = page;
327
+ }
328
+ else {
329
+ to->last = page;
330
+ }
331
+ }
332
+ else {
333
+ // enqueue at the head (singleton list)
334
+ page->prev = NULL;
335
+ page->next = NULL;
336
+ to->first = page;
337
+ to->last = page;
338
+ mi_heap_queue_first_update(heap, to);
339
+ }
340
+ }
341
+
342
+ mi_page_set_in_full(page, mi_page_queue_is_full(to));
343
+ }
344
+
345
+ static void mi_page_queue_enqueue_from(mi_page_queue_t* to, mi_page_queue_t* from, mi_page_t* page) {
346
+ mi_page_queue_enqueue_from_ex(to, from, true /* enqueue at the end */, page);
347
+ }
348
+
349
+ static void mi_page_queue_enqueue_from_full(mi_page_queue_t* to, mi_page_queue_t* from, mi_page_t* page) {
350
+ // note: we could insert at the front to increase reuse, but it slows down certain benchmarks (like `alloc-test`)
351
+ mi_page_queue_enqueue_from_ex(to, from, true /* enqueue at the end of the `to` queue? */, page);
352
+ }
353
+
354
+ // Only called from `mi_heap_absorb`.
355
+ size_t _mi_page_queue_append(mi_heap_t* heap, mi_page_queue_t* pq, mi_page_queue_t* append) {
356
+ mi_assert_internal(mi_heap_contains_queue(heap,pq));
357
+ mi_assert_internal(pq->block_size == append->block_size);
358
+
359
+ if (append->first==NULL) return 0;
360
+
361
+ // set append pages to new heap and count
362
+ size_t count = 0;
363
+ for (mi_page_t* page = append->first; page != NULL; page = page->next) {
364
+ // inline `mi_page_set_heap` to avoid wrong assertion during absorption;
365
+ // in this case it is ok to be delayed freeing since both "to" and "from" heap are still alive.
366
+ mi_atomic_store_release(&page->xheap, (uintptr_t)heap);
367
+ // set the flag to delayed free (not overriding NEVER_DELAYED_FREE) which has as a
368
+ // side effect that it spins until any DELAYED_FREEING is finished. This ensures
369
+ // that after appending only the new heap will be used for delayed free operations.
370
+ _mi_page_use_delayed_free(page, MI_USE_DELAYED_FREE, false);
371
+ count++;
372
+ }
373
+
374
+ if (pq->last==NULL) {
375
+ // take over afresh
376
+ mi_assert_internal(pq->first==NULL);
377
+ pq->first = append->first;
378
+ pq->last = append->last;
379
+ mi_heap_queue_first_update(heap, pq);
380
+ }
381
+ else {
382
+ // append to end
383
+ mi_assert_internal(pq->last!=NULL);
384
+ mi_assert_internal(append->first!=NULL);
385
+ pq->last->next = append->first;
386
+ append->first->prev = pq->last;
387
+ pq->last = append->last;
388
+ }
389
+ return count;
390
+ }