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
@@ -55,7 +55,12 @@ let ECS_COMP_DAMAGE: int = 3
55
55
  // Registry is a 16-element int[] where registry[comp_id] == 1 means registered.
56
56
  // ─────────────────────────────────────────────────────────────────────────────
57
57
 
58
- // ecs_registry_new(): allocate a blank 16-slot registry
58
+ /// Allocate a blank 16-slot component registry.
59
+ ///
60
+ /// @since 2.0.0
61
+ /// @returns A new `int[]` of length 16 with all slots set to `0`
62
+ /// @example
63
+ /// let reg: int[] = ecs_registry_new()
59
64
  fn ecs_registry_new(): int[] {
60
65
  let reg: int[] = []
61
66
  let i: int = 0
@@ -66,7 +71,14 @@ fn ecs_registry_new(): int[] {
66
71
  return reg
67
72
  }
68
73
 
69
- // ecs_register(reg, comp_id): mark comp_id as registered; returns updated reg
74
+ /// Mark `comp_id` as registered in the registry and return the updated registry.
75
+ ///
76
+ /// @since 2.0.0
77
+ /// @param reg Registry array from `ecs_registry_new`
78
+ /// @param comp_id Component type ID in range [0, 15]
79
+ /// @returns Updated registry array
80
+ /// @example
81
+ /// reg = ecs_register(reg, ECS_COMP_HEALTH)
70
82
  fn ecs_register(reg: int[], comp_id: int): int[] {
71
83
  if (comp_id >= 0) {
72
84
  if (comp_id < 16) {
@@ -76,7 +88,14 @@ fn ecs_register(reg: int[], comp_id: int): int[] {
76
88
  return reg
77
89
  }
78
90
 
79
- // ecs_is_registered(reg, comp_id): 1 if registered, 0 otherwise
91
+ /// Check whether `comp_id` is registered.
92
+ ///
93
+ /// @since 2.0.0
94
+ /// @param reg Registry array from `ecs_registry_new`
95
+ /// @param comp_id Component type ID in range [0, 15]
96
+ /// @returns `1` if registered, `0` otherwise
97
+ /// @example
98
+ /// if (ecs_is_registered(reg, ECS_COMP_HEALTH) == 1) { }
80
99
  fn ecs_is_registered(reg: int[], comp_id: int): int {
81
100
  if (comp_id >= 0) {
82
101
  if (comp_id < 16) {
@@ -96,8 +115,14 @@ fn ecs_is_registered(reg: int[], comp_id: int): int {
96
115
  // [3..7] reserved — 0
97
116
  // ─────────────────────────────────────────────────────────────────────────────
98
117
 
99
- // ecs_health_init(entity_score, max_hp): create a health component state
100
- // Sets current_hp = max_hp (full health at spawn)
118
+ /// Create a health component state with `current_hp = max_hp` (full health).
119
+ ///
120
+ /// @since 2.0.0
121
+ /// @param entity_score Scoreboard score identifying the entity
122
+ /// @param max_hp Maximum hit points
123
+ /// @returns New 8-element health component state array
124
+ /// @example
125
+ /// let hp: int[] = ecs_health_init(42, 100)
101
126
  fn ecs_health_init(entity_score: int, max_hp: int): int[] {
102
127
  let s: int[] = []
103
128
  s.push(entity_score)
@@ -111,17 +136,36 @@ fn ecs_health_init(entity_score: int, max_hp: int): int[] {
111
136
  return s
112
137
  }
113
138
 
114
- // ecs_health_get(state): return current HP
139
+ /// Return current HP from a health component state.
140
+ ///
141
+ /// @since 2.0.0
142
+ /// @param state Health component state from `ecs_health_init`
143
+ /// @returns Current hit point value
144
+ /// @example
145
+ /// let hp: int = ecs_health_get(state)
115
146
  fn ecs_health_get(state: int[]): int {
116
147
  return state[1]
117
148
  }
118
149
 
119
- // ecs_health_max(state): return maximum HP
150
+ /// Return maximum HP from a health component state.
151
+ ///
152
+ /// @since 2.0.0
153
+ /// @param state Health component state from `ecs_health_init`
154
+ /// @returns Maximum hit point value
155
+ /// @example
156
+ /// let max: int = ecs_health_max(state)
120
157
  fn ecs_health_max(state: int[]): int {
121
158
  return state[2]
122
159
  }
123
160
 
124
- // ecs_health_set(state, hp): set current HP (clamped to [0, max]), return state
161
+ /// Set current HP (clamped to [0, max]) and return the updated state.
162
+ ///
163
+ /// @since 2.0.0
164
+ /// @param state Health component state from `ecs_health_init`
165
+ /// @param hp New HP value (clamped to valid range automatically)
166
+ /// @returns Updated state array
167
+ /// @example
168
+ /// state = ecs_health_set(state, 50)
125
169
  fn ecs_health_set(state: int[], hp: int): int[] {
126
170
  let clamped: int = hp
127
171
  if (clamped < 0) { clamped = 0 }
@@ -130,7 +174,14 @@ fn ecs_health_set(state: int[], hp: int): int[] {
130
174
  return state
131
175
  }
132
176
 
133
- // ecs_health_damage(state, amount): subtract amount from HP, clamp to 0
177
+ /// Subtract `amount` from HP (clamped to 0) and return the updated state.
178
+ ///
179
+ /// @since 2.0.0
180
+ /// @param state Health component state
181
+ /// @param amount Damage amount to subtract (positive integer)
182
+ /// @returns Updated state array
183
+ /// @example
184
+ /// state = ecs_health_damage(state, 30)
134
185
  fn ecs_health_damage(state: int[], amount: int): int[] {
135
186
  let next: int = state[1] - amount
136
187
  if (next < 0) { next = 0 }
@@ -138,7 +189,14 @@ fn ecs_health_damage(state: int[], amount: int): int[] {
138
189
  return state
139
190
  }
140
191
 
141
- // ecs_health_heal(state, amount): add amount to HP, clamp to max
192
+ /// Add `amount` to HP (clamped to max) and return the updated state.
193
+ ///
194
+ /// @since 2.0.0
195
+ /// @param state Health component state
196
+ /// @param amount Healing amount to add (positive integer)
197
+ /// @returns Updated state array
198
+ /// @example
199
+ /// state = ecs_health_heal(state, 20)
142
200
  fn ecs_health_heal(state: int[], amount: int): int[] {
143
201
  let next: int = state[1] + amount
144
202
  if (next > state[2]) { next = state[2] }
@@ -146,14 +204,25 @@ fn ecs_health_heal(state: int[], amount: int): int[] {
146
204
  return state
147
205
  }
148
206
 
149
- // ecs_health_is_dead(state): 1 if HP <= 0, else 0
207
+ /// Return `1` if the entity HP is at or below zero, otherwise `0`.
208
+ ///
209
+ /// @since 2.0.0
210
+ /// @param state Health component state
211
+ /// @returns `1` if dead, `0` if alive
212
+ /// @example
213
+ /// if (ecs_health_is_dead(state) == 1) { /* handle death */ }
150
214
  fn ecs_health_is_dead(state: int[]): int {
151
215
  if (state[1] <= 0) { return 1 }
152
216
  return 0
153
217
  }
154
218
 
155
- // ecs_health_pct(state): HP percentage as fixed-point ×10000
156
- // e.g. 50 HP out of 100 max → 5000 (= 50.00%)
219
+ /// Return HP as a percentage in fixed-point ×10000 (e.g., `5000` = 50.00%).
220
+ ///
221
+ /// @since 2.0.0
222
+ /// @param state Health component state
223
+ /// @returns `current_hp * 10000 / max_hp`, or `0` if max_hp is zero
224
+ /// @example
225
+ /// let pct: int = ecs_health_pct(state)
157
226
  fn ecs_health_pct(state: int[]): int {
158
227
  if (state[2] <= 0) { return 0 }
159
228
  return state[1] * 10000 / state[2]
@@ -171,7 +240,15 @@ fn ecs_health_pct(state: int[]): int {
171
240
  // Fixed-point convention: 1000 = 1.0 block/tick
172
241
  // ─────────────────────────────────────────────────────────────────────────────
173
242
 
174
- // ecs_vel_init(vx, vy, vz): create a velocity component state
243
+ /// Create a velocity component state with the given initial velocities.
244
+ ///
245
+ /// @since 2.0.0
246
+ /// @param vx X velocity ×1000 fixed-point (1000 = 1.0 block/tick)
247
+ /// @param vy Y velocity ×1000 fixed-point
248
+ /// @param vz Z velocity ×1000 fixed-point
249
+ /// @returns New 8-element velocity component state array
250
+ /// @example
251
+ /// let vel: int[] = ecs_vel_init(1000, 0, 500)
175
252
  fn ecs_vel_init(vx: int, vy: int, vz: int): int[] {
176
253
  let s: int[] = []
177
254
  s.push(vx)
@@ -185,22 +262,43 @@ fn ecs_vel_init(vx: int, vy: int, vz: int): int[] {
185
262
  return s
186
263
  }
187
264
 
188
- // ecs_vel_get_x(state): return vx
265
+ /// Return X velocity from a velocity component state.
266
+ ///
267
+ /// @since 2.0.0
268
+ /// @param state Velocity component state
269
+ /// @returns X velocity ×1000 fixed-point
189
270
  fn ecs_vel_get_x(state: int[]): int {
190
271
  return state[0]
191
272
  }
192
273
 
193
- // ecs_vel_get_y(state): return vy
274
+ /// Return Y velocity from a velocity component state.
275
+ ///
276
+ /// @since 2.0.0
277
+ /// @param state Velocity component state
278
+ /// @returns Y velocity ×1000 fixed-point
194
279
  fn ecs_vel_get_y(state: int[]): int {
195
280
  return state[1]
196
281
  }
197
282
 
198
- // ecs_vel_get_z(state): return vz
283
+ /// Return Z velocity from a velocity component state.
284
+ ///
285
+ /// @since 2.0.0
286
+ /// @param state Velocity component state
287
+ /// @returns Z velocity ×1000 fixed-point
199
288
  fn ecs_vel_get_z(state: int[]): int {
200
289
  return state[2]
201
290
  }
202
291
 
203
- // ecs_vel_set(state, vx, vy, vz): set all velocity components, return state
292
+ /// Set all velocity components and return the updated state.
293
+ ///
294
+ /// @since 2.0.0
295
+ /// @param state Velocity component state
296
+ /// @param vx New X velocity ×1000
297
+ /// @param vy New Y velocity ×1000
298
+ /// @param vz New Z velocity ×1000
299
+ /// @returns Updated state array
300
+ /// @example
301
+ /// state = ecs_vel_set(state, 500, 1200, 0)
204
302
  fn ecs_vel_set(state: int[], vx: int, vy: int, vz: int): int[] {
205
303
  state[0] = vx
206
304
  state[1] = vy
@@ -208,9 +306,16 @@ fn ecs_vel_set(state: int[], vx: int, vy: int, vz: int): int[] {
208
306
  return state
209
307
  }
210
308
 
211
- // ecs_vel_speed(state): magnitude of velocity vector ×1000
212
- // Uses sqrt_fixed: speed = sqrt(vx² + vy² + vz²) in fixed-point units
213
- // e.g. ecs_vel_speed([3000, 4000, 0, ...]) == 5000
309
+ /// Return the speed (magnitude) of the velocity vector ×1000.
310
+ ///
311
+ /// Uses `sqrt_fixed` from `math.mcrs`. For example,
312
+ /// `ecs_vel_speed([3000, 4000, 0, ...])` returns approximately `5000`.
313
+ ///
314
+ /// @since 2.0.0
315
+ /// @param state Velocity component state
316
+ /// @returns `sqrt(vx² + vy² + vz²)` in ×1000 fixed-point
317
+ /// @example
318
+ /// let speed: int = ecs_vel_speed(vel_state)
214
319
  fn ecs_vel_speed(state: int[]): int {
215
320
  let vx: int = state[0]
216
321
  let vy: int = state[1]
@@ -221,15 +326,27 @@ fn ecs_vel_speed(state: int[]): int {
221
326
  return sqrt_fixed(mag_sq)
222
327
  }
223
328
 
224
- // ecs_vel_apply_gravity(state, gravity_fx): subtract gravity from vy
225
- // gravity_fx is fixed-point ×1000 (e.g. 980 ≈ 0.980 blocks/tick², roughly 0.08g per tick)
329
+ /// Apply gravity by subtracting `gravity_fx` from the Y velocity each tick.
330
+ ///
331
+ /// @since 2.0.0
332
+ /// @param state Velocity component state
333
+ /// @param gravity_fx Gravity acceleration ×1000 per tick (e.g. `980` ≈ 0.98 blocks/tick²)
334
+ /// @returns Updated state array
335
+ /// @example
336
+ /// vel_state = ecs_vel_apply_gravity(vel_state, 980)
226
337
  fn ecs_vel_apply_gravity(state: int[], gravity_fx: int): int[] {
227
338
  state[1] = state[1] - gravity_fx
228
339
  return state
229
340
  }
230
341
 
231
- // ecs_vel_damp(state, factor_fx): multiply each velocity component by factor_fx/10000
232
- // factor_fx: friction factor ×10000 (e.g. 8000 = 0.80 damping)
342
+ /// Apply a friction damping factor to all velocity components.
343
+ ///
344
+ /// @since 2.0.0
345
+ /// @param state Velocity component state
346
+ /// @param factor_fx Friction factor ×10000 (e.g. `8000` = 0.80 damping)
347
+ /// @returns Updated state array with each component multiplied by `factor_fx/10000`
348
+ /// @example
349
+ /// vel_state = ecs_vel_damp(vel_state, 9000)
233
350
  fn ecs_vel_damp(state: int[], factor_fx: int): int[] {
234
351
  state[0] = state[0] * factor_fx / 10000
235
352
  state[1] = state[1] * factor_fx / 10000
@@ -1,61 +1,137 @@
1
1
  // Effect helper functions
2
2
 
3
- /// Give speed boost
3
+ /// Give a speed boost to the target entity.
4
+ /// @since 1.0.0
5
+ /// @param target Entity selector (e.g. @p, @a, @e[...])
6
+ /// @param duration Effect duration in ticks (20 ticks = 1 second)
7
+ /// @param level Amplifier level (0 = Speed I, 1 = Speed II, ...)
8
+ /// @returns void — applies minecraft:speed effect
9
+ /// @example
10
+ /// speed(@p, 200, 1) // Speed II for 10 seconds
4
11
  fn speed(target: selector, duration: int, level: int) {
5
12
  effect(target, "minecraft:speed", duration, level);
6
13
  }
7
14
 
8
- /// Give jump boost
15
+ /// Give a jump boost to the target entity.
16
+ /// @since 1.0.0
17
+ /// @param target Entity selector
18
+ /// @param duration Effect duration in ticks
19
+ /// @param level Amplifier level (0 = Jump Boost I, 1 = Jump Boost II, ...)
20
+ /// @returns void — applies minecraft:jump_boost effect
21
+ /// @example
22
+ /// jump(@p, 100, 0) // Jump Boost I for 5 seconds
9
23
  fn jump(target: selector, duration: int, level: int) {
10
24
  effect(target, "minecraft:jump_boost", duration, level);
11
25
  }
12
26
 
13
- /// Give regeneration
27
+ /// Give regeneration to the target entity.
28
+ /// @since 1.0.0
29
+ /// @param target Entity selector
30
+ /// @param duration Effect duration in ticks
31
+ /// @param level Amplifier level (0 = Regeneration I, ...)
32
+ /// @returns void — applies minecraft:regeneration effect
33
+ /// @example
34
+ /// regen(@p, 60, 0) // Regeneration I for 3 seconds
14
35
  fn regen(target: selector, duration: int, level: int) {
15
36
  effect(target, "minecraft:regeneration", duration, level);
16
37
  }
17
38
 
18
- /// Give resistance
39
+ /// Give damage resistance to the target entity.
40
+ /// @since 1.0.0
41
+ /// @param target Entity selector
42
+ /// @param duration Effect duration in ticks
43
+ /// @param level Amplifier level (0 = Resistance I, ...)
44
+ /// @returns void — applies minecraft:resistance effect
45
+ /// @example
46
+ /// resistance(@p, 400, 0) // Resistance I for 20 seconds
19
47
  fn resistance(target: selector, duration: int, level: int) {
20
48
  effect(target, "minecraft:resistance", duration, level);
21
49
  }
22
50
 
23
- /// Give strength
51
+ /// Give strength to the target entity.
52
+ /// @since 1.0.0
53
+ /// @param target Entity selector
54
+ /// @param duration Effect duration in ticks
55
+ /// @param level Amplifier level (0 = Strength I, 1 = Strength II, ...)
56
+ /// @returns void — applies minecraft:strength effect
57
+ /// @example
58
+ /// strength(@p, 200, 1) // Strength II for 10 seconds
24
59
  fn strength(target: selector, duration: int, level: int) {
25
60
  effect(target, "minecraft:strength", duration, level);
26
61
  }
27
62
 
28
- /// Give invisibility
63
+ /// Make the target entity invisible.
64
+ /// @since 1.0.0
65
+ /// @param target Entity selector
66
+ /// @param duration Effect duration in ticks
67
+ /// @returns void — applies minecraft:invisibility at amplifier 0
68
+ /// @example
69
+ /// invisible(@p, 300) // invisibility for 15 seconds
29
70
  fn invisible(target: selector, duration: int) {
30
71
  effect(target, "minecraft:invisibility", duration, 0);
31
72
  }
32
73
 
33
- /// Give night vision
74
+ /// Give night vision to the target entity.
75
+ /// @since 1.0.0
76
+ /// @param target Entity selector
77
+ /// @param duration Effect duration in ticks
78
+ /// @returns void — applies minecraft:night_vision at amplifier 0
79
+ /// @example
80
+ /// night_vision(@p, 6000) // night vision for 5 minutes
34
81
  fn night_vision(target: selector, duration: int) {
35
82
  effect(target, "minecraft:night_vision", duration, 0);
36
83
  }
37
84
 
38
- /// Give slow falling
85
+ /// Give slow falling to the target entity.
86
+ /// @since 1.0.0
87
+ /// @param target Entity selector
88
+ /// @param duration Effect duration in ticks
89
+ /// @returns void — applies minecraft:slow_falling at amplifier 0
90
+ /// @example
91
+ /// slow_fall(@p, 200) // slow falling for 10 seconds
39
92
  fn slow_fall(target: selector, duration: int) {
40
93
  effect(target, "minecraft:slow_falling", duration, 0);
41
94
  }
42
95
 
43
- /// Give glowing effect
96
+ /// Give the glowing outline effect to the target entity.
97
+ /// @since 1.0.0
98
+ /// @param target Entity selector
99
+ /// @param duration Effect duration in ticks
100
+ /// @returns void — applies minecraft:glowing at amplifier 0
101
+ /// @example
102
+ /// glow(@e[type=zombie], 100) // make all zombies glow for 5 seconds
44
103
  fn glow(target: selector, duration: int) {
45
104
  effect(target, "minecraft:glowing", duration, 0);
46
105
  }
47
106
 
48
- /// Clear all effects from target
107
+ /// Clear all active effects from the target entity.
108
+ /// @since 1.0.0
109
+ /// @param target Entity selector
110
+ /// @returns void — removes all potion effects via effect_clear
111
+ /// @example
112
+ /// clear_effects(@p) // remove all effects from nearest player
49
113
  fn clear_effects(target: selector) {
50
114
  effect_clear(target);
51
115
  }
52
116
 
53
- /// Clear specific effect from target
117
+ /// Clear a specific effect from the target entity.
118
+ /// @since 1.0.0
119
+ /// @param target Entity selector
120
+ /// @param eff Effect resource location string (e.g. "minecraft:speed")
121
+ /// @returns void — removes the specified potion effect
122
+ /// @example
123
+ /// clear_effect(@p, "minecraft:poison") // cure poison
54
124
  fn clear_effect(target: selector, eff: string) {
55
125
  effect_clear(target, eff);
56
126
  }
57
127
 
58
- /// Full buff package (speed, strength, regen)
128
+ /// Apply a full buff package (Speed I, Strength I, Regeneration I, Resistance I).
129
+ /// @since 1.0.0
130
+ /// @param target Entity selector
131
+ /// @param duration Duration in ticks for all four effects
132
+ /// @returns void — applies speed, strength, regen, and resistance at level 1 (or 0 for resistance)
133
+ /// @example
134
+ /// buff_all(@p, 600) // full buff for 30 seconds
59
135
  fn buff_all(target: selector, duration: int) {
60
136
  speed(target, duration, 1);
61
137
  strength(target, duration, 1);
@@ -1,13 +1,32 @@
1
+ // events.mcrs — RedScript event dispatcher.
2
+ //
3
+ // Detects MC scoreboard-driven events each tick and dispatches them to
4
+ // function tags so multiple handlers can be registered with @on(EventType).
5
+ //
6
+ // Supported events (dispatched via function tags):
7
+ // #rs:on_player_join — fired once for each player without the rs.joined tag
8
+ // #rs:on_player_death — fired when a player's rs.deaths score reaches 1+
9
+ // #rs:on_entity_kill — fired when a player's rs.kills score reaches 1+
10
+ // #rs:on_item_use — fired when a player uses a carrot-on-a-stick
11
+ //
12
+ // Usage:
13
+ // @on(PlayerJoin) fn greet() { tellraw(@s, "Welcome!"); }
14
+
1
15
  module events
2
- // RedScript event dispatcher — detects MC events and dispatches to function tags.
3
- // Handlers register via @on(EventType) decorator (compiler-generated tag JSON).
4
16
 
17
+ /// Internal load function: registers scoreboard objectives for death, kill, and item-use tracking.
18
+ /// Do not call directly — invoked automatically at datapack load.
19
+ /// @since 1.2.0
5
20
  @load fn __events_load() {
6
21
  raw("scoreboard objectives add rs.deaths deathCount")
7
22
  raw("scoreboard objectives add rs.kills totalKillCount")
8
23
  raw("scoreboard objectives add rs.item_use minecraft.used:minecraft.carrot_on_a_stick")
9
24
  }
10
25
 
26
+ /// Internal tick function: polls scoreboard objectives each game tick and dispatches
27
+ /// PlayerJoin / PlayerDeath / EntityKill / ItemUse events to their respective function tags.
28
+ /// Do not call directly — invoked automatically every tick.
29
+ /// @since 1.2.0
11
30
  @tick fn __events_tick() {
12
31
  // PlayerJoin: players without rs.joined tag
13
32
  raw("execute as @a[tag=!rs.joined] run function #rs:on_player_join")
@@ -26,9 +26,24 @@ module library;
26
26
  // With x = 15000 (1.5): result = mulfix10k(20000, 15000) + 10000
27
27
  // = 30000 + 10000 = 40000 (4.0)
28
28
 
29
- // expr_eval(tokens, n, x): evaluate n RPN tokens, substituting x for -10000.
30
- // Returns the top-of-stack value (×10000 scale).
31
- // Undefined behaviour if the token stream is malformed (stack underflow/overflow).
29
+ /// Evaluate an RPN (Reverse Polish Notation) token stream with a single variable substitution.
30
+ ///
31
+ /// Token encoding (all values × 10000):
32
+ /// - Positive integer: literal value pushed onto the stack
33
+ /// - `-10000`: variable `x` (replaced by the `x` argument)
34
+ /// - `-1` ADD, `-2` SUB, `-3` MUL (fixed-point), `-4` DIV (fixed-point)
35
+ /// - `-5` SIN (degrees × 10000 → result × 10000), `-6` COS, `-7` SQRT, `-8` ABS
36
+ ///
37
+ /// Internal stack depth: 16 elements. Behaviour is undefined for malformed token streams.
38
+ /// @since 1.2.0
39
+ /// @param tokens RPN token array of length n
40
+ /// @param n Number of tokens
41
+ /// @param x Variable value × 10000 substituted for token `-10000`
42
+ /// @returns Top-of-stack value × 10000 after evaluating all tokens
43
+ /// @example
44
+ /// // 2*x + 1 → RPN: [20000, -10000, -3, 10000, -1]
45
+ /// let prog: int[] = [20000, -10000, -3, 10000, -1];
46
+ /// expr_eval(prog, 5, 15000); // 40000 (2×1.5 + 1 = 4.0)
32
47
  fn expr_eval(tokens: int[], n: int, x: int): int {
33
48
  let stack: int[] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
34
49
  let sp: int = 0; // stack pointer: number of items on stack