redscript-mc 2.6.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/.github/workflows/ci.yml +11 -0
  2. package/CHANGELOG.md +18 -9
  3. package/README-benchmarks.md +48 -0
  4. package/README-vscode-test.md +251 -0
  5. package/RELEASE_NOTES.md +74 -0
  6. package/ROADMAP.md +131 -167
  7. package/benchmarks/_shared.ts +468 -0
  8. package/benchmarks/baseline.json +2816 -0
  9. package/benchmarks/baseline.md +13 -0
  10. package/benchmarks/compiler-perf.report.json +207 -0
  11. package/benchmarks/compiler-perf.ts +76 -0
  12. package/benchmarks/results.md +13 -0
  13. package/benchmarks/stdlib-complexity.report.json +2606 -0
  14. package/benchmarks/stdlib-complexity.ts +54 -0
  15. package/benchmarks/stdlib-size.md +57 -0
  16. package/benchmarks/stdlib-size.ts +91 -0
  17. package/coverage-report.md +177 -0
  18. package/dist/src/__tests__/budget.test.js +4 -0
  19. package/dist/src/__tests__/cache/cache-behavior.test.d.ts +10 -0
  20. package/dist/src/__tests__/cache/cache-behavior.test.js +425 -0
  21. package/dist/src/__tests__/cache-extra.test.d.ts +5 -0
  22. package/dist/src/__tests__/cache-extra.test.js +211 -0
  23. package/dist/src/__tests__/cli-init.test.d.ts +1 -0
  24. package/dist/src/__tests__/cli-init.test.js +97 -0
  25. package/dist/src/__tests__/cli-publish.test.d.ts +9 -0
  26. package/dist/src/__tests__/cli-publish.test.js +189 -0
  27. package/dist/src/__tests__/cli.test.js +76 -0
  28. package/dist/src/__tests__/compile-preprocess.test.d.ts +11 -0
  29. package/dist/src/__tests__/compile-preprocess.test.js +328 -0
  30. package/dist/src/__tests__/compiler/break-stmt.test.d.ts +1 -0
  31. package/dist/src/__tests__/compiler/break-stmt.test.js +58 -0
  32. package/dist/src/__tests__/compiler/const-decl.test.d.ts +1 -0
  33. package/dist/src/__tests__/compiler/const-decl.test.js +123 -0
  34. package/dist/src/__tests__/compiler/continue-stmt.test.d.ts +1 -0
  35. package/dist/src/__tests__/compiler/continue-stmt.test.js +67 -0
  36. package/dist/src/__tests__/compiler/coroutine-extended.test.d.ts +17 -0
  37. package/dist/src/__tests__/compiler/coroutine-extended.test.js +565 -0
  38. package/dist/src/__tests__/compiler/deprecated.test.d.ts +4 -0
  39. package/dist/src/__tests__/compiler/deprecated.test.js +285 -0
  40. package/dist/src/__tests__/compiler/do-while.test.d.ts +1 -0
  41. package/dist/src/__tests__/compiler/do-while.test.js +120 -0
  42. package/dist/src/__tests__/compiler/enum-payload.test.d.ts +9 -0
  43. package/dist/src/__tests__/compiler/enum-payload.test.js +272 -0
  44. package/dist/src/__tests__/compiler/interface.test.d.ts +10 -0
  45. package/dist/src/__tests__/compiler/interface.test.js +258 -0
  46. package/dist/src/__tests__/compiler/labeled-loops.test.d.ts +1 -0
  47. package/dist/src/__tests__/compiler/labeled-loops.test.js +263 -0
  48. package/dist/src/__tests__/compiler/match-string.test.d.ts +1 -0
  49. package/dist/src/__tests__/compiler/match-string.test.js +43 -0
  50. package/dist/src/__tests__/compiler/memoize.test.d.ts +1 -0
  51. package/dist/src/__tests__/compiler/memoize.test.js +113 -0
  52. package/dist/src/__tests__/compiler/method-chain.test.d.ts +5 -0
  53. package/dist/src/__tests__/compiler/method-chain.test.js +115 -0
  54. package/dist/src/__tests__/compiler/module-import.test.d.ts +12 -0
  55. package/dist/src/__tests__/compiler/module-import.test.js +261 -0
  56. package/dist/src/__tests__/compiler/option-extensions.test.d.ts +6 -0
  57. package/dist/src/__tests__/compiler/option-extensions.test.js +191 -0
  58. package/dist/src/__tests__/compiler/profile-decorator.test.d.ts +1 -0
  59. package/dist/src/__tests__/compiler/profile-decorator.test.js +69 -0
  60. package/dist/src/__tests__/compiler/string-advanced.test.d.ts +7 -0
  61. package/dist/src/__tests__/compiler/string-advanced.test.js +281 -0
  62. package/dist/src/__tests__/compiler/struct-extends.test.d.ts +1 -0
  63. package/dist/src/__tests__/compiler/struct-extends.test.js +95 -0
  64. package/dist/src/__tests__/compiler/throttle-retry.test.d.ts +1 -0
  65. package/dist/src/__tests__/compiler/throttle-retry.test.js +166 -0
  66. package/dist/src/__tests__/compiler/tuple-type.test.d.ts +10 -0
  67. package/dist/src/__tests__/compiler/tuple-type.test.js +229 -0
  68. package/dist/src/__tests__/compiler/watch-decorator.test.d.ts +1 -0
  69. package/dist/src/__tests__/compiler/watch-decorator.test.js +65 -0
  70. package/dist/src/__tests__/config/project-config.test.d.ts +1 -0
  71. package/dist/src/__tests__/config/project-config.test.js +199 -0
  72. package/dist/src/__tests__/config-decorator.test.d.ts +8 -0
  73. package/dist/src/__tests__/config-decorator.test.js +142 -0
  74. package/dist/src/__tests__/diagnostics-extra.test.d.ts +6 -0
  75. package/dist/src/__tests__/diagnostics-extra.test.js +132 -0
  76. package/dist/src/__tests__/emit/compile-branches.test.d.ts +1 -0
  77. package/dist/src/__tests__/emit/compile-branches.test.js +123 -0
  78. package/dist/src/__tests__/emit/compile-coverage.test.d.ts +25 -0
  79. package/dist/src/__tests__/emit/compile-coverage.test.js +617 -0
  80. package/dist/src/__tests__/emit/compile-extra-branches.test.d.ts +12 -0
  81. package/dist/src/__tests__/emit/compile-extra-branches.test.js +225 -0
  82. package/dist/src/__tests__/emit/compile-mocked-branches.test.d.ts +0 -0
  83. package/dist/src/__tests__/emit/compile-mocked-branches.test.js +238 -0
  84. package/dist/src/__tests__/emit/execute-chain.test.d.ts +10 -0
  85. package/dist/src/__tests__/emit/execute-chain.test.js +94 -0
  86. package/dist/src/__tests__/emit/index.test.js +2 -1
  87. package/dist/src/__tests__/emit/modules-branches.test.d.ts +1 -0
  88. package/dist/src/__tests__/emit/modules-branches.test.js +88 -0
  89. package/dist/src/__tests__/emit/modules-coverage.test.d.ts +15 -0
  90. package/dist/src/__tests__/emit/modules-coverage.test.js +221 -0
  91. package/dist/src/__tests__/emit/modules-errors.test.d.ts +12 -0
  92. package/dist/src/__tests__/emit/modules-errors.test.js +169 -0
  93. package/dist/src/__tests__/emit/modules-rewrite.test.d.ts +17 -0
  94. package/dist/src/__tests__/emit/modules-rewrite.test.js +204 -0
  95. package/dist/src/__tests__/emit/source-map.test.d.ts +1 -0
  96. package/dist/src/__tests__/emit/source-map.test.js +167 -0
  97. package/dist/src/__tests__/enum.test.js +9 -4
  98. package/dist/src/__tests__/error-recovery.test.d.ts +7 -0
  99. package/dist/src/__tests__/error-recovery.test.js +217 -0
  100. package/dist/src/__tests__/events-types-extra.test.d.ts +10 -0
  101. package/dist/src/__tests__/events-types-extra.test.js +91 -0
  102. package/dist/src/__tests__/events-types.test.d.ts +4 -0
  103. package/dist/src/__tests__/events-types.test.js +56 -0
  104. package/dist/src/__tests__/formatter.test.js +13 -5
  105. package/dist/src/__tests__/hir/lower-extra.test.d.ts +9 -0
  106. package/dist/src/__tests__/hir/lower-extra.test.js +140 -0
  107. package/dist/src/__tests__/hir/monomorphize-extra.test.d.ts +15 -0
  108. package/dist/src/__tests__/hir/monomorphize-extra.test.js +200 -0
  109. package/dist/src/__tests__/hir/monomorphize-extra2.test.d.ts +16 -0
  110. package/dist/src/__tests__/hir/monomorphize-extra2.test.js +316 -0
  111. package/dist/src/__tests__/incremental.test.js +10 -2
  112. package/dist/src/__tests__/index-extra.test.d.ts +10 -0
  113. package/dist/src/__tests__/index-extra.test.js +71 -0
  114. package/dist/src/__tests__/lexer.test.js +2 -2
  115. package/dist/src/__tests__/lint/rules.test.d.ts +5 -0
  116. package/dist/src/__tests__/lint/rules.test.js +208 -0
  117. package/dist/src/__tests__/lir/lower.test.js +29 -0
  118. package/dist/src/__tests__/lir/verify.test.js +30 -0
  119. package/dist/src/__tests__/lsp/completion.test.d.ts +7 -0
  120. package/dist/src/__tests__/lsp/completion.test.js +583 -0
  121. package/dist/src/__tests__/lsp/definition.test.d.ts +7 -0
  122. package/dist/src/__tests__/lsp/definition.test.js +454 -0
  123. package/dist/src/__tests__/lsp/diagnostics.test.d.ts +10 -0
  124. package/dist/src/__tests__/lsp/diagnostics.test.js +98 -0
  125. package/dist/src/__tests__/lsp/hover-docs.test.d.ts +10 -0
  126. package/dist/src/__tests__/lsp/hover-docs.test.js +210 -0
  127. package/dist/src/__tests__/lsp.test.js +4 -1
  128. package/dist/src/__tests__/mc-integration/item-entity-events.test.js +4 -0
  129. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +4 -0
  130. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.d.ts +13 -0
  131. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1227 -0
  132. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.d.ts +13 -0
  133. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1509 -0
  134. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.d.ts +14 -0
  135. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1374 -0
  136. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.d.ts +10 -0
  137. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +759 -0
  138. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.d.ts +13 -0
  139. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +855 -0
  140. package/dist/src/__tests__/mc-integration/stdlib-coverage.test.js +4 -0
  141. package/dist/src/__tests__/mc-integration/syntax-coverage.test.js +4 -0
  142. package/dist/src/__tests__/mc-validator-coverage.test.d.ts +13 -0
  143. package/dist/src/__tests__/mc-validator-coverage.test.js +296 -0
  144. package/dist/src/__tests__/mc-validator-extra.test.d.ts +13 -0
  145. package/dist/src/__tests__/mc-validator-extra.test.js +245 -0
  146. package/dist/src/__tests__/mir/lower-extra.test.d.ts +20 -0
  147. package/dist/src/__tests__/mir/lower-extra.test.js +361 -0
  148. package/dist/src/__tests__/mir/lower-extra2.test.d.ts +17 -0
  149. package/dist/src/__tests__/mir/lower-extra2.test.js +317 -0
  150. package/dist/src/__tests__/mir/lower-extra3.test.d.ts +19 -0
  151. package/dist/src/__tests__/mir/lower-extra3.test.js +249 -0
  152. package/dist/src/__tests__/mir/lower-extra4.test.d.ts +23 -0
  153. package/dist/src/__tests__/mir/lower-extra4.test.js +606 -0
  154. package/dist/src/__tests__/mir/lower-extra5.test.d.ts +25 -0
  155. package/dist/src/__tests__/mir/lower-extra5.test.js +543 -0
  156. package/dist/src/__tests__/mir/lower-extra6.test.d.ts +16 -0
  157. package/dist/src/__tests__/mir/lower-extra6.test.js +471 -0
  158. package/dist/src/__tests__/mir/lower-extra7.test.d.ts +35 -0
  159. package/dist/src/__tests__/mir/lower-extra7.test.js +921 -0
  160. package/dist/src/__tests__/mir/lower-extra8.test.d.ts +19 -0
  161. package/dist/src/__tests__/mir/lower-extra8.test.js +626 -0
  162. package/dist/src/__tests__/mir/lower-extra9.test.d.ts +14 -0
  163. package/dist/src/__tests__/mir/lower-extra9.test.js +717 -0
  164. package/dist/src/__tests__/optimizer/auto-inline.test.d.ts +1 -0
  165. package/dist/src/__tests__/optimizer/auto-inline.test.js +176 -0
  166. package/dist/src/__tests__/optimizer/cse.test.d.ts +4 -0
  167. package/dist/src/__tests__/optimizer/cse.test.js +178 -0
  168. package/dist/src/__tests__/optimizer/inline_fn.test.d.ts +1 -0
  169. package/dist/src/__tests__/optimizer/inline_fn.test.js +221 -0
  170. package/dist/src/__tests__/optimizer/licm.test.d.ts +1 -0
  171. package/dist/src/__tests__/optimizer/licm.test.js +244 -0
  172. package/dist/src/__tests__/optimizer/optimizer-extended.test.d.ts +12 -0
  173. package/dist/src/__tests__/optimizer/optimizer-extended.test.js +993 -0
  174. package/dist/src/__tests__/optimizer/strength-reduction.test.d.ts +1 -0
  175. package/dist/src/__tests__/optimizer/strength-reduction.test.js +86 -0
  176. package/dist/src/__tests__/optimizer/tco.test.d.ts +14 -0
  177. package/dist/src/__tests__/optimizer/tco.test.js +203 -0
  178. package/dist/src/__tests__/parser-coverage.test.d.ts +25 -0
  179. package/dist/src/__tests__/parser-coverage.test.js +491 -0
  180. package/dist/src/__tests__/parser-extra.test.d.ts +6 -0
  181. package/dist/src/__tests__/parser-extra.test.js +451 -0
  182. package/dist/src/__tests__/parser.test.js +12 -0
  183. package/dist/src/__tests__/repl-extra.test.d.ts +13 -0
  184. package/dist/src/__tests__/repl-extra.test.js +174 -0
  185. package/dist/src/__tests__/repl-server-extra.test.d.ts +10 -0
  186. package/dist/src/__tests__/repl-server-extra.test.js +161 -0
  187. package/dist/src/__tests__/repl-server.test.d.ts +6 -0
  188. package/dist/src/__tests__/repl-server.test.js +146 -0
  189. package/dist/src/__tests__/runtime-extra.test.d.ts +15 -0
  190. package/dist/src/__tests__/runtime-extra.test.js +732 -0
  191. package/dist/src/__tests__/singleton-decorator.test.d.ts +11 -0
  192. package/dist/src/__tests__/singleton-decorator.test.js +260 -0
  193. package/dist/src/__tests__/sourcemap.test.js +1 -1
  194. package/dist/src/__tests__/stdlib/advanced.test.d.ts +5 -0
  195. package/dist/src/__tests__/stdlib/advanced.test.js +301 -0
  196. package/dist/src/__tests__/stdlib/bigint.test.d.ts +4 -0
  197. package/dist/src/__tests__/stdlib/bigint.test.js +83 -0
  198. package/dist/src/__tests__/stdlib/bits.test.d.ts +4 -0
  199. package/dist/src/__tests__/stdlib/bits.test.js +96 -0
  200. package/dist/src/__tests__/stdlib/bossbar.test.d.ts +4 -0
  201. package/dist/src/__tests__/stdlib/bossbar.test.js +72 -0
  202. package/dist/src/__tests__/stdlib/color.test.d.ts +4 -0
  203. package/dist/src/__tests__/stdlib/color.test.js +84 -0
  204. package/dist/src/__tests__/stdlib/combat.test.d.ts +4 -0
  205. package/dist/src/__tests__/stdlib/combat.test.js +64 -0
  206. package/dist/src/__tests__/stdlib/cooldown.test.d.ts +4 -0
  207. package/dist/src/__tests__/stdlib/cooldown.test.js +64 -0
  208. package/dist/src/__tests__/stdlib/dialog.test.js +15 -7
  209. package/dist/src/__tests__/stdlib/ecs.test.d.ts +4 -0
  210. package/dist/src/__tests__/stdlib/ecs.test.js +81 -0
  211. package/dist/src/__tests__/stdlib/effects.test.d.ts +4 -0
  212. package/dist/src/__tests__/stdlib/effects.test.js +72 -0
  213. package/dist/src/__tests__/stdlib/events.test.d.ts +4 -0
  214. package/dist/src/__tests__/stdlib/events.test.js +55 -0
  215. package/dist/src/__tests__/stdlib/expr.test.d.ts +4 -0
  216. package/dist/src/__tests__/stdlib/expr.test.js +77 -0
  217. package/dist/src/__tests__/stdlib/fft.test.d.ts +4 -0
  218. package/dist/src/__tests__/stdlib/fft.test.js +82 -0
  219. package/dist/src/__tests__/stdlib/graph.test.d.ts +4 -0
  220. package/dist/src/__tests__/stdlib/graph.test.js +102 -0
  221. package/dist/src/__tests__/stdlib/interactions.test.d.ts +4 -0
  222. package/dist/src/__tests__/stdlib/interactions.test.js +60 -0
  223. package/dist/src/__tests__/stdlib/inventory.test.d.ts +4 -0
  224. package/dist/src/__tests__/stdlib/inventory.test.js +68 -0
  225. package/dist/src/__tests__/stdlib/linalg.test.d.ts +5 -0
  226. package/dist/src/__tests__/stdlib/linalg.test.js +78 -0
  227. package/dist/src/__tests__/stdlib/map.test.d.ts +1 -0
  228. package/dist/src/__tests__/stdlib/map.test.js +84 -0
  229. package/dist/src/__tests__/stdlib/math.test.js +19 -6
  230. package/dist/src/__tests__/stdlib/math_hp.test.d.ts +4 -0
  231. package/dist/src/__tests__/stdlib/math_hp.test.js +80 -0
  232. package/dist/src/__tests__/stdlib/mobs.test.d.ts +4 -0
  233. package/dist/src/__tests__/stdlib/mobs.test.js +61 -0
  234. package/dist/src/__tests__/stdlib/noise.test.d.ts +4 -0
  235. package/dist/src/__tests__/stdlib/noise.test.js +73 -0
  236. package/dist/src/__tests__/stdlib/ode.test.d.ts +4 -0
  237. package/dist/src/__tests__/stdlib/ode.test.js +68 -0
  238. package/dist/src/__tests__/stdlib/parabola.test.d.ts +4 -0
  239. package/dist/src/__tests__/stdlib/parabola.test.js +77 -0
  240. package/dist/src/__tests__/stdlib/particles.test.d.ts +4 -0
  241. package/dist/src/__tests__/stdlib/particles.test.js +68 -0
  242. package/dist/src/__tests__/stdlib/physics.test.d.ts +4 -0
  243. package/dist/src/__tests__/stdlib/physics.test.js +76 -0
  244. package/dist/src/__tests__/stdlib/player.test.d.ts +4 -0
  245. package/dist/src/__tests__/stdlib/player.test.js +64 -0
  246. package/dist/src/__tests__/stdlib/quaternion.test.d.ts +4 -0
  247. package/dist/src/__tests__/stdlib/quaternion.test.js +73 -0
  248. package/dist/src/__tests__/stdlib/queue.test.d.ts +1 -0
  249. package/dist/src/__tests__/stdlib/queue.test.js +97 -0
  250. package/dist/src/__tests__/stdlib/random.test.d.ts +4 -0
  251. package/dist/src/__tests__/stdlib/random.test.js +76 -0
  252. package/dist/src/__tests__/stdlib/result.test.d.ts +12 -0
  253. package/dist/src/__tests__/stdlib/result.test.js +329 -0
  254. package/dist/src/__tests__/stdlib/scheduler.test.js +19 -8
  255. package/dist/src/__tests__/stdlib/set_int.test.d.ts +1 -0
  256. package/dist/src/__tests__/stdlib/set_int.test.js +88 -0
  257. package/dist/src/__tests__/stdlib/sets.test.d.ts +6 -0
  258. package/dist/src/__tests__/stdlib/sets.test.js +60 -0
  259. package/dist/src/__tests__/stdlib/signal.test.d.ts +4 -0
  260. package/dist/src/__tests__/stdlib/signal.test.js +84 -0
  261. package/dist/src/__tests__/stdlib/spawn.test.d.ts +4 -0
  262. package/dist/src/__tests__/stdlib/spawn.test.js +68 -0
  263. package/dist/src/__tests__/stdlib/string.test.d.ts +12 -0
  264. package/dist/src/__tests__/stdlib/string.test.js +231 -0
  265. package/dist/src/__tests__/stdlib/strings.test.d.ts +4 -0
  266. package/dist/src/__tests__/stdlib/strings.test.js +83 -0
  267. package/dist/src/__tests__/stdlib/tags.test.d.ts +4 -0
  268. package/dist/src/__tests__/stdlib/tags.test.js +57 -0
  269. package/dist/src/__tests__/stdlib/teams.test.d.ts +4 -0
  270. package/dist/src/__tests__/stdlib/teams.test.js +72 -0
  271. package/dist/src/__tests__/stdlib/timer.test.d.ts +4 -0
  272. package/dist/src/__tests__/stdlib/timer.test.js +79 -0
  273. package/dist/src/__tests__/stdlib/vec.test.d.ts +5 -0
  274. package/dist/src/__tests__/stdlib/vec.test.js +94 -0
  275. package/dist/src/__tests__/stdlib/world.test.d.ts +4 -0
  276. package/dist/src/__tests__/stdlib/world.test.js +72 -0
  277. package/dist/src/__tests__/struct-display.test.d.ts +1 -0
  278. package/dist/src/__tests__/struct-display.test.js +64 -0
  279. package/dist/src/__tests__/test-framework/runner.test.d.ts +10 -0
  280. package/dist/src/__tests__/test-framework/runner.test.js +193 -0
  281. package/dist/src/__tests__/tuner/adapters.test.d.ts +14 -0
  282. package/dist/src/__tests__/tuner/adapters.test.js +194 -0
  283. package/dist/src/__tests__/tuner/simulator-extra.test.d.ts +4 -0
  284. package/dist/src/__tests__/tuner/simulator-extra.test.js +193 -0
  285. package/dist/src/__tests__/typechecker-coverage.test.d.ts +30 -0
  286. package/dist/src/__tests__/typechecker-coverage.test.js +627 -0
  287. package/dist/src/__tests__/typechecker.test.js +3 -3
  288. package/dist/src/__tests__/watch-decorator.test.d.ts +1 -0
  289. package/dist/src/__tests__/watch-decorator.test.js +54 -0
  290. package/dist/src/ast/types.d.ts +102 -3
  291. package/dist/src/cache/incremental.d.ts +13 -14
  292. package/dist/src/cache/incremental.js +106 -89
  293. package/dist/src/cache/index.d.ts +8 -2
  294. package/dist/src/cache/index.js +18 -6
  295. package/dist/src/cli.d.ts +1 -0
  296. package/dist/src/cli.js +466 -17
  297. package/dist/src/config/project-config.d.ts +29 -0
  298. package/dist/src/config/project-config.js +180 -0
  299. package/dist/src/diagnostics/index.d.ts +9 -0
  300. package/dist/src/diagnostics/index.js +18 -1
  301. package/dist/src/emit/compile.d.ts +10 -0
  302. package/dist/src/emit/compile.js +395 -50
  303. package/dist/src/emit/index.d.ts +40 -0
  304. package/dist/src/emit/index.js +307 -14
  305. package/dist/src/emit/modules.js +21 -3
  306. package/dist/src/emit/sourcemap.d.ts +23 -27
  307. package/dist/src/emit/sourcemap.js +52 -30
  308. package/dist/src/formatter/index.js +33 -8
  309. package/dist/src/hir/deprecated.d.ts +13 -0
  310. package/dist/src/hir/deprecated.js +218 -0
  311. package/dist/src/hir/lower.js +114 -8
  312. package/dist/src/hir/monomorphize.js +22 -2
  313. package/dist/src/hir/types.d.ts +65 -1
  314. package/dist/src/index.d.ts +6 -0
  315. package/dist/src/index.js +18 -3
  316. package/dist/src/lexer/index.d.ts +2 -1
  317. package/dist/src/lexer/index.js +39 -3
  318. package/dist/src/lint/index.d.ts +45 -0
  319. package/dist/src/lint/index.js +930 -0
  320. package/dist/src/lir/lower.js +29 -2
  321. package/dist/src/lir/types.d.ts +2 -0
  322. package/dist/src/lsp/server.js +92 -5
  323. package/dist/src/mir/lower.js +775 -34
  324. package/dist/src/mir/macro.js +36 -2
  325. package/dist/src/mir/types.d.ts +12 -0
  326. package/dist/src/mir/verify.js +9 -0
  327. package/dist/src/optimizer/auto-inline.d.ts +2 -0
  328. package/dist/src/optimizer/auto-inline.js +67 -0
  329. package/dist/src/optimizer/cse.d.ts +20 -0
  330. package/dist/src/optimizer/cse.js +234 -0
  331. package/dist/src/optimizer/inline.d.ts +26 -0
  332. package/dist/src/optimizer/inline.js +286 -0
  333. package/dist/src/optimizer/interprocedural.js +4 -0
  334. package/dist/src/optimizer/licm.d.ts +32 -0
  335. package/dist/src/optimizer/licm.js +371 -0
  336. package/dist/src/optimizer/pipeline.js +12 -2
  337. package/dist/src/optimizer/strength_reduction.d.ts +15 -0
  338. package/dist/src/optimizer/strength_reduction.js +90 -0
  339. package/dist/src/optimizer/tco.d.ts +53 -0
  340. package/dist/src/optimizer/tco.js +238 -0
  341. package/dist/src/parser/index.d.ts +32 -0
  342. package/dist/src/parser/index.js +421 -59
  343. package/dist/src/repl-server.d.ts +13 -0
  344. package/dist/src/repl-server.js +127 -0
  345. package/dist/src/structs/expand.d.ts +15 -0
  346. package/dist/src/structs/expand.js +46 -0
  347. package/dist/src/testing/runner.d.ts +40 -0
  348. package/dist/src/testing/runner.js +237 -0
  349. package/dist/src/typechecker/index.d.ts +3 -0
  350. package/dist/src/typechecker/index.js +254 -9
  351. package/dist/tsconfig.tsbuildinfo +1 -1
  352. package/doc-drafts/redscript-docs/docs/en/stdlib/graph.md +104 -0
  353. package/doc-drafts/redscript-docs/docs/en/stdlib/parabola.md +113 -0
  354. package/doc-drafts/redscript-docs/docs/en/stdlib/pathfind.md +104 -0
  355. package/doc-drafts/redscript-docs/docs/en/stdlib/physics.md +134 -0
  356. package/doc-drafts/redscript-docs/docs/en/stdlib/quaternion.md +135 -0
  357. package/doc-drafts/redscript-docs/docs/zh/stdlib/graph.md +104 -0
  358. package/doc-drafts/redscript-docs/docs/zh/stdlib/parabola.md +113 -0
  359. package/doc-drafts/redscript-docs/docs/zh/stdlib/pathfind.md +104 -0
  360. package/doc-drafts/redscript-docs/docs/zh/stdlib/physics.md +134 -0
  361. package/doc-drafts/redscript-docs/docs/zh/stdlib/quaternion.md +135 -0
  362. package/docs/stdlib/result.md +156 -0
  363. package/docs/stdlib/result.zh.md +156 -0
  364. package/editors/vscode/fixtures/test.mcrs +7 -0
  365. package/editors/vscode/out/extension.js +2095 -225
  366. package/editors/vscode/out/lsp-server.js +519 -51
  367. package/editors/vscode/package-lock.json +9 -4
  368. package/editors/vscode/package.json +1 -1
  369. package/examples/display-demo.mcrs +64 -0
  370. package/examples/game/racing.mcrs +301 -0
  371. package/examples/game/tower_defense.mcrs +311 -0
  372. package/examples/math/physics_sim.mcrs +322 -0
  373. package/examples/rpg/boss_fight.mcrs +313 -0
  374. package/examples/rpg/health_system.mcrs +237 -0
  375. package/examples/rpg/inventory.mcrs +265 -0
  376. package/examples/util/debug_hud.mcrs +279 -0
  377. package/jest.config.js +10 -0
  378. package/package.json +12 -3
  379. package/playground/index.html +823 -0
  380. package/scripts/gen-docs.ts +533 -0
  381. package/scripts/update-redscript-docs-stdlib.sh +770 -0
  382. package/src/__tests__/budget.test.ts +5 -0
  383. package/src/__tests__/cache/cache-behavior.test.ts +480 -0
  384. package/src/__tests__/cache-extra.test.ts +199 -0
  385. package/src/__tests__/cli-docs.test.ts +77 -0
  386. package/src/__tests__/cli-init.test.ts +91 -0
  387. package/src/__tests__/cli-publish.test.ts +190 -0
  388. package/src/__tests__/cli.test.ts +117 -1
  389. package/src/__tests__/compile-preprocess.test.ts +366 -0
  390. package/src/__tests__/compiler/break-stmt.test.ts +66 -0
  391. package/src/__tests__/compiler/const-decl.test.ts +141 -0
  392. package/src/__tests__/compiler/continue-stmt.test.ts +81 -0
  393. package/src/__tests__/compiler/coroutine-extended.test.ts +723 -0
  394. package/src/__tests__/compiler/deprecated.test.ts +305 -0
  395. package/src/__tests__/compiler/do-while.test.ts +130 -0
  396. package/src/__tests__/compiler/enum-payload.test.ts +299 -0
  397. package/src/__tests__/compiler/interface.test.ts +287 -0
  398. package/src/__tests__/compiler/labeled-loops.test.ts +279 -0
  399. package/src/__tests__/compiler/match-string.test.ts +45 -0
  400. package/src/__tests__/compiler/memoize.test.ts +126 -0
  401. package/src/__tests__/compiler/method-chain.test.ts +121 -0
  402. package/src/__tests__/compiler/module-import.test.ts +240 -0
  403. package/src/__tests__/compiler/option-extensions.test.ts +207 -0
  404. package/src/__tests__/compiler/profile-decorator.test.ts +79 -0
  405. package/src/__tests__/compiler/string-advanced.test.ts +310 -0
  406. package/src/__tests__/compiler/struct-extends.test.ts +109 -0
  407. package/src/__tests__/compiler/throttle-retry.test.ts +191 -0
  408. package/src/__tests__/compiler/tuple-type.test.ts +263 -0
  409. package/src/__tests__/compiler/watch-decorator.test.ts +72 -0
  410. package/src/__tests__/config/project-config.test.ts +181 -0
  411. package/src/__tests__/config-decorator.test.ts +157 -0
  412. package/src/__tests__/diagnostics-extra.test.ts +155 -0
  413. package/src/__tests__/emit/compile-branches.test.ts +135 -0
  414. package/src/__tests__/emit/compile-coverage.test.ts +696 -0
  415. package/src/__tests__/emit/compile-extra-branches.test.ts +228 -0
  416. package/src/__tests__/emit/compile-mocked-branches.test.ts +249 -0
  417. package/src/__tests__/emit/compile.test.ts +6 -1
  418. package/src/__tests__/emit/execute-chain.test.ts +114 -0
  419. package/src/__tests__/emit/index.test.ts +2 -1
  420. package/src/__tests__/emit/modules-branches.test.ts +90 -0
  421. package/src/__tests__/emit/modules-coverage.test.ts +241 -0
  422. package/src/__tests__/emit/modules-errors.test.ts +192 -0
  423. package/src/__tests__/emit/modules-rewrite.test.ts +232 -0
  424. package/src/__tests__/emit/source-map.test.ts +152 -0
  425. package/src/__tests__/enum.test.ts +9 -4
  426. package/src/__tests__/error-recovery.test.ts +226 -0
  427. package/src/__tests__/events-types-extra.test.ts +110 -0
  428. package/src/__tests__/events-types.test.ts +66 -0
  429. package/src/__tests__/formatter.test.ts +15 -5
  430. package/src/__tests__/generics.test.ts +16 -9
  431. package/src/__tests__/hir/lower-extra.test.ts +151 -0
  432. package/src/__tests__/hir/monomorphize-coverage.test.ts +432 -0
  433. package/src/__tests__/hir/monomorphize-extra.test.ts +220 -0
  434. package/src/__tests__/hir/monomorphize-extra2.test.ts +350 -0
  435. package/src/__tests__/impl.test.ts +12 -8
  436. package/src/__tests__/incremental.test.ts +10 -2
  437. package/src/__tests__/index-extra.test.ts +79 -0
  438. package/src/__tests__/lexer.test.ts +2 -2
  439. package/src/__tests__/lint/hir-coverage.test.ts +1716 -0
  440. package/src/__tests__/lint/rules-coverage.test.ts +598 -0
  441. package/src/__tests__/lint/rules.test.ts +230 -0
  442. package/src/__tests__/lir/lower.test.ts +33 -0
  443. package/src/__tests__/lir/verify.test.ts +33 -0
  444. package/src/__tests__/lsp/completion.test.ts +687 -0
  445. package/src/__tests__/lsp/definition.test.ts +499 -0
  446. package/src/__tests__/lsp/diagnostics.test.ts +108 -0
  447. package/src/__tests__/lsp/hover-docs.test.ts +222 -0
  448. package/src/__tests__/lsp.test.ts +4 -1
  449. package/src/__tests__/mc-integration/item-entity-events.test.ts +5 -0
  450. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +5 -0
  451. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1105 -0
  452. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1366 -0
  453. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1245 -0
  454. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +755 -0
  455. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +771 -0
  456. package/src/__tests__/mc-integration/stdlib-coverage.test.ts +5 -0
  457. package/src/__tests__/mc-integration/syntax-coverage.test.ts +5 -0
  458. package/src/__tests__/mc-validator-coverage.test.ts +325 -0
  459. package/src/__tests__/mc-validator-extra.test.ts +252 -0
  460. package/src/__tests__/mir/lower-extra.test.ts +402 -0
  461. package/src/__tests__/mir/lower-extra2.test.ts +348 -0
  462. package/src/__tests__/mir/lower-extra3.test.ts +277 -0
  463. package/src/__tests__/mir/lower-extra4.test.ts +636 -0
  464. package/src/__tests__/mir/lower-extra5.test.ts +612 -0
  465. package/src/__tests__/mir/lower-extra6.test.ts +520 -0
  466. package/src/__tests__/mir/lower-extra7.test.ts +1045 -0
  467. package/src/__tests__/mir/lower-extra8.test.ts +704 -0
  468. package/src/__tests__/mir/lower-extra9.test.ts +821 -0
  469. package/src/__tests__/optimizer/auto-inline.test.ts +206 -0
  470. package/src/__tests__/optimizer/cse.test.ts +195 -0
  471. package/src/__tests__/optimizer/inline_fn.test.ts +263 -0
  472. package/src/__tests__/optimizer/licm.test.ts +358 -0
  473. package/src/__tests__/optimizer/nbt-coalesce.test.ts +147 -0
  474. package/src/__tests__/optimizer/optimizer-extended.test.ts +1081 -0
  475. package/src/__tests__/optimizer/scoreboard-batch.test.ts +141 -0
  476. package/src/__tests__/optimizer/strength-reduction.test.ts +111 -0
  477. package/src/__tests__/optimizer/tco-coverage.test.ts +309 -0
  478. package/src/__tests__/optimizer/tco.test.ts +238 -0
  479. package/src/__tests__/option.test.ts +14 -7
  480. package/src/__tests__/parser-coverage.test.ts +576 -0
  481. package/src/__tests__/parser-extra.test.ts +531 -0
  482. package/src/__tests__/parser.test.ts +14 -0
  483. package/src/__tests__/repl-extra.test.ts +195 -0
  484. package/src/__tests__/repl-server-extra.test.ts +150 -0
  485. package/src/__tests__/repl-server.test.ts +122 -0
  486. package/src/__tests__/runtime-extra.test.ts +862 -0
  487. package/src/__tests__/singleton-decorator.test.ts +285 -0
  488. package/src/__tests__/sourcemap.test.ts +1 -1
  489. package/src/__tests__/stdlib/advanced.test.ts +312 -0
  490. package/src/__tests__/stdlib/bigint.test.ts +57 -0
  491. package/src/__tests__/stdlib/bits.test.ts +75 -0
  492. package/src/__tests__/stdlib/bossbar.test.ts +45 -0
  493. package/src/__tests__/stdlib/color.test.ts +60 -0
  494. package/src/__tests__/stdlib/combat.test.ts +35 -0
  495. package/src/__tests__/stdlib/cooldown.test.ts +35 -0
  496. package/src/__tests__/stdlib/dialog.test.ts +14 -6
  497. package/src/__tests__/stdlib/ecs.test.ts +54 -0
  498. package/src/__tests__/stdlib/effects.test.ts +45 -0
  499. package/src/__tests__/stdlib/events.test.ts +23 -0
  500. package/src/__tests__/stdlib/expr.test.ts +48 -0
  501. package/src/__tests__/stdlib/fft.test.ts +54 -0
  502. package/src/__tests__/stdlib/graph.test.ts +77 -0
  503. package/src/__tests__/stdlib/interactions.test.ts +30 -0
  504. package/src/__tests__/stdlib/inventory.test.ts +40 -0
  505. package/src/__tests__/stdlib/linalg.test.ts +52 -0
  506. package/src/__tests__/stdlib/map.test.ts +55 -0
  507. package/src/__tests__/stdlib/math.test.ts +19 -5
  508. package/src/__tests__/stdlib/math_hp.test.ts +55 -0
  509. package/src/__tests__/stdlib/mobs.test.ts +40 -0
  510. package/src/__tests__/stdlib/noise.test.ts +46 -0
  511. package/src/__tests__/stdlib/ode.test.ts +40 -0
  512. package/src/__tests__/stdlib/parabola.test.ts +51 -0
  513. package/src/__tests__/stdlib/particles.test.ts +40 -0
  514. package/src/__tests__/stdlib/physics.test.ts +50 -0
  515. package/src/__tests__/stdlib/player.test.ts +35 -0
  516. package/src/__tests__/stdlib/quaternion.test.ts +46 -0
  517. package/src/__tests__/stdlib/queue.test.ts +73 -0
  518. package/src/__tests__/stdlib/random.test.ts +50 -0
  519. package/src/__tests__/stdlib/result.test.ts +326 -0
  520. package/src/__tests__/stdlib/scheduler.test.ts +18 -7
  521. package/src/__tests__/stdlib/set_int.test.ts +62 -0
  522. package/src/__tests__/stdlib/sets.test.ts +28 -0
  523. package/src/__tests__/stdlib/signal.test.ts +60 -0
  524. package/src/__tests__/stdlib/spawn.test.ts +40 -0
  525. package/src/__tests__/stdlib/string.test.ts +224 -0
  526. package/src/__tests__/stdlib/strings.test.ts +55 -0
  527. package/src/__tests__/stdlib/tags.test.ts +32 -0
  528. package/src/__tests__/stdlib/teams.test.ts +45 -0
  529. package/src/__tests__/stdlib/timer.test.ts +53 -0
  530. package/src/__tests__/stdlib/vec.test.ts +72 -0
  531. package/src/__tests__/stdlib/world.test.ts +45 -0
  532. package/src/__tests__/struct-display.test.ts +69 -0
  533. package/src/__tests__/test-framework/runner.test.ts +208 -0
  534. package/src/__tests__/tuner/adapters.test.ts +232 -0
  535. package/src/__tests__/tuner/simulator-extra.test.ts +222 -0
  536. package/src/__tests__/tuple.test.ts +11 -4
  537. package/src/__tests__/typechecker-coverage.test.ts +671 -0
  538. package/src/__tests__/typechecker.test.ts +4 -3
  539. package/src/__tests__/watch-decorator.test.ts +59 -0
  540. package/src/ast/types.ts +65 -3
  541. package/src/cache/incremental.ts +128 -99
  542. package/src/cache/index.ts +35 -8
  543. package/src/cli.ts +538 -29
  544. package/src/config/project-config.ts +176 -0
  545. package/src/diagnostics/index.ts +22 -0
  546. package/src/docs.ts +98 -0
  547. package/src/emit/compile.ts +408 -51
  548. package/src/emit/index.ts +366 -18
  549. package/src/emit/modules.ts +19 -3
  550. package/src/emit/sourcemap.ts +64 -43
  551. package/src/formatter/index.ts +35 -8
  552. package/src/hir/deprecated.ts +212 -0
  553. package/src/hir/lower.ts +128 -8
  554. package/src/hir/monomorphize.ts +24 -2
  555. package/src/hir/types.ts +26 -1
  556. package/src/index.ts +23 -3
  557. package/src/lexer/index.ts +45 -6
  558. package/src/lint/index.ts +922 -0
  559. package/src/lir/lower.ts +30 -2
  560. package/src/lir/types.ts +4 -0
  561. package/src/lsp/server.ts +100 -1
  562. package/src/mir/lower.ts +785 -40
  563. package/src/mir/macro.ts +30 -2
  564. package/src/mir/types.ts +13 -0
  565. package/src/mir/verify.ts +10 -2
  566. package/src/optimizer/auto-inline.ts +86 -0
  567. package/src/optimizer/copy_prop.ts +2 -2
  568. package/src/optimizer/coroutine.ts +3 -3
  569. package/src/optimizer/cse.ts +205 -0
  570. package/src/optimizer/dce.ts +2 -2
  571. package/src/optimizer/inline.ts +335 -0
  572. package/src/optimizer/interprocedural.ts +5 -1
  573. package/src/optimizer/licm.ts +454 -0
  574. package/src/optimizer/nbt-coalesce.ts +109 -0
  575. package/src/optimizer/pipeline.ts +16 -2
  576. package/src/optimizer/scoreboard-batch.ts +52 -0
  577. package/src/optimizer/strength_reduction.ts +95 -0
  578. package/src/optimizer/tco.ts +267 -0
  579. package/src/optimizer/unroll.ts +2 -2
  580. package/src/parser/index.ts +426 -53
  581. package/src/repl-server.ts +102 -0
  582. package/src/stdlib/advanced.mcrs +271 -101
  583. package/src/stdlib/bigint.mcrs +97 -11
  584. package/src/stdlib/bits.mcrs +75 -12
  585. package/src/stdlib/bossbar.mcrs +37 -8
  586. package/src/stdlib/calculus.mcrs +82 -26
  587. package/src/stdlib/color.mcrs +98 -16
  588. package/src/stdlib/combat.mcrs +23 -5
  589. package/src/stdlib/cooldown.mcrs +19 -0
  590. package/src/stdlib/dialog.mcrs +45 -7
  591. package/src/stdlib/easing.mcrs +132 -12
  592. package/src/stdlib/ecs.mcrs +142 -25
  593. package/src/stdlib/effects.mcrs +88 -12
  594. package/src/stdlib/events.mcrs +21 -2
  595. package/src/stdlib/expr.mcrs +18 -3
  596. package/src/stdlib/fft.mcrs +66 -56
  597. package/src/stdlib/geometry.mcrs +137 -39
  598. package/src/stdlib/graph.mcrs +73 -0
  599. package/src/stdlib/heap.mcrs +49 -8
  600. package/src/stdlib/i18n/zh.yaml +2891 -0
  601. package/src/stdlib/interactions.mcrs +43 -20
  602. package/src/stdlib/inventory.mcrs +14 -3
  603. package/src/stdlib/linalg.mcrs +185 -30
  604. package/src/stdlib/list.mcrs +168 -18
  605. package/src/stdlib/map.mcrs +112 -0
  606. package/src/stdlib/math.mcrs +68 -18
  607. package/src/stdlib/math_hp.mcrs +124 -33
  608. package/src/stdlib/matrix.mcrs +133 -20
  609. package/src/stdlib/mobs.mcrs +87 -0
  610. package/src/stdlib/noise.mcrs +65 -21
  611. package/src/stdlib/ode.mcrs +96 -0
  612. package/src/stdlib/parabola.mcrs +104 -29
  613. package/src/stdlib/particles.mcrs +78 -21
  614. package/src/stdlib/pathfind.mcrs +89 -35
  615. package/src/stdlib/physics.mcrs +134 -26
  616. package/src/stdlib/player.mcrs +18 -0
  617. package/src/stdlib/quaternion.mcrs +213 -9
  618. package/src/stdlib/queue.mcrs +123 -0
  619. package/src/stdlib/random.mcrs +63 -18
  620. package/src/stdlib/result.mcrs +111 -0
  621. package/src/stdlib/scheduler.mcrs +59 -10
  622. package/src/stdlib/set_int.mcrs +240 -0
  623. package/src/stdlib/sets.mcrs +49 -19
  624. package/src/stdlib/signal.mcrs +151 -79
  625. package/src/stdlib/sort.mcrs +44 -24
  626. package/src/stdlib/spawn.mcrs +30 -7
  627. package/src/stdlib/state.mcrs +40 -5
  628. package/src/stdlib/strings.mcrs +131 -3
  629. package/src/stdlib/tags.mcrs +2 -2
  630. package/src/stdlib/teams.mcrs +22 -10
  631. package/src/stdlib/timer.mcrs +36 -6
  632. package/src/stdlib/vec.mcrs +44 -9
  633. package/src/stdlib/world.mcrs +57 -25
  634. package/src/structs/expand.ts +64 -0
  635. package/src/testing/runner.ts +271 -0
  636. package/src/typechecker/index.ts +273 -9
@@ -24,18 +24,24 @@ module library;
24
24
  // Do NOT kill or modify entities with this tag.
25
25
  let _TRIG_TAG: string = "rs_trig";
26
26
 
27
- // init_trig(): create the Marker entity used by sin_hp/cos_hp.
28
- // Safe to call multiple times (uses execute unless entity).
29
- // Must be called from your @load function.
27
+ /// Initialise the Marker entity used by `sin_hp` and `cos_hp`.
28
+ /// Safe to call multiple times (guarded by `execute unless entity`).
29
+ /// Must be called from your `@load` function.
30
+ /// @since 1.3.0
31
+ /// @example
32
+ /// @load fn setup() { init_trig(); }
30
33
  @require_on_load(init_trig)
31
34
  fn init_trig() {
32
35
  raw("execute unless entity @e[tag=rs_trig,limit=1] run summon minecraft:marker ~ 0 ~ {Tags:[\"rs_trig\"]}");
33
36
  }
34
37
 
35
- // sin_hp(angle): high-precision sine.
36
- // angle: degrees × 10000 (e.g. 450000 = 45°, 900000 = 90°)
37
- // returns: sin(angle/10000°) × 10000
38
- // Example: sin_hp(900000) == 10000, sin_hp(0) == 0, sin_hp(450000) ≈ 7071
38
+ /// High-precision sine using the MC Marker entity rotation trick (~15 sig. figs).
39
+ /// @since 1.3.0
40
+ /// @param angle Angle in degrees × 10000 (e.g. 450000 = 45°, 900000 = 90°)
41
+ /// @returns sin(angle / 10000 °) × 10000
42
+ /// @example
43
+ /// let s: int = sin_hp(900000); // 10000 (sin 90° = 1.0)
44
+ /// let s2: int = sin_hp(450000); // ≈ 7071 (sin 45° ≈ 0.7071)
39
45
  @require_on_load(init_trig)
40
46
  fn sin_hp(angle: int): int {
41
47
  // Step 1: store angle into scoreboard, then use execute store to set Rotation[0]
@@ -50,9 +56,13 @@ fn sin_hp(angle: int): int {
50
56
  return scoreboard_get("$sin_hp_out", "__rs_math_hp");
51
57
  }
52
58
 
53
- // cos_hp(angle): high-precision cosine.
54
- // angle: degrees × 10000 (e.g. 450000 = 45°)
55
- // returns: cos(angle/10000°) × 10000
59
+ /// High-precision cosine using the MC Marker entity rotation trick (~15 sig. figs).
60
+ /// @since 1.3.0
61
+ /// @param angle Angle in degrees × 10000 (e.g. 450000 = 45°)
62
+ /// @returns cos(angle / 10000 °) × 10000
63
+ /// @example
64
+ /// let c: int = cos_hp(0); // 10000 (cos 0° = 1.0)
65
+ /// let c2: int = cos_hp(450000); // ≈ 7071 (cos 45° ≈ 0.7071)
56
66
  @require_on_load(init_trig)
57
67
  fn cos_hp(angle: int): int {
58
68
  scoreboard_set("$cos_hp_in", "__rs_math_hp", angle);
@@ -80,16 +90,23 @@ fn cos_hp(angle: int): int {
80
90
  // Uses a SEPARATE entity tagged "rs_div" for SVD operations.
81
91
  // init_trig() does NOT create rs_div — call init_div() separately.
82
92
 
83
- // init_div(): create the Display Entity for SVD operations.
84
- // Call once from your @load function.
93
+ /// Initialise the `block_display` entity used for SVD-based division operations.
94
+ /// Must be called from your `@load` function (separate from `init_trig`).
95
+ /// @since 1.3.0
96
+ /// @example
97
+ /// @load fn setup() { init_trig(); init_div(); }
85
98
  @require_on_load(init_div)
86
99
  fn init_div() {
87
100
  raw("execute unless entity @e[tag=rs_div,limit=1] run summon minecraft:block_display ~ 0 ~ {Tags:[\"rs_div\"]}");
88
101
  }
89
102
 
90
- // div_hp(a, b): high-precision division a/b, returns (a/b) × 10000
91
- // a, b: integers (×10000 scale). Result: (a/b) × 10000
92
- // Example: div_hp(10000, 3000) 33333 (10000/3000 = 3.3333...)
103
+ /// High-precision division a / b using the Display Entity SVD trick (~15 sig. figs).
104
+ /// @since 1.3.0
105
+ /// @param a Dividend × 10000
106
+ /// @param b Divisor × 10000 (must not be zero)
107
+ /// @returns (a / b) × 10000
108
+ /// @example
109
+ /// let r: int = div_hp(10000, 3000); // ≈ 33333 (10000/3000 = 3.333…)
93
110
  @require_on_load(init_div)
94
111
  fn div_hp(a: int, b: int): int {
95
112
  // Set transformation matrix: [a,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,b]
@@ -106,9 +123,14 @@ fn div_hp(a: int, b: int): int {
106
123
  return scoreboard_get("$div_result", "__rs_math_hp");
107
124
  }
108
125
 
109
- // div3_hp(a, b, c, d): divide three values by d simultaneously
110
- // Returns a/d, result in scoreboard $div3_x/y/z __rs_math_hp (×10000)
111
- // Use scoreboard_get to read each result.
126
+ /// Divide three values by the same divisor simultaneously using the Display Entity SVD trick.
127
+ /// Results are stored in scoreboards `$div3_x`, `$div3_y`, `$div3_z` on `__rs_math_hp`.
128
+ /// @since 1.3.0
129
+ /// @param a First numerator × 10000
130
+ /// @param b Second numerator × 10000
131
+ /// @param c Third numerator × 10000
132
+ /// @param d Common denominator × 10000 (must not be zero)
133
+ /// @returns a / d × 10000 (also writes b/d and c/d to `$div3_y`/`$div3_z`)
112
134
  @require_on_load(init_div)
113
135
  fn div3_hp(a: int, b: int, c: int, d: int): int {
114
136
  scoreboard_set("$div3_a", "__rs_math_hp", a);
@@ -133,9 +155,12 @@ fn div3_hp(a: int, b: int, c: int, d: int): int {
133
155
  return scoreboard_get("$div3_x", "__rs_math_hp");
134
156
  }
135
157
 
136
- // sqrt_hp(x): high-precision square root via vector magnitude trick
137
- // x: integer ×10000. Returns √(x/10000) × 10000
138
- // Uses: send vector (√x, 0, 0) unit magnitude = √x
158
+ /// High-precision square root via Newton iteration refined with `div_hp`.
159
+ /// @since 1.3.0
160
+ /// @param x Input value × 10000 (must be 0)
161
+ /// @returns √(x / 10000) × 10000
162
+ /// @example
163
+ /// let r: int = sqrt_hp(20000); // ≈ 14142 (√2 ≈ 1.4142)
139
164
  @require_on_load(init_div)
140
165
  fn sqrt_hp(x: int): int {
141
166
  // Use trig entity: tp it to (sqrt(x), 0, 0) direction
@@ -157,9 +182,12 @@ fn sqrt_hp(x: int): int {
157
182
  return g;
158
183
  }
159
184
 
160
- // norm3_hp(x, y, z): high-precision 3D vector norm √(x²+y²+z²)
161
- // All inputs ×10000. Returns magnitude ×10000.
162
- // Uses trig entity position trick.
185
+ /// High-precision 3-D vector magnitude √(x² + y² + z²) using `sqrt_hp`.
186
+ /// @since 1.3.0
187
+ /// @param x X component × 10000
188
+ /// @param y Y component × 10000
189
+ /// @param z Z component × 10000
190
+ /// @returns √(x²+y²+z²) / 10000, result × 10000
163
191
  @require_on_load(init_trig)
164
192
  fn norm3_hp(x: int, y: int, z: int): int {
165
193
  // Store x,y,z as float in storage
@@ -205,6 +233,14 @@ fn __dmul_apply_scale() {
205
233
  raw("$execute store result storage rs:d __dp0 double $(scale) run data get storage rs:d __dp0 1");
206
234
  }
207
235
 
236
+ /// Multiply a double-precision value `d` by a fixed-point integer `f` (× 10000)
237
+ /// using a macro trick to keep all arithmetic in IEEE 754 double precision.
238
+ /// @since 1.3.0
239
+ /// @param d Double operand (stored in NBT as IEEE 754 double)
240
+ /// @param f Fixed-point multiplier × 10000 (e.g. 15000 = 1.5)
241
+ /// @returns d × (f / 10000) as a double
242
+ /// @example
243
+ /// let r: double = double_mul_fixed(3.14d, 20000); // 6.28 (3.14 × 2.0)
208
244
  fn double_mul_fixed(d: double, f: int): double {
209
245
  // Step 1: store f into math_hp scoreboard, then compute scale = f × 0.0001
210
246
  scoreboard_set("$dmul_f", "__rs_math_hp", f);
@@ -232,8 +268,9 @@ fn double_mul_fixed(d: double, f: int): double {
232
268
  // ⚠ Precision: full double (~15 sig figs). No overflow within double range.
233
269
  //
234
270
 
235
- // init_double_add(): summon the AEC marker entity for double_add/sub.
236
- // Called automatically via @require_on_load.
271
+ /// Initialise the `area_effect_cloud` marker entity used by `double_add` and `double_sub`.
272
+ /// Called automatically via `@require_on_load`.
273
+ /// @since 1.3.0
237
274
  @require_on_load(init_double_add)
238
275
  fn init_double_add() {
239
276
  raw("execute unless entity b54f1a4f-d7ac-4002-915e-3c2a3bf6f8a4 run summon minecraft:area_effect_cloud ~ ~ ~ {UUID:[I;-1238834609,-698744574,-1879932794,1006600372],NoGravity:1b,Duration:2147483647,Tags:[\"rs_math_hp_marker\"]}");
@@ -251,8 +288,12 @@ fn __dadd_tp_rel() {
251
288
  raw("$execute at b54f1a4f-d7ac-4002-915e-3c2a3bf6f8a4 run tp b54f1a4f-d7ac-4002-915e-3c2a3bf6f8a4 ~$(dx) 0.0 0.0");
252
289
  }
253
290
 
254
- // double_add(a, b): a + b in true double precision.
255
- // a, b: double (NBT-backed). Returns: a + b as double in __dp0.
291
+ /// Add two double-precision values in true IEEE 754 double precision
292
+ /// using the MC entity position trick.
293
+ /// @since 1.3.0
294
+ /// @param a First addend (double, stored in `__dp0`)
295
+ /// @param b Second addend (double, stored in `__dp1`)
296
+ /// @returns a + b as a double
256
297
  @require_on_load(init_double_add)
257
298
  fn double_add(a: double, b: double): double {
258
299
  // __dp0 = a, __dp1 = b (set by caller)
@@ -280,8 +321,11 @@ fn double_add(a: double, b: double): double {
280
321
  // Catastrophic cancellation warning applies when a ≈ b (same as all FP subtraction).
281
322
  //
282
323
 
283
- // double_sub(a, b): a - b in double precision.
284
- // a, b: double. Returns: a - b as double in __dp0.
324
+ /// Subtract two double-precision values (a b) using the entity position trick.
325
+ /// @since 1.3.0
326
+ /// @param a Minuend (double)
327
+ /// @param b Subtrahend (double) — negated then added via `double_add`
328
+ /// @returns a − b as a double
285
329
  @require_on_load(init_double_add)
286
330
  fn double_sub(a: double, b: double): double {
287
331
  // Negate __dp1 (b): read as ×10000 long, store back as double × -0.0001
@@ -318,6 +362,12 @@ fn double_sub(a: double, b: double): double {
318
362
  // double-precision ln/exp are available.
319
363
  //
320
364
 
365
+ /// Multiply two doubles via scoreboard integer approximation (~4 decimal digits).
366
+ /// ⚠ Overflows for |a| × |b| > ~21474. Use `double_mul_fixed` for higher precision.
367
+ /// @since 1.3.0
368
+ /// @param a First factor (double)
369
+ /// @param b Second factor (double)
370
+ /// @returns a × b (scoreboard approximation, ~4 sig. figs.)
321
371
  fn double_mul(a: double, b: double): double {
322
372
  // Convert a and b to ×10000 integer scores
323
373
  raw("execute store result score $dmul_a __rs_math_hp run data get storage rs:d __dp0 10000");
@@ -353,9 +403,12 @@ fn __ddiv_set_mat() {
353
403
  raw("$data modify entity @e[tag=rs_div,limit=1] transformation set value [$(da)f,0f,0f,0f,0f,1f,0f,0f,0f,0f,1f,0f,0f,0f,0f,$(db)f]");
354
404
  }
355
405
 
356
- // double_div(a, b): a / b in true double precision.
357
- // a, b: double. Returns: a / b as double in __dp0.
358
- // b must not be zero (produces Java Infinity, corrupts NBT).
406
+ /// Divide two doubles in true IEEE 754 double precision via the Display Entity SVD trick.
407
+ /// `b` must not be zero (produces Java `Infinity`, corrupts NBT).
408
+ /// @since 1.3.0
409
+ /// @param a Dividend (double)
410
+ /// @param b Divisor (double, must not be zero)
411
+ /// @returns a / b as a double
359
412
  @require_on_load(init_div)
360
413
  fn double_div(a: double, b: double): double {
361
414
  // Store a and b as float in macro args compound for __ddiv_set_mat
@@ -383,6 +436,14 @@ fn double_div(a: double, b: double): double {
383
436
  // Precision: one Newton step squares the error, improving from ~6 digits to ~11 digits.
384
437
  // Since exp_fx itself has ~6-digit precision, the effective output is ~8–9 digits.
385
438
  //
439
+
440
+ /// High-precision natural logarithm via one Newton refinement of the 5-term atanh series.
441
+ /// Precision ~8–9 significant digits. Valid for x ∈ [100, 1 000 000] (× 10000 scale).
442
+ /// @since 1.3.0
443
+ /// @param x Input value × 10000 (e.g. 10000 = 1.0, 27183 ≈ e)
444
+ /// @returns ln(x / 10000) × 10000
445
+ /// @example
446
+ /// let r: int = ln_hp(27183); // ≈ 10000 (ln(e) ≈ 1.0)
386
447
  fn ln_hp(x: int): int {
387
448
  // Step 1: initial estimate via 5-term atanh series
388
449
  let y: int = ln_5term(x);
@@ -408,6 +469,12 @@ fn ln_hp(x: int): int {
408
469
  // max_error ≈ 0.000002 (2× better than 3-term ln())
409
470
  // Cost: ~5 more scoreboard operations than ln()
410
471
  //
472
+
473
+ /// Natural logarithm using a 5-term atanh series (more accurate than the 3-term `ln()`).
474
+ /// Max error ≈ 0.000002. Valid for x ∈ [100, 1 000 000] (× 10000 scale).
475
+ /// @since 1.3.0
476
+ /// @param x Input value × 10000
477
+ /// @returns ln(x / 10000) × 10000
411
478
  fn ln_5term(x: int): int {
412
479
  let scale: int = 10000;
413
480
  let ln2: int = 6931;
@@ -448,6 +515,12 @@ fn ln_5term(x: int): int {
448
515
  // Scale r by 100 more to get √x in ×10000 units: r_scaled = r * 100.
449
516
  // Then convert to double with scale 0.0001.
450
517
  //
518
+
519
+ /// Square root of a double-precision value, returned as a double.
520
+ /// Internally converts to × 10000 fixed-point, applies `isqrt`, then converts back.
521
+ /// @since 1.3.0
522
+ /// @param x Input double (must be ≥ 0)
523
+ /// @returns √x as a double
451
524
  fn double_sqrt(x: double): double {
452
525
  // Convert double → ×10000 int
453
526
  let x_fixed: int = x as int;
@@ -475,6 +548,15 @@ fn double_sqrt(x: double): double {
475
548
  // 5. result_fixed = exp_fx(exponent) — ×10000, ≈ e^(ln(base)*exp_val)
476
549
  // 6. Convert result_fixed to double via scoreboard
477
550
  //
551
+
552
+ /// Real-valued power: base^exp_val for double base and double exponent.
553
+ /// Uses the identity a^b = e^(b·ln(a)) via fixed-point helpers. Precision ~8–9 digits.
554
+ /// @since 1.3.0
555
+ /// @param base Base value (double, must be > 0)
556
+ /// @param exp_val Exponent (double)
557
+ /// @returns base^exp_val as a double
558
+ /// @example
559
+ /// let r: double = pow_real(2.0d, 0.5d); // ≈ 1.4142 (√2)
478
560
  @require_on_load(init_trig)
479
561
  fn pow_real(base: double, exp_val: double): double {
480
562
  // Read base ×10000 from __dp0 (first double param)
@@ -501,6 +583,15 @@ fn pow_real(base: double, exp_val: double): double {
501
583
  // Uses binary exponentiation. Handles negative exponents via double_div.
502
584
  // Recursion supported in RedScript.
503
585
  //
586
+
587
+ /// Double base raised to an integer exponent using binary exponentiation (O(log n)).
588
+ /// Handles negative exponents via `double_div`.
589
+ /// @since 1.3.0
590
+ /// @param base Base value (double)
591
+ /// @param exp_val Integer exponent (may be negative)
592
+ /// @returns base^exp_val as a double
593
+ /// @example
594
+ /// let r: double = pow_fast(2.0d, 10); // 1024.0
504
595
  fn pow_fast(base: double, exp_val: int): double {
505
596
  if (exp_val == 0) { return 1.0d; }
506
597
  if (exp_val < 0) {
@@ -15,14 +15,28 @@ module library;
15
15
 
16
16
  // ─── 2D transform helpers ────────────────────────────────────────────────────
17
17
 
18
- // rotate2d_x: x component after 2D rotation by angle_deg×10000
19
- // rotate2d_x(x, y, 450000) ≈ x*cos45 - y*sin45
18
+ /// X component after 2D rotation of `(x, y)` by `angle_deg` (×10000).
19
+ ///
20
+ /// @since 2.0.0
21
+ /// @param x Input X coordinate ×10000
22
+ /// @param y Input Y coordinate ×10000
23
+ /// @param angle_deg Angle in degrees ×10000 (e.g. `450000` = 45°)
24
+ /// @returns `x*cos(angle) - y*sin(angle)` in ×10000
25
+ /// @example
26
+ /// let rx: int = rotate2d_x(10000, 0, 900000)
20
27
  fn rotate2d_x(x: int, y: int, angle_deg: int): int {
21
28
  let c: int = cos_fixed(angle_deg / 10000);
22
29
  let s: int = sin_fixed(angle_deg / 10000);
23
30
  return x * c / 1000 - y * s / 1000;
24
31
  }
25
32
 
33
+ /// Y component after 2D rotation of `(x, y)` by `angle_deg` (×10000).
34
+ ///
35
+ /// @since 2.0.0
36
+ /// @param x Input X coordinate ×10000
37
+ /// @param y Input Y coordinate ×10000
38
+ /// @param angle_deg Angle in degrees ×10000
39
+ /// @returns `x*sin(angle) + y*cos(angle)` in ×10000
26
40
  fn rotate2d_y(x: int, y: int, angle_deg: int): int {
27
41
  let c: int = cos_fixed(angle_deg / 10000);
28
42
  let s: int = sin_fixed(angle_deg / 10000);
@@ -31,36 +45,86 @@ fn rotate2d_y(x: int, y: int, angle_deg: int): int {
31
45
 
32
46
  // ─── Scale helpers ────────────────────────────────────────────────────────────
33
47
 
34
- // scale_x(x, sx_fx): scale x by sx_fx (sx_fx ×10000, e.g. 20000 = 2×)
48
+ /// Scale X coordinate by `sx_fx` (×10000).
49
+ ///
50
+ /// @since 2.0.0
51
+ /// @param x Input X value ×10000
52
+ /// @param sx_fx Scale factor ×10000 (e.g. `20000` = 2×)
53
+ /// @returns `x * sx_fx / 10000`
35
54
  fn scale_x(x: int, sx_fx: int): int { return x * sx_fx / 10000; }
55
+
56
+ /// Scale Y coordinate by `sy_fx` (×10000).
57
+ ///
58
+ /// @since 2.0.0
59
+ /// @param y Input Y value ×10000
60
+ /// @param sy_fx Scale factor ×10000
61
+ /// @returns `y * sy_fx / 10000`
36
62
  fn scale_y(y: int, sy_fx: int): int { return y * sy_fx / 10000; }
63
+
64
+ /// Scale Z coordinate by `sz_fx` (×10000).
65
+ ///
66
+ /// @since 2.0.0
67
+ /// @param z Input Z value ×10000
68
+ /// @param sz_fx Scale factor ×10000
69
+ /// @returns `z * sz_fx / 10000`
37
70
  fn scale_z(z: int, sz_fx: int): int { return z * sz_fx / 10000; }
38
71
 
39
- // uniform_scale(v, s_fx): apply uniform scale
72
+ /// Apply a uniform scale factor to a single component.
73
+ ///
74
+ /// @since 2.0.0
75
+ /// @param v Input component value ×10000
76
+ /// @param s_fx Uniform scale factor ×10000
77
+ /// @returns `v * s_fx / 10000`
40
78
  fn uniform_scale(v: int, s_fx: int): int { return v * s_fx / 10000; }
41
79
 
42
80
  // ─── 3D rotation (Euler angles, Y-up) ────────────────────────────────────────
43
81
 
44
- // rotate_y_x: X component after rotation around Y axis
82
+ /// X component after rotation around the Y axis by `angle_deg` (×10000).
83
+ ///
84
+ /// @since 2.0.0
85
+ /// @param x Input X coordinate ×10000
86
+ /// @param z Input Z coordinate ×10000
87
+ /// @param angle_deg Angle in degrees ×10000
88
+ /// @returns `x*cos(angle) + z*sin(angle)` in ×10000
45
89
  fn rotate_y_x(x: int, z: int, angle_deg: int): int {
46
90
  let c: int = cos_fixed(angle_deg / 10000);
47
91
  let s: int = sin_fixed(angle_deg / 10000);
48
92
  return x * c / 1000 + z * s / 1000;
49
93
  }
50
94
 
95
+ /// Z component after rotation around the Y axis by `angle_deg` (×10000).
96
+ ///
97
+ /// @since 2.0.0
98
+ /// @param x Input X coordinate ×10000
99
+ /// @param z Input Z coordinate ×10000
100
+ /// @param angle_deg Angle in degrees ×10000
101
+ /// @returns `-x*sin(angle) + z*cos(angle)` in ×10000
51
102
  fn rotate_y_z(x: int, z: int, angle_deg: int): int {
52
103
  let c: int = cos_fixed(angle_deg / 10000);
53
104
  let s: int = sin_fixed(angle_deg / 10000);
54
105
  return 0 - x * s / 1000 + z * c / 1000;
55
106
  }
56
107
 
57
- // rotate_x_y: Y component after rotation around X axis
108
+ /// Y component after rotation around the X axis by `angle_deg` (×10000).
109
+ ///
110
+ /// @since 2.0.0
111
+ /// @param y Input Y coordinate ×10000
112
+ /// @param z Input Z coordinate ×10000
113
+ /// @param angle_deg Angle in degrees ×10000
114
+ /// @returns `y*cos(angle) - z*sin(angle)` in ×10000
58
115
  fn rotate_x_y(y: int, z: int, angle_deg: int): int {
59
116
  let c: int = cos_fixed(angle_deg / 10000);
60
117
  let s: int = sin_fixed(angle_deg / 10000);
61
118
  return y * c / 1000 - z * s / 1000;
62
119
  }
63
120
 
121
+ /// Z component after rotation around the X axis by `angle_deg` (×10000).
122
+ ///
123
+ /// @since 2.0.0
124
+ /// @param y Input Y coordinate ×10000
125
+ /// @param z Input Z coordinate ×10000
126
+ /// @param angle_deg Angle in degrees ×10000
127
+ /// @returns `y*sin(angle) + z*cos(angle)` in ×10000
64
128
  fn rotate_x_z(y: int, z: int, angle_deg: int): int {
65
129
  let c: int = cos_fixed(angle_deg / 10000);
66
130
  let s: int = sin_fixed(angle_deg / 10000);
@@ -77,20 +141,33 @@ fn rotate_x_z(y: int, z: int, angle_deg: int): int {
77
141
  //
78
142
  // These helpers compute quaternion components (×10000)
79
143
 
80
- // quat_sin_half(angle_deg_fx): sin(angle/2) ×1000
81
- // angle_deg_fx: degrees ×10000
144
+ /// sin(angle/2) in ×1000 for a Display Entity Y-axis quaternion.
145
+ ///
146
+ /// @since 2.0.0
147
+ /// @param angle_deg_fx Full rotation angle in degrees ×10000
148
+ /// @returns `sin(angle/2)` in ×1000
82
149
  fn quat_sin_half(angle_deg_fx: int): int {
83
150
  return sin_fixed(angle_deg_fx / 20000); // angle/2 in degrees, then /10000 for sin_fixed
84
151
  }
85
152
 
153
+ /// cos(angle/2) in ×1000 for a Display Entity Y-axis quaternion.
154
+ ///
155
+ /// @since 2.0.0
156
+ /// @param angle_deg_fx Full rotation angle in degrees ×10000
157
+ /// @returns `cos(angle/2)` in ×1000
86
158
  fn quat_cos_half(angle_deg_fx: int): int {
87
159
  return cos_fixed(angle_deg_fx / 20000);
88
160
  }
89
161
 
90
162
  // ─── Billboard helpers ────────────────────────────────────────────────────────
91
163
 
92
- // billboard_rotation_y(player_yaw_fx): get Y rotation for a billboard facing player
93
- // player_yaw_fx: player yaw ×10000 (from entity NBT Rotation[0])
164
+ /// Compute the Y rotation for a billboard that faces the player.
165
+ ///
166
+ /// @since 2.0.0
167
+ /// @param player_yaw_fx Player yaw angle ×10000 (from entity NBT `Rotation[0]`)
168
+ /// @returns Billboard Y rotation ×10000 (opposite of player yaw, in [0, 3600000))
169
+ /// @example
170
+ /// let by: int = billboard_y(player_yaw)
94
171
  fn billboard_y(player_yaw_fx: int): int {
95
172
  // Billboard should face opposite direction
96
173
  return (player_yaw_fx + 1800000) % 3600000;
@@ -98,7 +175,17 @@ fn billboard_y(player_yaw_fx: int): int {
98
175
 
99
176
  // ─── Interpolation for smooth animation ──────────────────────────────────────
100
177
 
101
- // lerp_angle(a_fx, b_fx, t): lerp between two angles ×10000, taking shortest path
178
+ /// Interpolate between two angles (×10000) taking the shortest arc.
179
+ ///
180
+ /// Normalises the angular difference to [−1800000, 1800000] before interpolating.
181
+ ///
182
+ /// @since 2.0.0
183
+ /// @param a_fx Start angle ×10000
184
+ /// @param b_fx End angle ×10000
185
+ /// @param t Interpolation factor ×10000 (0 = a, 10000 = b)
186
+ /// @returns Interpolated angle ×10000
187
+ /// @example
188
+ /// let a: int = lerp_angle(0, 3600000, 5000)
102
189
  fn lerp_angle(a_fx: int, b_fx: int, t: int): int {
103
190
  let diff: int = b_fx - a_fx;
104
191
  // Normalize to [-1800000, 1800000]
@@ -116,11 +203,17 @@ fn lerp_angle(a_fx: int, b_fx: int, t: int): int {
116
203
  // a10 a11 a12
117
204
  // a20 a21 a22
118
205
 
119
- // mat3_mul: compute one element C[row][col] of a 3×3 matrix product
120
- // row ∈ {0,1,2}, col ∈ {0,1,2}
121
- // Pass all 18 components of A and B individually.
122
- // Returns C[row][col] ×10000
123
-
206
+ /// Compute element `C[row][col]` of the 3×3 matrix product `A × B`.
207
+ ///
208
+ /// All matrix values are ×10000 fixed-point. Pass all 18 components of A and B
209
+ /// individually. `row` and `col` are each in {0, 1, 2}.
210
+ ///
211
+ /// @since 2.0.0
212
+ /// @param a00 A[0,0] … a22 A[2,2] (9 elements, row-major)
213
+ /// @param b00 B[0,0] … b22 B[2,2] (9 elements, row-major)
214
+ /// @param row Target row index (0–2)
215
+ /// @param col Target column index (0–2)
216
+ /// @returns `C[row][col]` in ×10000
124
217
  fn mat3_mul_elem(
125
218
  a00: int, a01: int, a02: int,
126
219
  a10: int, a11: int, a12: int,
@@ -150,8 +243,13 @@ fn mat3_mul_elem(
150
243
  return r0 + r1 + r2;
151
244
  }
152
245
 
153
- // mat3_mul_vec3: multiply 3×3 matrix by a column vector (vx, vy, vz) ×10000
154
- // Returns one component (0=x, 1=y, 2=z) of the result vector ×10000
246
+ /// Compute one component of the 3×3 matrixvector product `A × v`.
247
+ ///
248
+ /// @since 2.0.0
249
+ /// @param a00 A[0,0] … a22 A[2,2] (9 elements, row-major, ×10000)
250
+ /// @param vx Vector X ×10000 @param vy Vector Y ×10000 @param vz Vector Z ×10000
251
+ /// @param comp Output component index (0=x, 1=y, 2=z)
252
+ /// @returns `(A × v)[comp]` in ×10000
155
253
  fn mat3_mul_vec3_elem(
156
254
  a00: int, a01: int, a02: int,
157
255
  a10: int, a11: int, a12: int,
@@ -174,6 +272,16 @@ fn mat3_mul_vec3_elem(
174
272
  // mat4_mul_elem: compute one element C[row][col] of a 4×4 matrix product.
175
273
  // Row-major, 16+16=32 components. Returns C[row][col] ×10000.
176
274
 
275
+ /// Compute element `C[row][col]` of the 4×4 matrix product `A × B`.
276
+ ///
277
+ /// Row-major layout, all values ×10000. `row` and `col` are each in {0, 1, 2, 3}.
278
+ ///
279
+ /// @since 2.0.0
280
+ /// @param a00 A[0,0] … a33 A[3,3] (16 elements, row-major, ×10000)
281
+ /// @param b00 B[0,0] … b33 B[3,3] (16 elements, row-major, ×10000)
282
+ /// @param row Target row index (0–3)
283
+ /// @param col Target column index (0–3)
284
+ /// @returns `C[row][col]` in ×10000
177
285
  fn mat4_mul_elem(
178
286
  a00: int, a01: int, a02: int, a03: int,
179
287
  a10: int, a11: int, a12: int, a13: int,
@@ -200,8 +308,13 @@ fn mat4_mul_elem(
200
308
  return ar0 * bc0 / 10000 + ar1 * bc1 / 10000 + ar2 * bc2 / 10000 + ar3 * bc3 / 10000;
201
309
  }
202
310
 
203
- // mat4_mul_vec4_elem: multiply 4×4 matrix by homogeneous vector (vx,vy,vz,vw) ×10000
204
- // comp: 0=x, 1=y, 2=z, 3=w
311
+ /// Compute one component of the 4×4 matrixhomogeneous-vector product `A × v`.
312
+ ///
313
+ /// @since 2.0.0
314
+ /// @param a00 A[0,0] … a33 A[3,3] (16 elements, row-major, ×10000)
315
+ /// @param vx Vector X ×10000 @param vy Y @param vz Z @param vw W
316
+ /// @param comp Output component index (0=x, 1=y, 2=z, 3=w)
317
+ /// @returns `(A × v)[comp]` in ×10000
205
318
  fn mat4_mul_vec4_elem(
206
319
  a00: int, a01: int, a02: int, a03: int,
207
320
  a10: int, a11: int, a12: int, a13: int,