redscript-mc 2.4.0 → 2.5.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 (2298) hide show
  1. package/CHANGELOG.md +25 -5
  2. package/README.md +2 -0
  3. package/dist/__tests__/cli.test.d.ts +1 -0
  4. package/dist/__tests__/cli.test.js +278 -0
  5. package/dist/__tests__/codegen.test.d.ts +1 -0
  6. package/dist/__tests__/codegen.test.js +152 -0
  7. package/dist/__tests__/compile-all.test.d.ts +10 -0
  8. package/dist/__tests__/compile-all.test.js +108 -0
  9. package/dist/__tests__/dce.test.d.ts +1 -0
  10. package/dist/__tests__/dce.test.js +138 -0
  11. package/dist/__tests__/diagnostics.test.d.ts +4 -0
  12. package/dist/__tests__/diagnostics.test.js +149 -0
  13. package/dist/__tests__/e2e.test.d.ts +6 -0
  14. package/dist/__tests__/e2e.test.js +1847 -0
  15. package/dist/__tests__/entity-types.test.d.ts +1 -0
  16. package/dist/__tests__/entity-types.test.js +203 -0
  17. package/dist/__tests__/formatter.test.d.ts +1 -0
  18. package/dist/__tests__/formatter.test.js +40 -0
  19. package/dist/__tests__/lexer.test.d.ts +1 -0
  20. package/dist/__tests__/lexer.test.js +343 -0
  21. package/dist/__tests__/lowering.test.d.ts +1 -0
  22. package/dist/__tests__/lowering.test.js +1015 -0
  23. package/dist/__tests__/macro.test.d.ts +8 -0
  24. package/dist/__tests__/macro.test.js +305 -0
  25. package/dist/__tests__/mc-integration.test.d.ts +12 -0
  26. package/dist/__tests__/mc-integration.test.js +819 -0
  27. package/dist/__tests__/mc-syntax.test.d.ts +1 -0
  28. package/dist/__tests__/mc-syntax.test.js +124 -0
  29. package/dist/__tests__/nbt.test.d.ts +1 -0
  30. package/dist/__tests__/nbt.test.js +82 -0
  31. package/dist/__tests__/optimizer-advanced.test.d.ts +1 -0
  32. package/dist/__tests__/optimizer-advanced.test.js +124 -0
  33. package/dist/__tests__/optimizer.test.d.ts +1 -0
  34. package/dist/__tests__/optimizer.test.js +149 -0
  35. package/dist/__tests__/parser.test.d.ts +1 -0
  36. package/dist/__tests__/parser.test.js +807 -0
  37. package/dist/__tests__/repl.test.d.ts +1 -0
  38. package/dist/__tests__/repl.test.js +27 -0
  39. package/dist/__tests__/runtime.test.d.ts +1 -0
  40. package/dist/__tests__/runtime.test.js +289 -0
  41. package/dist/__tests__/stdlib-advanced.test.d.ts +4 -0
  42. package/dist/__tests__/stdlib-advanced.test.js +378 -0
  43. package/dist/__tests__/stdlib-bigint.test.d.ts +7 -0
  44. package/dist/__tests__/stdlib-bigint.test.js +428 -0
  45. package/dist/__tests__/stdlib-math.test.d.ts +7 -0
  46. package/dist/__tests__/stdlib-math.test.js +352 -0
  47. package/dist/__tests__/stdlib-vec.test.d.ts +4 -0
  48. package/dist/__tests__/stdlib-vec.test.js +264 -0
  49. package/dist/__tests__/structure-optimizer.test.d.ts +1 -0
  50. package/dist/__tests__/structure-optimizer.test.js +33 -0
  51. package/dist/__tests__/typechecker.test.d.ts +1 -0
  52. package/dist/__tests__/typechecker.test.js +552 -0
  53. package/dist/__tests__/var-allocator.test.d.ts +1 -0
  54. package/dist/__tests__/var-allocator.test.js +69 -0
  55. package/dist/ast/types.d.ts +514 -0
  56. package/dist/ast/types.js +9 -0
  57. package/dist/builtins/metadata.d.ts +36 -0
  58. package/dist/builtins/metadata.js +1014 -0
  59. package/dist/cli.d.ts +11 -0
  60. package/dist/cli.js +0 -0
  61. package/dist/codegen/cmdblock/index.d.ts +26 -0
  62. package/dist/codegen/cmdblock/index.js +45 -0
  63. package/dist/codegen/mcfunction/index.d.ts +40 -0
  64. package/dist/codegen/mcfunction/index.js +606 -0
  65. package/dist/codegen/structure/index.d.ts +24 -0
  66. package/dist/codegen/structure/index.js +279 -0
  67. package/dist/codegen/var-allocator.d.ts +45 -0
  68. package/dist/codegen/var-allocator.js +104 -0
  69. package/dist/compile.d.ts +68 -0
  70. package/dist/data/arena/function/__load.mcfunction +6 -0
  71. package/dist/data/arena/function/__tick.mcfunction +2 -0
  72. package/dist/data/arena/function/announce_leaders/else_1.mcfunction +3 -0
  73. package/dist/data/arena/function/announce_leaders/foreach_0/merge_2.mcfunction +1 -0
  74. package/dist/data/arena/function/announce_leaders/foreach_0/then_0.mcfunction +3 -0
  75. package/dist/data/arena/function/announce_leaders/foreach_0.mcfunction +7 -0
  76. package/dist/data/arena/function/announce_leaders/foreach_1/merge_2.mcfunction +1 -0
  77. package/dist/data/arena/function/announce_leaders/foreach_1/then_0.mcfunction +4 -0
  78. package/dist/data/arena/function/announce_leaders/foreach_1.mcfunction +6 -0
  79. package/dist/data/arena/function/announce_leaders/merge_2.mcfunction +1 -0
  80. package/dist/data/arena/function/announce_leaders/then_0.mcfunction +4 -0
  81. package/dist/data/arena/function/announce_leaders.mcfunction +6 -0
  82. package/dist/data/arena/function/arena_tick/merge_2.mcfunction +1 -0
  83. package/dist/data/arena/function/arena_tick/then_0.mcfunction +4 -0
  84. package/dist/data/arena/function/arena_tick.mcfunction +11 -0
  85. package/dist/data/capture_the_flag/function/add_to_team.mcfunction +5 -0
  86. package/dist/data/capture_the_flag/function/angry_at.mcfunction +1 -0
  87. package/dist/data/capture_the_flag/function/assign_teams.mcfunction +1 -0
  88. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1.mcfunction +8 -0
  89. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1__else_2.mcfunction +8 -0
  90. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1__merge_1.mcfunction +3 -0
  91. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1__then_0.mcfunction +8 -0
  92. package/dist/data/capture_the_flag/function/barrier_wall.mcfunction +1 -0
  93. package/dist/data/capture_the_flag/function/buff_all.mcfunction +22 -0
  94. package/dist/data/capture_the_flag/function/check_flag_capture.mcfunction +2 -0
  95. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t0.mcfunction +8 -0
  96. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t0__merge_1.mcfunction +1 -0
  97. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t0__then_0.mcfunction +7 -0
  98. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t1.mcfunction +8 -0
  99. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t1__merge_1.mcfunction +1 -0
  100. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t1__then_0.mcfunction +7 -0
  101. package/dist/data/capture_the_flag/function/check_flag_pickup.mcfunction +2 -0
  102. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t0.mcfunction +8 -0
  103. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t0__merge_1.mcfunction +1 -0
  104. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t0__then_0.mcfunction +7 -0
  105. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t1.mcfunction +8 -0
  106. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t1__merge_1.mcfunction +1 -0
  107. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t1__then_0.mcfunction +7 -0
  108. package/dist/data/capture_the_flag/function/check_win.mcfunction +4 -0
  109. package/dist/data/capture_the_flag/function/cleanup_teams.mcfunction +8 -0
  110. package/dist/data/capture_the_flag/function/clear_area.mcfunction +1 -0
  111. package/dist/data/capture_the_flag/function/clear_effect.mcfunction +1 -0
  112. package/dist/data/capture_the_flag/function/clear_effects.mcfunction +1 -0
  113. package/dist/data/capture_the_flag/function/clear_inventory.mcfunction +1 -0
  114. package/dist/data/capture_the_flag/function/create_blue_team.mcfunction +10 -0
  115. package/dist/data/capture_the_flag/function/create_green_team.mcfunction +10 -0
  116. package/dist/data/capture_the_flag/function/create_red_team.mcfunction +10 -0
  117. package/dist/data/capture_the_flag/function/create_team.mcfunction +8 -0
  118. package/dist/data/capture_the_flag/function/create_yellow_team.mcfunction +10 -0
  119. package/dist/data/capture_the_flag/function/disable_fire_spread.mcfunction +1 -0
  120. package/dist/data/capture_the_flag/function/disable_keep_inventory.mcfunction +1 -0
  121. package/dist/data/capture_the_flag/function/disable_mob_griefing.mcfunction +1 -0
  122. package/dist/data/capture_the_flag/function/distance_to.mcfunction +6 -0
  123. package/dist/data/capture_the_flag/function/distance_to__const_0_0_0_0.mcfunction +5 -0
  124. package/dist/data/capture_the_flag/function/enable_keep_inventory.mcfunction +1 -0
  125. package/dist/data/capture_the_flag/function/end_game.mcfunction +6 -0
  126. package/dist/data/capture_the_flag/function/end_game__else_2.mcfunction +3 -0
  127. package/dist/data/capture_the_flag/function/end_game__foreach_t7.mcfunction +2 -0
  128. package/dist/data/capture_the_flag/function/end_game__merge_1.mcfunction +1 -0
  129. package/dist/data/capture_the_flag/function/end_game__then_0.mcfunction +3 -0
  130. package/dist/data/capture_the_flag/function/end_sparkles_at.mcfunction +1 -0
  131. package/dist/data/capture_the_flag/function/explosion_effect.mcfunction +1 -0
  132. package/dist/data/capture_the_flag/function/flames.mcfunction +1 -0
  133. package/dist/data/capture_the_flag/function/game_tick.mcfunction +1 -0
  134. package/dist/data/capture_the_flag/function/give_kit_archer.mcfunction +6 -0
  135. package/dist/data/capture_the_flag/function/give_kit_mage.mcfunction +5 -0
  136. package/dist/data/capture_the_flag/function/give_kit_warrior.mcfunction +6 -0
  137. package/dist/data/capture_the_flag/function/glass_box.mcfunction +2 -0
  138. package/dist/data/capture_the_flag/function/glow.mcfunction +1 -0
  139. package/dist/data/capture_the_flag/function/happy_at.mcfunction +1 -0
  140. package/dist/data/capture_the_flag/function/hearts_at.mcfunction +1 -0
  141. package/dist/data/capture_the_flag/function/init.mcfunction +11 -0
  142. package/dist/data/capture_the_flag/function/invisible.mcfunction +1 -0
  143. package/dist/data/capture_the_flag/function/jump.mcfunction +1 -0
  144. package/dist/data/capture_the_flag/function/load.mcfunction +1 -0
  145. package/dist/data/capture_the_flag/function/night_vision.mcfunction +1 -0
  146. package/dist/data/capture_the_flag/function/place_flags.mcfunction +2 -0
  147. package/dist/data/capture_the_flag/function/portal_effect.mcfunction +1 -0
  148. package/dist/data/capture_the_flag/function/regen.mcfunction +1 -0
  149. package/dist/data/capture_the_flag/function/remove_from_teams.mcfunction +3 -0
  150. package/dist/data/capture_the_flag/function/remove_item.mcfunction +1 -0
  151. package/dist/data/capture_the_flag/function/resistance.mcfunction +1 -0
  152. package/dist/data/capture_the_flag/function/set_day.mcfunction +1 -0
  153. package/dist/data/capture_the_flag/function/set_easy.mcfunction +1 -0
  154. package/dist/data/capture_the_flag/function/set_hard.mcfunction +1 -0
  155. package/dist/data/capture_the_flag/function/set_midnight.mcfunction +1 -0
  156. package/dist/data/capture_the_flag/function/set_night.mcfunction +1 -0
  157. package/dist/data/capture_the_flag/function/set_noon.mcfunction +1 -0
  158. package/dist/data/capture_the_flag/function/set_normal.mcfunction +1 -0
  159. package/dist/data/capture_the_flag/function/set_peaceful.mcfunction +1 -0
  160. package/dist/data/capture_the_flag/function/setup_four_teams.mcfunction +4 -0
  161. package/dist/data/capture_the_flag/function/setup_two_teams.mcfunction +2 -0
  162. package/dist/data/capture_the_flag/function/slow_fall.mcfunction +1 -0
  163. package/dist/data/capture_the_flag/function/smoke.mcfunction +1 -0
  164. package/dist/data/capture_the_flag/function/sparkles_at.mcfunction +1 -0
  165. package/dist/data/capture_the_flag/function/speed.mcfunction +1 -0
  166. package/dist/data/capture_the_flag/function/start_game.mcfunction +15 -0
  167. package/dist/data/capture_the_flag/function/start_game__foreach_t10.mcfunction +4 -0
  168. package/dist/data/capture_the_flag/function/strength.mcfunction +1 -0
  169. package/dist/data/capture_the_flag/function/totem_at.mcfunction +1 -0
  170. package/dist/data/capture_the_flag/function/weather_clear.mcfunction +1 -0
  171. package/dist/data/capture_the_flag/function/weather_rain.mcfunction +1 -0
  172. package/dist/data/capture_the_flag/function/weather_thunder.mcfunction +1 -0
  173. package/dist/data/counter/function/__load.mcfunction +5 -0
  174. package/dist/data/counter/function/__tick.mcfunction +2 -0
  175. package/dist/data/counter/function/counter_tick/merge_2.mcfunction +1 -0
  176. package/dist/data/counter/function/counter_tick/then_0.mcfunction +3 -0
  177. package/dist/data/counter/function/counter_tick.mcfunction +11 -0
  178. package/dist/data/gcd2/function/__load.mcfunction +3 -0
  179. package/dist/data/gcd2/function/abs/merge_2.mcfunction +3 -0
  180. package/dist/data/gcd2/function/abs/then_0.mcfunction +5 -0
  181. package/dist/data/gcd2/function/abs.mcfunction +7 -0
  182. package/dist/data/gcd2/function/gcd/loop_body_1.mcfunction +7 -0
  183. package/dist/data/gcd2/function/gcd/loop_check_0.mcfunction +5 -0
  184. package/dist/data/gcd2/function/gcd/loop_exit_2.mcfunction +3 -0
  185. package/dist/data/gcd2/function/gcd.mcfunction +14 -0
  186. package/dist/data/gcd3/function/__load.mcfunction +3 -0
  187. package/dist/data/gcd3/function/abs/merge_2.mcfunction +3 -0
  188. package/dist/data/gcd3/function/abs/then_0.mcfunction +5 -0
  189. package/dist/data/gcd3/function/abs.mcfunction +7 -0
  190. package/dist/data/gcd3/function/gcd/loop_body_1.mcfunction +7 -0
  191. package/dist/data/gcd3/function/gcd/loop_check_0.mcfunction +5 -0
  192. package/dist/data/gcd3/function/gcd/loop_exit_2.mcfunction +3 -0
  193. package/dist/data/gcd3/function/gcd.mcfunction +14 -0
  194. package/dist/data/gcd3/function/test.mcfunction +7 -0
  195. package/dist/data/gcd3nm/function/__load.mcfunction +3 -0
  196. package/dist/data/gcd3nm/function/abs/merge_2.mcfunction +3 -0
  197. package/dist/data/gcd3nm/function/abs/then_0.mcfunction +5 -0
  198. package/dist/data/gcd3nm/function/abs.mcfunction +7 -0
  199. package/dist/data/gcd3nm/function/gcd/loop_body_1.mcfunction +7 -0
  200. package/dist/data/gcd3nm/function/gcd/loop_check_0.mcfunction +5 -0
  201. package/dist/data/gcd3nm/function/gcd/loop_exit_2.mcfunction +3 -0
  202. package/dist/data/gcd3nm/function/gcd.mcfunction +14 -0
  203. package/dist/data/gcd3nm/function/test.mcfunction +7 -0
  204. package/dist/data/gcd_test/function/__load.mcfunction +3 -0
  205. package/dist/data/gcd_test/function/abs/merge_2.mcfunction +3 -0
  206. package/dist/data/gcd_test/function/abs/then_0.mcfunction +5 -0
  207. package/dist/data/gcd_test/function/abs.mcfunction +7 -0
  208. package/dist/data/gcd_test/function/gcd/loop_body_1.mcfunction +7 -0
  209. package/dist/data/gcd_test/function/gcd/loop_check_0.mcfunction +5 -0
  210. package/dist/data/gcd_test/function/gcd/loop_exit_2.mcfunction +3 -0
  211. package/dist/data/gcd_test/function/gcd.mcfunction +14 -0
  212. package/dist/data/hunger_games/function/angry_at.mcfunction +1 -0
  213. package/dist/data/hunger_games/function/barrier_wall.mcfunction +1 -0
  214. package/dist/data/hunger_games/function/buff_all.mcfunction +22 -0
  215. package/dist/data/hunger_games/function/check_alive.mcfunction +3 -0
  216. package/dist/data/hunger_games/function/check_alive__foreach_t3.mcfunction +10 -0
  217. package/dist/data/hunger_games/function/check_alive__foreach_t3__merge_1.mcfunction +1 -0
  218. package/dist/data/hunger_games/function/check_alive__foreach_t3__then_0.mcfunction +5 -0
  219. package/dist/data/hunger_games/function/check_border_damage.mcfunction +1 -0
  220. package/dist/data/hunger_games/function/check_border_damage__foreach_t0.mcfunction +1 -0
  221. package/dist/data/hunger_games/function/clear_area.mcfunction +1 -0
  222. package/dist/data/hunger_games/function/clear_effect.mcfunction +1 -0
  223. package/dist/data/hunger_games/function/clear_effects.mcfunction +1 -0
  224. package/dist/data/hunger_games/function/countdown_tick.mcfunction +1 -0
  225. package/dist/data/hunger_games/function/create_health_bar.mcfunction +24 -0
  226. package/dist/data/hunger_games/function/create_progress_bar.mcfunction +24 -0
  227. package/dist/data/hunger_games/function/create_progress_bar__const_0_0_0.mcfunction +21 -0
  228. package/dist/data/hunger_games/function/create_timer_bar.mcfunction +30 -0
  229. package/dist/data/hunger_games/function/declare_winner.mcfunction +13 -0
  230. package/dist/data/hunger_games/function/disable_fire_spread.mcfunction +1 -0
  231. package/dist/data/hunger_games/function/disable_keep_inventory.mcfunction +1 -0
  232. package/dist/data/hunger_games/function/disable_mob_griefing.mcfunction +1 -0
  233. package/dist/data/hunger_games/function/enable_keep_inventory.mcfunction +1 -0
  234. package/dist/data/hunger_games/function/end_game_no_winner.mcfunction +3 -0
  235. package/dist/data/hunger_games/function/end_sparkles_at.mcfunction +1 -0
  236. package/dist/data/hunger_games/function/explosion_effect.mcfunction +1 -0
  237. package/dist/data/hunger_games/function/flames.mcfunction +1 -0
  238. package/dist/data/hunger_games/function/game_tick.mcfunction +1 -0
  239. package/dist/data/hunger_games/function/glass_box.mcfunction +2 -0
  240. package/dist/data/hunger_games/function/glow.mcfunction +1 -0
  241. package/dist/data/hunger_games/function/happy_at.mcfunction +1 -0
  242. package/dist/data/hunger_games/function/hearts_at.mcfunction +1 -0
  243. package/dist/data/hunger_games/function/hide_bar.mcfunction +4 -0
  244. package/dist/data/hunger_games/function/init.mcfunction +7 -0
  245. package/dist/data/hunger_games/function/invisible.mcfunction +1 -0
  246. package/dist/data/hunger_games/function/jump.mcfunction +1 -0
  247. package/dist/data/hunger_games/function/load.mcfunction +1 -0
  248. package/dist/data/hunger_games/function/main_game_tick.mcfunction +4 -0
  249. package/dist/data/hunger_games/function/night_vision.mcfunction +1 -0
  250. package/dist/data/hunger_games/function/on_player_death.mcfunction +14 -0
  251. package/dist/data/hunger_games/function/portal_effect.mcfunction +1 -0
  252. package/dist/data/hunger_games/function/regen.mcfunction +1 -0
  253. package/dist/data/hunger_games/function/remove_bar.mcfunction +3 -0
  254. package/dist/data/hunger_games/function/remove_bar__const_0.mcfunction +2 -0
  255. package/dist/data/hunger_games/function/reset_game.mcfunction +3 -0
  256. package/dist/data/hunger_games/function/reset_game__foreach_t0.mcfunction +9 -0
  257. package/dist/data/hunger_games/function/resistance.mcfunction +1 -0
  258. package/dist/data/hunger_games/function/set_day.mcfunction +1 -0
  259. package/dist/data/hunger_games/function/set_easy.mcfunction +1 -0
  260. package/dist/data/hunger_games/function/set_hard.mcfunction +1 -0
  261. package/dist/data/hunger_games/function/set_midnight.mcfunction +1 -0
  262. package/dist/data/hunger_games/function/set_night.mcfunction +1 -0
  263. package/dist/data/hunger_games/function/set_noon.mcfunction +1 -0
  264. package/dist/data/hunger_games/function/set_normal.mcfunction +1 -0
  265. package/dist/data/hunger_games/function/set_peaceful.mcfunction +1 -0
  266. package/dist/data/hunger_games/function/show_bar.mcfunction +4 -0
  267. package/dist/data/hunger_games/function/shrink_border.mcfunction +1 -0
  268. package/dist/data/hunger_games/function/slow_fall.mcfunction +1 -0
  269. package/dist/data/hunger_games/function/smoke.mcfunction +1 -0
  270. package/dist/data/hunger_games/function/sparkles_at.mcfunction +1 -0
  271. package/dist/data/hunger_games/function/speed.mcfunction +1 -0
  272. package/dist/data/hunger_games/function/start_countdown.mcfunction +3 -0
  273. package/dist/data/hunger_games/function/start_countdown__foreach_t0.mcfunction +16 -0
  274. package/dist/data/hunger_games/function/start_game.mcfunction +4 -0
  275. package/dist/data/hunger_games/function/start_game__foreach_t3.mcfunction +4 -0
  276. package/dist/data/hunger_games/function/strength.mcfunction +1 -0
  277. package/dist/data/hunger_games/function/totem_at.mcfunction +1 -0
  278. package/dist/data/hunger_games/function/update_bar.mcfunction +5 -0
  279. package/dist/data/hunger_games/function/update_bar__const_0_0.mcfunction +3 -0
  280. package/dist/data/hunger_games/function/update_bar_color.mcfunction +7 -0
  281. package/dist/data/hunger_games/function/update_bar_color__else_2.mcfunction +5 -0
  282. package/dist/data/hunger_games/function/update_bar_color__else_5.mcfunction +4 -0
  283. package/dist/data/hunger_games/function/update_bar_color__merge_1.mcfunction +1 -0
  284. package/dist/data/hunger_games/function/update_bar_color__merge_4.mcfunction +1 -0
  285. package/dist/data/hunger_games/function/update_bar_color__then_0.mcfunction +4 -0
  286. package/dist/data/hunger_games/function/update_bar_color__then_3.mcfunction +4 -0
  287. package/dist/data/hunger_games/function/weather_clear.mcfunction +1 -0
  288. package/dist/data/hunger_games/function/weather_rain.mcfunction +1 -0
  289. package/dist/data/hunger_games/function/weather_thunder.mcfunction +1 -0
  290. package/dist/data/isqrttest/function/__load.mcfunction +6 -0
  291. package/dist/data/isqrttest/function/isqrt/loop_body_4.mcfunction +12 -0
  292. package/dist/data/isqrttest/function/isqrt/loop_check_3.mcfunction +5 -0
  293. package/dist/data/isqrttest/function/isqrt/loop_exit_5.mcfunction +3 -0
  294. package/dist/data/isqrttest/function/isqrt/merge_2.mcfunction +4 -0
  295. package/dist/data/isqrttest/function/isqrt/merge_8.mcfunction +6 -0
  296. package/dist/data/isqrttest/function/isqrt/then_0.mcfunction +3 -0
  297. package/dist/data/isqrttest/function/isqrt/then_6.mcfunction +3 -0
  298. package/dist/data/isqrttest/function/isqrt.mcfunction +7 -0
  299. package/dist/data/isqrttest/function/test.mcfunction +6 -0
  300. package/dist/data/macrotest/function/get_element.mcfunction +2 -0
  301. package/dist/data/macrotest/function/load.mcfunction +1 -0
  302. package/dist/data/macrotest/function/test_dynamic_index.mcfunction +2 -0
  303. package/dist/data/mathdemo/function/__load.mcfunction +2 -0
  304. package/dist/data/mathdemo/function/_atan_init.mcfunction +4 -0
  305. package/dist/data/mathdemo/function/_math_init.mcfunction +4 -0
  306. package/dist/data/mathdemo/function/add2d_x.mcfunction +5 -0
  307. package/dist/data/mathdemo/function/add2d_y.mcfunction +5 -0
  308. package/dist/data/mathdemo/function/add3d_x.mcfunction +5 -0
  309. package/dist/data/mathdemo/function/add3d_y.mcfunction +5 -0
  310. package/dist/data/mathdemo/function/add3d_z.mcfunction +5 -0
  311. package/dist/data/mathdemo/function/air_drag_fx.mcfunction +2 -0
  312. package/dist/data/mathdemo/function/apply_drag.mcfunction +8 -0
  313. package/dist/data/mathdemo/function/apply_gravity.mcfunction +6 -0
  314. package/dist/data/mathdemo/function/approx_eq.mcfunction +10 -0
  315. package/dist/data/mathdemo/function/approx_eq__merge_1.mcfunction +3 -0
  316. package/dist/data/mathdemo/function/approx_eq__merge_3.mcfunction +2 -0
  317. package/dist/data/mathdemo/function/approx_eq__then_0.mcfunction +4 -0
  318. package/dist/data/mathdemo/function/approx_eq__then_2.mcfunction +2 -0
  319. package/dist/data/mathdemo/function/atan2_fixed.mcfunction +6 -0
  320. package/dist/data/mathdemo/function/atan2_fixed__else_30.mcfunction +2 -0
  321. package/dist/data/mathdemo/function/atan2_fixed__loop_body_26.mcfunction +21 -0
  322. package/dist/data/mathdemo/function/atan2_fixed__loop_exit_27.mcfunction +5 -0
  323. package/dist/data/mathdemo/function/atan2_fixed__loop_header_25.mcfunction +3 -0
  324. package/dist/data/mathdemo/function/atan2_fixed__merge_1.mcfunction +4 -0
  325. package/dist/data/mathdemo/function/atan2_fixed__merge_10.mcfunction +5 -0
  326. package/dist/data/mathdemo/function/atan2_fixed__merge_12.mcfunction +2 -0
  327. package/dist/data/mathdemo/function/atan2_fixed__merge_16.mcfunction +5 -0
  328. package/dist/data/mathdemo/function/atan2_fixed__merge_18.mcfunction +4 -0
  329. package/dist/data/mathdemo/function/atan2_fixed__merge_20.mcfunction +4 -0
  330. package/dist/data/mathdemo/function/atan2_fixed__merge_22.mcfunction +4 -0
  331. package/dist/data/mathdemo/function/atan2_fixed__merge_24.mcfunction +3 -0
  332. package/dist/data/mathdemo/function/atan2_fixed__merge_29.mcfunction +1 -0
  333. package/dist/data/mathdemo/function/atan2_fixed__merge_3.mcfunction +4 -0
  334. package/dist/data/mathdemo/function/atan2_fixed__merge_32.mcfunction +4 -0
  335. package/dist/data/mathdemo/function/atan2_fixed__merge_34.mcfunction +4 -0
  336. package/dist/data/mathdemo/function/atan2_fixed__merge_36.mcfunction +3 -0
  337. package/dist/data/mathdemo/function/atan2_fixed__merge_40.mcfunction +3 -0
  338. package/dist/data/mathdemo/function/atan2_fixed__merge_6.mcfunction +2 -0
  339. package/dist/data/mathdemo/function/atan2_fixed__then_0.mcfunction +4 -0
  340. package/dist/data/mathdemo/function/atan2_fixed__then_11.mcfunction +2 -0
  341. package/dist/data/mathdemo/function/atan2_fixed__then_15.mcfunction +4 -0
  342. package/dist/data/mathdemo/function/atan2_fixed__then_17.mcfunction +4 -0
  343. package/dist/data/mathdemo/function/atan2_fixed__then_19.mcfunction +2 -0
  344. package/dist/data/mathdemo/function/atan2_fixed__then_2.mcfunction +2 -0
  345. package/dist/data/mathdemo/function/atan2_fixed__then_21.mcfunction +2 -0
  346. package/dist/data/mathdemo/function/atan2_fixed__then_23.mcfunction +5 -0
  347. package/dist/data/mathdemo/function/atan2_fixed__then_28.mcfunction +4 -0
  348. package/dist/data/mathdemo/function/atan2_fixed__then_31.mcfunction +4 -0
  349. package/dist/data/mathdemo/function/atan2_fixed__then_33.mcfunction +4 -0
  350. package/dist/data/mathdemo/function/atan2_fixed__then_35.mcfunction +1 -0
  351. package/dist/data/mathdemo/function/atan2_fixed__then_39.mcfunction +3 -0
  352. package/dist/data/mathdemo/function/atan2_fixed__then_5.mcfunction +2 -0
  353. package/dist/data/mathdemo/function/atan2_fixed__then_9.mcfunction +4 -0
  354. package/dist/data/mathdemo/function/bounce_v.mcfunction +10 -0
  355. package/dist/data/mathdemo/function/cbrt_fx.mcfunction +5 -0
  356. package/dist/data/mathdemo/function/cbrt_fx__loop_body_6.mcfunction +7 -0
  357. package/dist/data/mathdemo/function/cbrt_fx__loop_exit_7.mcfunction +1 -0
  358. package/dist/data/mathdemo/function/cbrt_fx__loop_header_5.mcfunction +4 -0
  359. package/dist/data/mathdemo/function/cbrt_fx__merge_1.mcfunction +8 -0
  360. package/dist/data/mathdemo/function/cbrt_fx__merge_11.mcfunction +5 -0
  361. package/dist/data/mathdemo/function/cbrt_fx__merge_13.mcfunction +4 -0
  362. package/dist/data/mathdemo/function/cbrt_fx__merge_4.mcfunction +2 -0
  363. package/dist/data/mathdemo/function/cbrt_fx__merge_9.mcfunction +13 -0
  364. package/dist/data/mathdemo/function/cbrt_fx__then_0.mcfunction +2 -0
  365. package/dist/data/mathdemo/function/cbrt_fx__then_10.mcfunction +2 -0
  366. package/dist/data/mathdemo/function/cbrt_fx__then_12.mcfunction +2 -0
  367. package/dist/data/mathdemo/function/cbrt_fx__then_3.mcfunction +2 -0
  368. package/dist/data/mathdemo/function/cbrt_fx__then_8.mcfunction +2 -0
  369. package/dist/data/mathdemo/function/ceil_div.mcfunction +9 -0
  370. package/dist/data/mathdemo/function/chebyshev.mcfunction +14 -0
  371. package/dist/data/mathdemo/function/chebyshev3d.mcfunction +19 -0
  372. package/dist/data/mathdemo/function/chebyshev3d__merge_1.mcfunction +4 -0
  373. package/dist/data/mathdemo/function/chebyshev3d__merge_3.mcfunction +4 -0
  374. package/dist/data/mathdemo/function/chebyshev3d__merge_5.mcfunction +4 -0
  375. package/dist/data/mathdemo/function/chebyshev3d__merge_7.mcfunction +3 -0
  376. package/dist/data/mathdemo/function/chebyshev3d__merge_9.mcfunction +1 -0
  377. package/dist/data/mathdemo/function/chebyshev3d__then_0.mcfunction +4 -0
  378. package/dist/data/mathdemo/function/chebyshev3d__then_2.mcfunction +4 -0
  379. package/dist/data/mathdemo/function/chebyshev3d__then_4.mcfunction +4 -0
  380. package/dist/data/mathdemo/function/chebyshev3d__then_6.mcfunction +2 -0
  381. package/dist/data/mathdemo/function/chebyshev3d__then_8.mcfunction +2 -0
  382. package/dist/data/mathdemo/function/chebyshev__merge_1.mcfunction +4 -0
  383. package/dist/data/mathdemo/function/chebyshev__merge_3.mcfunction +3 -0
  384. package/dist/data/mathdemo/function/chebyshev__merge_5.mcfunction +1 -0
  385. package/dist/data/mathdemo/function/chebyshev__then_0.mcfunction +4 -0
  386. package/dist/data/mathdemo/function/chebyshev__then_2.mcfunction +4 -0
  387. package/dist/data/mathdemo/function/chebyshev__then_4.mcfunction +1 -0
  388. package/dist/data/mathdemo/function/circular_x.mcfunction +14 -0
  389. package/dist/data/mathdemo/function/circular_z.mcfunction +14 -0
  390. package/dist/data/mathdemo/function/clamp_velocity.mcfunction +5 -0
  391. package/dist/data/mathdemo/function/clamp_velocity__merge_1.mcfunction +5 -0
  392. package/dist/data/mathdemo/function/clamp_velocity__merge_4.mcfunction +1 -0
  393. package/dist/data/mathdemo/function/clamp_velocity__then_0.mcfunction +1 -0
  394. package/dist/data/mathdemo/function/clamp_velocity__then_3.mcfunction +3 -0
  395. package/dist/data/mathdemo/function/combinations.mcfunction +6 -0
  396. package/dist/data/mathdemo/function/combinations__loop_body_9.mcfunction +15 -0
  397. package/dist/data/mathdemo/function/combinations__loop_exit_10.mcfunction +1 -0
  398. package/dist/data/mathdemo/function/combinations__loop_header_8.mcfunction +3 -0
  399. package/dist/data/mathdemo/function/combinations__merge_1.mcfunction +3 -0
  400. package/dist/data/mathdemo/function/combinations__merge_4.mcfunction +6 -0
  401. package/dist/data/mathdemo/function/combinations__merge_7.mcfunction +3 -0
  402. package/dist/data/mathdemo/function/combinations__then_0.mcfunction +2 -0
  403. package/dist/data/mathdemo/function/combinations__then_3.mcfunction +2 -0
  404. package/dist/data/mathdemo/function/combinations__then_6.mcfunction +4 -0
  405. package/dist/data/mathdemo/function/cos_fixed.mcfunction +7 -0
  406. package/dist/data/mathdemo/function/cross2d.mcfunction +11 -0
  407. package/dist/data/mathdemo/function/cross3d_x.mcfunction +11 -0
  408. package/dist/data/mathdemo/function/cross3d_y.mcfunction +11 -0
  409. package/dist/data/mathdemo/function/cross3d_z.mcfunction +11 -0
  410. package/dist/data/mathdemo/function/demo_easing.mcfunction +12 -0
  411. package/dist/data/mathdemo/function/demo_math.mcfunction +16 -0
  412. package/dist/data/mathdemo/function/demo_noise.mcfunction +14 -0
  413. package/dist/data/mathdemo/function/demo_physics.mcfunction +11 -0
  414. package/dist/data/mathdemo/function/demo_physics__loop_body_1.mcfunction +9 -0
  415. package/dist/data/mathdemo/function/demo_physics__loop_body_4.mcfunction +18 -0
  416. package/dist/data/mathdemo/function/demo_physics__loop_exit_2.mcfunction +6 -0
  417. package/dist/data/mathdemo/function/demo_physics__loop_exit_5.mcfunction +1 -0
  418. package/dist/data/mathdemo/function/demo_physics__loop_header_0.mcfunction +4 -0
  419. package/dist/data/mathdemo/function/demo_physics__loop_header_3.mcfunction +4 -0
  420. package/dist/data/mathdemo/function/distance2d_fixed.mcfunction +13 -0
  421. package/dist/data/mathdemo/function/distance3d_fixed.mcfunction +18 -0
  422. package/dist/data/mathdemo/function/divfix.mcfunction +6 -0
  423. package/dist/data/mathdemo/function/divfix__merge_1.mcfunction +6 -0
  424. package/dist/data/mathdemo/function/divfix__then_0.mcfunction +2 -0
  425. package/dist/data/mathdemo/function/dot2d.mcfunction +11 -0
  426. package/dist/data/mathdemo/function/dot3d.mcfunction +17 -0
  427. package/dist/data/mathdemo/function/ease_in_back.mcfunction +26 -0
  428. package/dist/data/mathdemo/function/ease_in_bounce.mcfunction +9 -0
  429. package/dist/data/mathdemo/function/ease_in_cubic.mcfunction +12 -0
  430. package/dist/data/mathdemo/function/ease_in_expo.mcfunction +5 -0
  431. package/dist/data/mathdemo/function/ease_in_expo__merge_1.mcfunction +11 -0
  432. package/dist/data/mathdemo/function/ease_in_expo__then_0.mcfunction +2 -0
  433. package/dist/data/mathdemo/function/ease_in_out_back.mcfunction +5 -0
  434. package/dist/data/mathdemo/function/ease_in_out_back__merge_1.mcfunction +14 -0
  435. package/dist/data/mathdemo/function/ease_in_out_back__then_0.mcfunction +10 -0
  436. package/dist/data/mathdemo/function/ease_in_out_bounce.mcfunction +5 -0
  437. package/dist/data/mathdemo/function/ease_in_out_bounce__merge_1.mcfunction +14 -0
  438. package/dist/data/mathdemo/function/ease_in_out_bounce__then_0.mcfunction +10 -0
  439. package/dist/data/mathdemo/function/ease_in_out_cubic.mcfunction +5 -0
  440. package/dist/data/mathdemo/function/ease_in_out_cubic__merge_1.mcfunction +17 -0
  441. package/dist/data/mathdemo/function/ease_in_out_cubic__then_0.mcfunction +13 -0
  442. package/dist/data/mathdemo/function/ease_in_out_quad.mcfunction +5 -0
  443. package/dist/data/mathdemo/function/ease_in_out_quad__merge_1.mcfunction +12 -0
  444. package/dist/data/mathdemo/function/ease_in_out_quad__then_0.mcfunction +8 -0
  445. package/dist/data/mathdemo/function/ease_in_out_sine.mcfunction +5 -0
  446. package/dist/data/mathdemo/function/ease_in_out_sine__merge_1.mcfunction +14 -0
  447. package/dist/data/mathdemo/function/ease_in_out_sine__then_0.mcfunction +10 -0
  448. package/dist/data/mathdemo/function/ease_in_quad.mcfunction +7 -0
  449. package/dist/data/mathdemo/function/ease_in_quad__const_5000.mcfunction +5 -0
  450. package/dist/data/mathdemo/function/ease_in_quart.mcfunction +12 -0
  451. package/dist/data/mathdemo/function/ease_in_sine.mcfunction +30 -0
  452. package/dist/data/mathdemo/function/ease_linear.mcfunction +2 -0
  453. package/dist/data/mathdemo/function/ease_linear__const_5000.mcfunction +2 -0
  454. package/dist/data/mathdemo/function/ease_out_back.mcfunction +9 -0
  455. package/dist/data/mathdemo/function/ease_out_back__const_5000.mcfunction +7 -0
  456. package/dist/data/mathdemo/function/ease_out_bounce.mcfunction +6 -0
  457. package/dist/data/mathdemo/function/ease_out_bounce__merge_1.mcfunction +4 -0
  458. package/dist/data/mathdemo/function/ease_out_bounce__merge_4.mcfunction +4 -0
  459. package/dist/data/mathdemo/function/ease_out_bounce__merge_7.mcfunction +15 -0
  460. package/dist/data/mathdemo/function/ease_out_bounce__then_0.mcfunction +11 -0
  461. package/dist/data/mathdemo/function/ease_out_bounce__then_3.mcfunction +15 -0
  462. package/dist/data/mathdemo/function/ease_out_bounce__then_6.mcfunction +15 -0
  463. package/dist/data/mathdemo/function/ease_out_cubic.mcfunction +16 -0
  464. package/dist/data/mathdemo/function/ease_out_cubic__const_5000.mcfunction +14 -0
  465. package/dist/data/mathdemo/function/ease_out_expo.mcfunction +5 -0
  466. package/dist/data/mathdemo/function/ease_out_expo__merge_1.mcfunction +8 -0
  467. package/dist/data/mathdemo/function/ease_out_expo__then_0.mcfunction +2 -0
  468. package/dist/data/mathdemo/function/ease_out_quad.mcfunction +11 -0
  469. package/dist/data/mathdemo/function/ease_out_quart.mcfunction +16 -0
  470. package/dist/data/mathdemo/function/ease_out_sine.mcfunction +9 -0
  471. package/dist/data/mathdemo/function/ease_smooth.mcfunction +23 -0
  472. package/dist/data/mathdemo/function/ease_smoother.mcfunction +41 -0
  473. package/dist/data/mathdemo/function/exp_fx.mcfunction +16 -0
  474. package/dist/data/mathdemo/function/exp_fx__loop_body_10.mcfunction +8 -0
  475. package/dist/data/mathdemo/function/exp_fx__loop_body_5.mcfunction +8 -0
  476. package/dist/data/mathdemo/function/exp_fx__loop_exit_11.mcfunction +1 -0
  477. package/dist/data/mathdemo/function/exp_fx__loop_exit_6.mcfunction +1 -0
  478. package/dist/data/mathdemo/function/exp_fx__loop_header_4.mcfunction +3 -0
  479. package/dist/data/mathdemo/function/exp_fx__loop_header_9.mcfunction +3 -0
  480. package/dist/data/mathdemo/function/exp_fx__merge_1.mcfunction +47 -0
  481. package/dist/data/mathdemo/function/exp_fx__merge_3.mcfunction +4 -0
  482. package/dist/data/mathdemo/function/exp_fx__merge_8.mcfunction +1 -0
  483. package/dist/data/mathdemo/function/exp_fx__then_0.mcfunction +7 -0
  484. package/dist/data/mathdemo/function/exp_fx__then_2.mcfunction +2 -0
  485. package/dist/data/mathdemo/function/exp_fx__then_7.mcfunction +5 -0
  486. package/dist/data/mathdemo/function/factorial.mcfunction +5 -0
  487. package/dist/data/mathdemo/function/factorial__loop_body_4.mcfunction +7 -0
  488. package/dist/data/mathdemo/function/factorial__loop_exit_5.mcfunction +1 -0
  489. package/dist/data/mathdemo/function/factorial__loop_header_3.mcfunction +3 -0
  490. package/dist/data/mathdemo/function/factorial__merge_1.mcfunction +3 -0
  491. package/dist/data/mathdemo/function/factorial__then_0.mcfunction +2 -0
  492. package/dist/data/mathdemo/function/fbm_1d.mcfunction +9 -0
  493. package/dist/data/mathdemo/function/fbm_1d__loop_body_1.mcfunction +33 -0
  494. package/dist/data/mathdemo/function/fbm_1d__loop_exit_2.mcfunction +4 -0
  495. package/dist/data/mathdemo/function/fbm_1d__loop_header_0.mcfunction +3 -0
  496. package/dist/data/mathdemo/function/fbm_1d__merge_4.mcfunction +6 -0
  497. package/dist/data/mathdemo/function/fbm_1d__then_3.mcfunction +2 -0
  498. package/dist/data/mathdemo/function/fbm_2d.mcfunction +10 -0
  499. package/dist/data/mathdemo/function/fbm_2d__loop_body_1.mcfunction +39 -0
  500. package/dist/data/mathdemo/function/fbm_2d__loop_exit_2.mcfunction +4 -0
  501. package/dist/data/mathdemo/function/fbm_2d__loop_header_0.mcfunction +3 -0
  502. package/dist/data/mathdemo/function/fbm_2d__merge_4.mcfunction +6 -0
  503. package/dist/data/mathdemo/function/fbm_2d__then_3.mcfunction +2 -0
  504. package/dist/data/mathdemo/function/friction_decel.mcfunction +5 -0
  505. package/dist/data/mathdemo/function/friction_decel__merge_1.mcfunction +5 -0
  506. package/dist/data/mathdemo/function/friction_decel__merge_4.mcfunction +2 -0
  507. package/dist/data/mathdemo/function/friction_decel__then_0.mcfunction +3 -0
  508. package/dist/data/mathdemo/function/friction_decel__then_3.mcfunction +3 -0
  509. package/dist/data/mathdemo/function/gamma_int.mcfunction +5 -0
  510. package/dist/data/mathdemo/function/gamma_int__merge_1.mcfunction +6 -0
  511. package/dist/data/mathdemo/function/gamma_int__then_0.mcfunction +2 -0
  512. package/dist/data/mathdemo/function/gcd.mcfunction +7 -0
  513. package/dist/data/mathdemo/function/gcd__loop_body_5.mcfunction +5 -0
  514. package/dist/data/mathdemo/function/gcd__loop_exit_6.mcfunction +1 -0
  515. package/dist/data/mathdemo/function/gcd__loop_header_4.mcfunction +4 -0
  516. package/dist/data/mathdemo/function/gcd__merge_1.mcfunction +5 -0
  517. package/dist/data/mathdemo/function/gcd__merge_3.mcfunction +1 -0
  518. package/dist/data/mathdemo/function/gcd__then_0.mcfunction +4 -0
  519. package/dist/data/mathdemo/function/gcd__then_2.mcfunction +4 -0
  520. package/dist/data/mathdemo/function/gravity_fx.mcfunction +2 -0
  521. package/dist/data/mathdemo/function/hash_1d.mcfunction +15 -0
  522. package/dist/data/mathdemo/function/hash_1d_pos.mcfunction +9 -0
  523. package/dist/data/mathdemo/function/hash_1d_pos__merge_1.mcfunction +4 -0
  524. package/dist/data/mathdemo/function/hash_1d_pos__then_0.mcfunction +4 -0
  525. package/dist/data/mathdemo/function/hash_2d.mcfunction +11 -0
  526. package/dist/data/mathdemo/function/hash_2d_pos.mcfunction +11 -0
  527. package/dist/data/mathdemo/function/hash_2d_pos__merge_1.mcfunction +4 -0
  528. package/dist/data/mathdemo/function/hash_2d_pos__then_0.mcfunction +4 -0
  529. package/dist/data/mathdemo/function/impact_velocity.mcfunction +5 -0
  530. package/dist/data/mathdemo/function/impact_velocity__merge_1.mcfunction +16 -0
  531. package/dist/data/mathdemo/function/impact_velocity__then_0.mcfunction +2 -0
  532. package/dist/data/mathdemo/function/is_grounded.mcfunction +5 -0
  533. package/dist/data/mathdemo/function/is_grounded__merge_1.mcfunction +2 -0
  534. package/dist/data/mathdemo/function/is_grounded__then_0.mcfunction +2 -0
  535. package/dist/data/mathdemo/function/isqrt.mcfunction +5 -0
  536. package/dist/data/mathdemo/function/isqrt__loop_body_10.mcfunction +8 -0
  537. package/dist/data/mathdemo/function/isqrt__loop_body_13.mcfunction +11 -0
  538. package/dist/data/mathdemo/function/isqrt__loop_body_7.mcfunction +8 -0
  539. package/dist/data/mathdemo/function/isqrt__loop_exit_11.mcfunction +2 -0
  540. package/dist/data/mathdemo/function/isqrt__loop_exit_14.mcfunction +1 -0
  541. package/dist/data/mathdemo/function/isqrt__loop_exit_8.mcfunction +9 -0
  542. package/dist/data/mathdemo/function/isqrt__loop_header_12.mcfunction +4 -0
  543. package/dist/data/mathdemo/function/isqrt__loop_header_6.mcfunction +4 -0
  544. package/dist/data/mathdemo/function/isqrt__loop_header_9.mcfunction +3 -0
  545. package/dist/data/mathdemo/function/isqrt__merge_1.mcfunction +4 -0
  546. package/dist/data/mathdemo/function/isqrt__merge_16.mcfunction +5 -0
  547. package/dist/data/mathdemo/function/isqrt__merge_4.mcfunction +3 -0
  548. package/dist/data/mathdemo/function/isqrt__then_0.mcfunction +2 -0
  549. package/dist/data/mathdemo/function/isqrt__then_15.mcfunction +1 -0
  550. package/dist/data/mathdemo/function/isqrt__then_3.mcfunction +2 -0
  551. package/dist/data/mathdemo/function/lcm.mcfunction +11 -0
  552. package/dist/data/mathdemo/function/lcm__merge_1.mcfunction +5 -0
  553. package/dist/data/mathdemo/function/lcm__then_0.mcfunction +2 -0
  554. package/dist/data/mathdemo/function/length2d_fixed.mcfunction +15 -0
  555. package/dist/data/mathdemo/function/length3d_fixed.mcfunction +20 -0
  556. package/dist/data/mathdemo/function/lerp.mcfunction +13 -0
  557. package/dist/data/mathdemo/function/lerp2d_x.mcfunction +13 -0
  558. package/dist/data/mathdemo/function/lerp2d_y.mcfunction +13 -0
  559. package/dist/data/mathdemo/function/ln.mcfunction +9 -0
  560. package/dist/data/mathdemo/function/ln__loop_body_1.mcfunction +8 -0
  561. package/dist/data/mathdemo/function/ln__loop_body_4.mcfunction +8 -0
  562. package/dist/data/mathdemo/function/ln__loop_exit_2.mcfunction +1 -0
  563. package/dist/data/mathdemo/function/ln__loop_exit_5.mcfunction +37 -0
  564. package/dist/data/mathdemo/function/ln__loop_header_0.mcfunction +3 -0
  565. package/dist/data/mathdemo/function/ln__loop_header_3.mcfunction +6 -0
  566. package/dist/data/mathdemo/function/load.mcfunction +1 -0
  567. package/dist/data/mathdemo/function/log10_fx.mcfunction +11 -0
  568. package/dist/data/mathdemo/function/log2_fx.mcfunction +11 -0
  569. package/dist/data/mathdemo/function/log2_int.mcfunction +5 -0
  570. package/dist/data/mathdemo/function/log2_int__loop_body_4.mcfunction +8 -0
  571. package/dist/data/mathdemo/function/log2_int__loop_exit_5.mcfunction +1 -0
  572. package/dist/data/mathdemo/function/log2_int__loop_header_3.mcfunction +4 -0
  573. package/dist/data/mathdemo/function/log2_int__merge_1.mcfunction +3 -0
  574. package/dist/data/mathdemo/function/log2_int__then_0.mcfunction +2 -0
  575. package/dist/data/mathdemo/function/loga_fx.mcfunction +10 -0
  576. package/dist/data/mathdemo/function/loga_fx__merge_1.mcfunction +9 -0
  577. package/dist/data/mathdemo/function/loga_fx__then_0.mcfunction +2 -0
  578. package/dist/data/mathdemo/function/manhattan.mcfunction +14 -0
  579. package/dist/data/mathdemo/function/manhattan3d.mcfunction +19 -0
  580. package/dist/data/mathdemo/function/manhattan3d__merge_1.mcfunction +4 -0
  581. package/dist/data/mathdemo/function/manhattan3d__merge_3.mcfunction +4 -0
  582. package/dist/data/mathdemo/function/manhattan3d__merge_5.mcfunction +5 -0
  583. package/dist/data/mathdemo/function/manhattan3d__then_0.mcfunction +4 -0
  584. package/dist/data/mathdemo/function/manhattan3d__then_2.mcfunction +4 -0
  585. package/dist/data/mathdemo/function/manhattan3d__then_4.mcfunction +4 -0
  586. package/dist/data/mathdemo/function/manhattan__merge_1.mcfunction +4 -0
  587. package/dist/data/mathdemo/function/manhattan__merge_3.mcfunction +3 -0
  588. package/dist/data/mathdemo/function/manhattan__then_0.mcfunction +4 -0
  589. package/dist/data/mathdemo/function/manhattan__then_2.mcfunction +4 -0
  590. package/dist/data/mathdemo/function/map.mcfunction +12 -0
  591. package/dist/data/mathdemo/function/map__merge_1.mcfunction +11 -0
  592. package/dist/data/mathdemo/function/map__then_0.mcfunction +1 -0
  593. package/dist/data/mathdemo/function/mulfix.mcfunction +8 -0
  594. package/dist/data/mathdemo/function/neg2d_x.mcfunction +4 -0
  595. package/dist/data/mathdemo/function/neg2d_y.mcfunction +4 -0
  596. package/dist/data/mathdemo/function/neg3d_x.mcfunction +4 -0
  597. package/dist/data/mathdemo/function/neg3d_y.mcfunction +4 -0
  598. package/dist/data/mathdemo/function/neg3d_z.mcfunction +4 -0
  599. package/dist/data/mathdemo/function/normalize2d_x.mcfunction +11 -0
  600. package/dist/data/mathdemo/function/normalize2d_x__merge_1.mcfunction +6 -0
  601. package/dist/data/mathdemo/function/normalize2d_x__then_0.mcfunction +2 -0
  602. package/dist/data/mathdemo/function/normalize2d_y.mcfunction +11 -0
  603. package/dist/data/mathdemo/function/normalize2d_y__merge_1.mcfunction +6 -0
  604. package/dist/data/mathdemo/function/normalize2d_y__then_0.mcfunction +2 -0
  605. package/dist/data/mathdemo/function/pow_int.mcfunction +6 -0
  606. package/dist/data/mathdemo/function/pow_int__loop_body_4.mcfunction +7 -0
  607. package/dist/data/mathdemo/function/pow_int__loop_exit_5.mcfunction +1 -0
  608. package/dist/data/mathdemo/function/pow_int__loop_header_3.mcfunction +4 -0
  609. package/dist/data/mathdemo/function/pow_int__merge_1.mcfunction +4 -0
  610. package/dist/data/mathdemo/function/pow_int__merge_7.mcfunction +8 -0
  611. package/dist/data/mathdemo/function/pow_int__then_0.mcfunction +2 -0
  612. package/dist/data/mathdemo/function/pow_int__then_6.mcfunction +4 -0
  613. package/dist/data/mathdemo/function/projectile_land_t.mcfunction +5 -0
  614. package/dist/data/mathdemo/function/projectile_land_t__merge_1.mcfunction +7 -0
  615. package/dist/data/mathdemo/function/projectile_land_t__then_0.mcfunction +2 -0
  616. package/dist/data/mathdemo/function/projectile_max_height.mcfunction +10 -0
  617. package/dist/data/mathdemo/function/projectile_max_height__const_200.mcfunction +8 -0
  618. package/dist/data/mathdemo/function/projectile_vy.mcfunction +9 -0
  619. package/dist/data/mathdemo/function/projectile_x.mcfunction +8 -0
  620. package/dist/data/mathdemo/function/projectile_y.mcfunction +19 -0
  621. package/dist/data/mathdemo/function/quadratic_disc.mcfunction +12 -0
  622. package/dist/data/mathdemo/function/quadratic_x1.mcfunction +7 -0
  623. package/dist/data/mathdemo/function/quadratic_x1__merge_1.mcfunction +13 -0
  624. package/dist/data/mathdemo/function/quadratic_x1__merge_4.mcfunction +15 -0
  625. package/dist/data/mathdemo/function/quadratic_x1__then_0.mcfunction +2 -0
  626. package/dist/data/mathdemo/function/quadratic_x1__then_3.mcfunction +2 -0
  627. package/dist/data/mathdemo/function/quadratic_x2.mcfunction +7 -0
  628. package/dist/data/mathdemo/function/quadratic_x2__merge_1.mcfunction +13 -0
  629. package/dist/data/mathdemo/function/quadratic_x2__merge_4.mcfunction +15 -0
  630. package/dist/data/mathdemo/function/quadratic_x2__then_0.mcfunction +2 -0
  631. package/dist/data/mathdemo/function/quadratic_x2__then_3.mcfunction +2 -0
  632. package/dist/data/mathdemo/function/rotate2d_x.mcfunction +20 -0
  633. package/dist/data/mathdemo/function/rotate2d_y.mcfunction +20 -0
  634. package/dist/data/mathdemo/function/scale2d_x.mcfunction +8 -0
  635. package/dist/data/mathdemo/function/scale2d_y.mcfunction +8 -0
  636. package/dist/data/mathdemo/function/scale3d_x.mcfunction +8 -0
  637. package/dist/data/mathdemo/function/scale3d_y.mcfunction +8 -0
  638. package/dist/data/mathdemo/function/scale3d_z.mcfunction +8 -0
  639. package/dist/data/mathdemo/function/sign.mcfunction +5 -0
  640. package/dist/data/mathdemo/function/sign__merge_1.mcfunction +4 -0
  641. package/dist/data/mathdemo/function/sign__merge_4.mcfunction +2 -0
  642. package/dist/data/mathdemo/function/sign__then_0.mcfunction +2 -0
  643. package/dist/data/mathdemo/function/sign__then_3.mcfunction +2 -0
  644. package/dist/data/mathdemo/function/sin_fixed.mcfunction +9 -0
  645. package/dist/data/mathdemo/function/sin_fixed__merge_1.mcfunction +4 -0
  646. package/dist/data/mathdemo/function/sin_fixed__merge_3.mcfunction +4 -0
  647. package/dist/data/mathdemo/function/sin_fixed__merge_6.mcfunction +4 -0
  648. package/dist/data/mathdemo/function/sin_fixed__merge_9.mcfunction +10 -0
  649. package/dist/data/mathdemo/function/sin_fixed__then_0.mcfunction +4 -0
  650. package/dist/data/mathdemo/function/sin_fixed__then_2.mcfunction +6 -0
  651. package/dist/data/mathdemo/function/sin_fixed__then_5.mcfunction +8 -0
  652. package/dist/data/mathdemo/function/sin_fixed__then_8.mcfunction +10 -0
  653. package/dist/data/mathdemo/function/smootherstep.mcfunction +10 -0
  654. package/dist/data/mathdemo/function/smootherstep__merge_1.mcfunction +12 -0
  655. package/dist/data/mathdemo/function/smootherstep__merge_4.mcfunction +4 -0
  656. package/dist/data/mathdemo/function/smootherstep__merge_6.mcfunction +27 -0
  657. package/dist/data/mathdemo/function/smootherstep__then_0.mcfunction +2 -0
  658. package/dist/data/mathdemo/function/smootherstep__then_3.mcfunction +2 -0
  659. package/dist/data/mathdemo/function/smootherstep__then_5.mcfunction +2 -0
  660. package/dist/data/mathdemo/function/smoothstep.mcfunction +10 -0
  661. package/dist/data/mathdemo/function/smoothstep__merge_1.mcfunction +12 -0
  662. package/dist/data/mathdemo/function/smoothstep__merge_4.mcfunction +4 -0
  663. package/dist/data/mathdemo/function/smoothstep__merge_6.mcfunction +15 -0
  664. package/dist/data/mathdemo/function/smoothstep__then_0.mcfunction +2 -0
  665. package/dist/data/mathdemo/function/smoothstep__then_3.mcfunction +2 -0
  666. package/dist/data/mathdemo/function/smoothstep__then_5.mcfunction +2 -0
  667. package/dist/data/mathdemo/function/solve2x2_x.mcfunction +17 -0
  668. package/dist/data/mathdemo/function/solve2x2_x__merge_1.mcfunction +12 -0
  669. package/dist/data/mathdemo/function/solve2x2_x__then_0.mcfunction +2 -0
  670. package/dist/data/mathdemo/function/solve2x2_y.mcfunction +17 -0
  671. package/dist/data/mathdemo/function/solve2x2_y__merge_1.mcfunction +12 -0
  672. package/dist/data/mathdemo/function/solve2x2_y__then_0.mcfunction +2 -0
  673. package/dist/data/mathdemo/function/spring_force.mcfunction +11 -0
  674. package/dist/data/mathdemo/function/spring_update_v.mcfunction +18 -0
  675. package/dist/data/mathdemo/function/sqrt_fixed.mcfunction +8 -0
  676. package/dist/data/mathdemo/function/sqrt_fx.mcfunction +11 -0
  677. package/dist/data/mathdemo/function/sqrt_fx__const_20000.mcfunction +8 -0
  678. package/dist/data/mathdemo/function/start.mcfunction +6 -0
  679. package/dist/data/mathdemo/function/sub2d_x.mcfunction +5 -0
  680. package/dist/data/mathdemo/function/sub2d_y.mcfunction +5 -0
  681. package/dist/data/mathdemo/function/sub3d_x.mcfunction +5 -0
  682. package/dist/data/mathdemo/function/sub3d_y.mcfunction +5 -0
  683. package/dist/data/mathdemo/function/sub3d_z.mcfunction +5 -0
  684. package/dist/data/mathdemo/function/terrain_height.mcfunction +24 -0
  685. package/dist/data/mathdemo/function/terrain_height__const_0_0_64_20.mcfunction +17 -0
  686. package/dist/data/mathdemo/function/terrain_height__const_10_5_64_20.mcfunction +17 -0
  687. package/dist/data/mathdemo/function/update_pos.mcfunction +5 -0
  688. package/dist/data/mathdemo/function/value_noise_1d.mcfunction +13 -0
  689. package/dist/data/mathdemo/function/value_noise_1d__merge_1.mcfunction +39 -0
  690. package/dist/data/mathdemo/function/value_noise_1d__then_0.mcfunction +7 -0
  691. package/dist/data/mathdemo/function/value_noise_2d.mcfunction +14 -0
  692. package/dist/data/mathdemo/function/value_noise_2d__merge_1.mcfunction +12 -0
  693. package/dist/data/mathdemo/function/value_noise_2d__merge_3.mcfunction +98 -0
  694. package/dist/data/mathdemo/function/value_noise_2d__then_0.mcfunction +7 -0
  695. package/dist/data/mathdemo/function/value_noise_2d__then_2.mcfunction +7 -0
  696. package/dist/data/mathdemo/function/water_drag_fx.mcfunction +2 -0
  697. package/dist/data/mathtest/function/__load.mcfunction +3 -0
  698. package/dist/data/mathtest/function/abs/merge_2.mcfunction +3 -0
  699. package/dist/data/mathtest/function/abs/then_0.mcfunction +5 -0
  700. package/dist/data/mathtest/function/abs.mcfunction +6 -0
  701. package/dist/data/mathtest/function/test.mcfunction +5 -0
  702. package/dist/data/minecraft/tags/function/load.json +6 -0
  703. package/dist/data/minecraft/tags/function/tick.json +5 -0
  704. package/dist/data/mypack/function/__load.mcfunction +13 -0
  705. package/dist/data/mypack/function/_atan_init.mcfunction +2 -0
  706. package/dist/data/mypack/function/abs/merge_2.mcfunction +3 -0
  707. package/dist/data/mypack/function/abs/then_0.mcfunction +5 -0
  708. package/dist/data/mypack/function/abs.mcfunction +6 -0
  709. package/dist/data/mypack/function/atan2_fixed/__sgi_1.mcfunction +2 -0
  710. package/dist/data/mypack/function/atan2_fixed/else_34.mcfunction +3 -0
  711. package/dist/data/mypack/function/atan2_fixed/loop_body_31.mcfunction +19 -0
  712. package/dist/data/mypack/function/atan2_fixed/loop_check_30.mcfunction +5 -0
  713. package/dist/data/mypack/function/atan2_fixed/loop_exit_32.mcfunction +6 -0
  714. package/dist/data/mypack/function/atan2_fixed/merge_11.mcfunction +6 -0
  715. package/dist/data/mypack/function/atan2_fixed/merge_14.mcfunction +3 -0
  716. package/dist/data/mypack/function/atan2_fixed/merge_17.mcfunction +6 -0
  717. package/dist/data/mypack/function/atan2_fixed/merge_2.mcfunction +5 -0
  718. package/dist/data/mypack/function/atan2_fixed/merge_20.mcfunction +5 -0
  719. package/dist/data/mypack/function/atan2_fixed/merge_23.mcfunction +5 -0
  720. package/dist/data/mypack/function/atan2_fixed/merge_26.mcfunction +6 -0
  721. package/dist/data/mypack/function/atan2_fixed/merge_29.mcfunction +4 -0
  722. package/dist/data/mypack/function/atan2_fixed/merge_38.mcfunction +5 -0
  723. package/dist/data/mypack/function/atan2_fixed/merge_41.mcfunction +5 -0
  724. package/dist/data/mypack/function/atan2_fixed/merge_44.mcfunction +5 -0
  725. package/dist/data/mypack/function/atan2_fixed/merge_47.mcfunction +5 -0
  726. package/dist/data/mypack/function/atan2_fixed/merge_5.mcfunction +5 -0
  727. package/dist/data/mypack/function/atan2_fixed/merge_8.mcfunction +3 -0
  728. package/dist/data/mypack/function/atan2_fixed/then_0.mcfunction +5 -0
  729. package/dist/data/mypack/function/atan2_fixed/then_12.mcfunction +3 -0
  730. package/dist/data/mypack/function/atan2_fixed/then_15.mcfunction +5 -0
  731. package/dist/data/mypack/function/atan2_fixed/then_18.mcfunction +5 -0
  732. package/dist/data/mypack/function/atan2_fixed/then_21.mcfunction +3 -0
  733. package/dist/data/mypack/function/atan2_fixed/then_24.mcfunction +3 -0
  734. package/dist/data/mypack/function/atan2_fixed/then_27.mcfunction +6 -0
  735. package/dist/data/mypack/function/atan2_fixed/then_3.mcfunction +3 -0
  736. package/dist/data/mypack/function/atan2_fixed/then_33.mcfunction +5 -0
  737. package/dist/data/mypack/function/atan2_fixed/then_36.mcfunction +5 -0
  738. package/dist/data/mypack/function/atan2_fixed/then_39.mcfunction +5 -0
  739. package/dist/data/mypack/function/atan2_fixed/then_42.mcfunction +3 -0
  740. package/dist/data/mypack/function/atan2_fixed/then_45.mcfunction +5 -0
  741. package/dist/data/mypack/function/atan2_fixed/then_6.mcfunction +3 -0
  742. package/dist/data/mypack/function/atan2_fixed/then_9.mcfunction +5 -0
  743. package/dist/data/mypack/function/atan2_fixed.mcfunction +7 -0
  744. package/dist/data/mypack/function/my_game.mcfunction +10 -0
  745. package/dist/data/parkour_race/function/angry_at.mcfunction +1 -0
  746. package/dist/data/parkour_race/function/barrier_wall.mcfunction +1 -0
  747. package/dist/data/parkour_race/function/buff_all.mcfunction +22 -0
  748. package/dist/data/parkour_race/function/check_checkpoints.mcfunction +11 -0
  749. package/dist/data/parkour_race/function/check_checkpoints__exec_t11.mcfunction +4 -0
  750. package/dist/data/parkour_race/function/check_checkpoints__exec_t13.mcfunction +3 -0
  751. package/dist/data/parkour_race/function/check_checkpoints__exec_t5.mcfunction +4 -0
  752. package/dist/data/parkour_race/function/check_checkpoints__exec_t7.mcfunction +4 -0
  753. package/dist/data/parkour_race/function/check_checkpoints__exec_t9.mcfunction +4 -0
  754. package/dist/data/parkour_race/function/check_checkpoints__merge_1.mcfunction +5 -0
  755. package/dist/data/parkour_race/function/check_checkpoints__merge_3.mcfunction +5 -0
  756. package/dist/data/parkour_race/function/check_checkpoints__merge_5.mcfunction +5 -0
  757. package/dist/data/parkour_race/function/check_checkpoints__merge_7.mcfunction +5 -0
  758. package/dist/data/parkour_race/function/check_checkpoints__merge_9.mcfunction +1 -0
  759. package/dist/data/parkour_race/function/check_checkpoints__then_0.mcfunction +2 -0
  760. package/dist/data/parkour_race/function/check_checkpoints__then_2.mcfunction +2 -0
  761. package/dist/data/parkour_race/function/check_checkpoints__then_4.mcfunction +2 -0
  762. package/dist/data/parkour_race/function/check_checkpoints__then_6.mcfunction +2 -0
  763. package/dist/data/parkour_race/function/check_checkpoints__then_8.mcfunction +2 -0
  764. package/dist/data/parkour_race/function/check_fall.mcfunction +1 -0
  765. package/dist/data/parkour_race/function/check_fall__exec_t1.mcfunction +10 -0
  766. package/dist/data/parkour_race/function/clear_area.mcfunction +1 -0
  767. package/dist/data/parkour_race/function/clear_effect.mcfunction +1 -0
  768. package/dist/data/parkour_race/function/clear_effects.mcfunction +1 -0
  769. package/dist/data/parkour_race/function/create_health_bar.mcfunction +24 -0
  770. package/dist/data/parkour_race/function/create_progress_bar.mcfunction +24 -0
  771. package/dist/data/parkour_race/function/create_timer_bar.mcfunction +30 -0
  772. package/dist/data/parkour_race/function/disable_fire_spread.mcfunction +1 -0
  773. package/dist/data/parkour_race/function/disable_keep_inventory.mcfunction +1 -0
  774. package/dist/data/parkour_race/function/disable_mob_griefing.mcfunction +1 -0
  775. package/dist/data/parkour_race/function/enable_keep_inventory.mcfunction +1 -0
  776. package/dist/data/parkour_race/function/end_sparkles_at.mcfunction +1 -0
  777. package/dist/data/parkour_race/function/explosion_effect.mcfunction +1 -0
  778. package/dist/data/parkour_race/function/finish_race.mcfunction +20 -0
  779. package/dist/data/parkour_race/function/finish_race__else_2.mcfunction +4 -0
  780. package/dist/data/parkour_race/function/finish_race__else_5.mcfunction +3 -0
  781. package/dist/data/parkour_race/function/finish_race__merge_1.mcfunction +3 -0
  782. package/dist/data/parkour_race/function/finish_race__merge_4.mcfunction +1 -0
  783. package/dist/data/parkour_race/function/finish_race__then_0.mcfunction +8 -0
  784. package/dist/data/parkour_race/function/finish_race__then_3.mcfunction +10 -0
  785. package/dist/data/parkour_race/function/flames.mcfunction +1 -0
  786. package/dist/data/parkour_race/function/glass_box.mcfunction +2 -0
  787. package/dist/data/parkour_race/function/glow.mcfunction +1 -0
  788. package/dist/data/parkour_race/function/happy_at.mcfunction +1 -0
  789. package/dist/data/parkour_race/function/hearts_at.mcfunction +1 -0
  790. package/dist/data/parkour_race/function/hide_bar.mcfunction +4 -0
  791. package/dist/data/parkour_race/function/init.mcfunction +18 -0
  792. package/dist/data/parkour_race/function/invisible.mcfunction +1 -0
  793. package/dist/data/parkour_race/function/jump.mcfunction +1 -0
  794. package/dist/data/parkour_race/function/load.mcfunction +1 -0
  795. package/dist/data/parkour_race/function/night_vision.mcfunction +1 -0
  796. package/dist/data/parkour_race/function/portal_effect.mcfunction +1 -0
  797. package/dist/data/parkour_race/function/quit_race.mcfunction +10 -0
  798. package/dist/data/parkour_race/function/quit_race__merge_1.mcfunction +1 -0
  799. package/dist/data/parkour_race/function/quit_race__then_0.mcfunction +11 -0
  800. package/dist/data/parkour_race/function/race_tick.mcfunction +1 -0
  801. package/dist/data/parkour_race/function/race_tick__foreach_t0.mcfunction +10 -0
  802. package/dist/data/parkour_race/function/race_tick__foreach_t0__merge_1.mcfunction +1 -0
  803. package/dist/data/parkour_race/function/race_tick__foreach_t0__then_0.mcfunction +13 -0
  804. package/dist/data/parkour_race/function/reach_checkpoint.mcfunction +11 -0
  805. package/dist/data/parkour_race/function/regen.mcfunction +1 -0
  806. package/dist/data/parkour_race/function/remove_bar.mcfunction +3 -0
  807. package/dist/data/parkour_race/function/resistance.mcfunction +1 -0
  808. package/dist/data/parkour_race/function/respawn_at_checkpoint.mcfunction +7 -0
  809. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_1.mcfunction +5 -0
  810. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_3.mcfunction +5 -0
  811. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_5.mcfunction +5 -0
  812. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_7.mcfunction +5 -0
  813. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_9.mcfunction +1 -0
  814. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_0.mcfunction +6 -0
  815. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_2.mcfunction +6 -0
  816. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_4.mcfunction +6 -0
  817. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_6.mcfunction +6 -0
  818. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_8.mcfunction +6 -0
  819. package/dist/data/parkour_race/function/set_day.mcfunction +1 -0
  820. package/dist/data/parkour_race/function/set_easy.mcfunction +1 -0
  821. package/dist/data/parkour_race/function/set_hard.mcfunction +1 -0
  822. package/dist/data/parkour_race/function/set_midnight.mcfunction +1 -0
  823. package/dist/data/parkour_race/function/set_night.mcfunction +1 -0
  824. package/dist/data/parkour_race/function/set_noon.mcfunction +1 -0
  825. package/dist/data/parkour_race/function/set_normal.mcfunction +1 -0
  826. package/dist/data/parkour_race/function/set_peaceful.mcfunction +1 -0
  827. package/dist/data/parkour_race/function/show_bar.mcfunction +4 -0
  828. package/dist/data/parkour_race/function/show_leaderboard.mcfunction +4 -0
  829. package/dist/data/parkour_race/function/slow_fall.mcfunction +1 -0
  830. package/dist/data/parkour_race/function/smoke.mcfunction +1 -0
  831. package/dist/data/parkour_race/function/sparkles_at.mcfunction +1 -0
  832. package/dist/data/parkour_race/function/speed.mcfunction +1 -0
  833. package/dist/data/parkour_race/function/start_race.mcfunction +10 -0
  834. package/dist/data/parkour_race/function/start_race__merge_1.mcfunction +23 -0
  835. package/dist/data/parkour_race/function/start_race__then_0.mcfunction +1 -0
  836. package/dist/data/parkour_race/function/strength.mcfunction +1 -0
  837. package/dist/data/parkour_race/function/totem_at.mcfunction +1 -0
  838. package/dist/data/parkour_race/function/update_bar.mcfunction +5 -0
  839. package/dist/data/parkour_race/function/update_bar_color.mcfunction +7 -0
  840. package/dist/data/parkour_race/function/update_bar_color__else_2.mcfunction +5 -0
  841. package/dist/data/parkour_race/function/update_bar_color__else_5.mcfunction +4 -0
  842. package/dist/data/parkour_race/function/update_bar_color__merge_1.mcfunction +1 -0
  843. package/dist/data/parkour_race/function/update_bar_color__merge_4.mcfunction +1 -0
  844. package/dist/data/parkour_race/function/update_bar_color__then_0.mcfunction +4 -0
  845. package/dist/data/parkour_race/function/update_bar_color__then_3.mcfunction +4 -0
  846. package/dist/data/parkour_race/function/weather_clear.mcfunction +1 -0
  847. package/dist/data/parkour_race/function/weather_rain.mcfunction +1 -0
  848. package/dist/data/parkour_race/function/weather_thunder.mcfunction +1 -0
  849. package/dist/data/quiz/function/__load.mcfunction +16 -0
  850. package/dist/data/quiz/function/__tick.mcfunction +6 -0
  851. package/dist/data/quiz/function/__trigger_quiz_a_dispatch.mcfunction +4 -0
  852. package/dist/data/quiz/function/__trigger_quiz_b_dispatch.mcfunction +4 -0
  853. package/dist/data/quiz/function/__trigger_quiz_c_dispatch.mcfunction +4 -0
  854. package/dist/data/quiz/function/__trigger_quiz_start_dispatch.mcfunction +4 -0
  855. package/dist/data/quiz/function/answer_a.mcfunction +4 -0
  856. package/dist/data/quiz/function/answer_b.mcfunction +4 -0
  857. package/dist/data/quiz/function/answer_c.mcfunction +4 -0
  858. package/dist/data/quiz/function/ask_question/else_1.mcfunction +5 -0
  859. package/dist/data/quiz/function/ask_question/else_4.mcfunction +5 -0
  860. package/dist/data/quiz/function/ask_question/else_7.mcfunction +4 -0
  861. package/dist/data/quiz/function/ask_question/merge_2.mcfunction +1 -0
  862. package/dist/data/quiz/function/ask_question/merge_5.mcfunction +2 -0
  863. package/dist/data/quiz/function/ask_question/merge_8.mcfunction +2 -0
  864. package/dist/data/quiz/function/ask_question/then_0.mcfunction +4 -0
  865. package/dist/data/quiz/function/ask_question/then_3.mcfunction +4 -0
  866. package/dist/data/quiz/function/ask_question/then_6.mcfunction +4 -0
  867. package/dist/data/quiz/function/ask_question.mcfunction +7 -0
  868. package/dist/data/quiz/function/finish_quiz.mcfunction +6 -0
  869. package/dist/data/quiz/function/handle_answer/else_1.mcfunction +5 -0
  870. package/dist/data/quiz/function/handle_answer/else_10.mcfunction +3 -0
  871. package/dist/data/quiz/function/handle_answer/else_16.mcfunction +3 -0
  872. package/dist/data/quiz/function/handle_answer/else_4.mcfunction +3 -0
  873. package/dist/data/quiz/function/handle_answer/else_7.mcfunction +5 -0
  874. package/dist/data/quiz/function/handle_answer/merge_11.mcfunction +2 -0
  875. package/dist/data/quiz/function/handle_answer/merge_14.mcfunction +2 -0
  876. package/dist/data/quiz/function/handle_answer/merge_17.mcfunction +2 -0
  877. package/dist/data/quiz/function/handle_answer/merge_2.mcfunction +8 -0
  878. package/dist/data/quiz/function/handle_answer/merge_5.mcfunction +2 -0
  879. package/dist/data/quiz/function/handle_answer/merge_8.mcfunction +2 -0
  880. package/dist/data/quiz/function/handle_answer/then_0.mcfunction +5 -0
  881. package/dist/data/quiz/function/handle_answer/then_12.mcfunction +5 -0
  882. package/dist/data/quiz/function/handle_answer/then_15.mcfunction +6 -0
  883. package/dist/data/quiz/function/handle_answer/then_3.mcfunction +6 -0
  884. package/dist/data/quiz/function/handle_answer/then_6.mcfunction +5 -0
  885. package/dist/data/quiz/function/handle_answer/then_9.mcfunction +6 -0
  886. package/dist/data/quiz/function/handle_answer.mcfunction +11 -0
  887. package/dist/data/quiz/function/start_quiz.mcfunction +5 -0
  888. package/dist/data/rawtest/function/load.mcfunction +1 -0
  889. package/dist/data/rawtest/function/test.mcfunction +2 -0
  890. package/dist/data/reqtest/function/__load.mcfunction +4 -0
  891. package/dist/data/reqtest/function/_table_init.mcfunction +2 -0
  892. package/dist/data/reqtest/function/no_trig.mcfunction +3 -0
  893. package/dist/data/reqtest/function/use_table.mcfunction +4 -0
  894. package/dist/data/reqtest2/function/__load.mcfunction +3 -0
  895. package/dist/data/reqtest2/function/no_trig.mcfunction +3 -0
  896. package/dist/data/runtime/function/__load.mcfunction +5 -0
  897. package/dist/data/runtime/function/__tick.mcfunction +2 -0
  898. package/dist/data/runtime/function/counter_tick/then_0.mcfunction +3 -0
  899. package/dist/data/runtime/function/counter_tick.mcfunction +13 -0
  900. package/dist/data/shop/function/__load.mcfunction +7 -0
  901. package/dist/data/shop/function/__tick.mcfunction +3 -0
  902. package/dist/data/shop/function/__trigger_shop_buy_dispatch.mcfunction +4 -0
  903. package/dist/data/shop/function/complete_purchase/else_1.mcfunction +5 -0
  904. package/dist/data/shop/function/complete_purchase/else_4.mcfunction +5 -0
  905. package/dist/data/shop/function/complete_purchase/else_7.mcfunction +3 -0
  906. package/dist/data/shop/function/complete_purchase/merge_2.mcfunction +2 -0
  907. package/dist/data/shop/function/complete_purchase/merge_5.mcfunction +2 -0
  908. package/dist/data/shop/function/complete_purchase/merge_8.mcfunction +2 -0
  909. package/dist/data/shop/function/complete_purchase/then_0.mcfunction +4 -0
  910. package/dist/data/shop/function/complete_purchase/then_3.mcfunction +4 -0
  911. package/dist/data/shop/function/complete_purchase/then_6.mcfunction +4 -0
  912. package/dist/data/shop/function/complete_purchase.mcfunction +7 -0
  913. package/dist/data/shop/function/handle_shop_trigger.mcfunction +3 -0
  914. package/dist/data/swap_test/function/__load.mcfunction +3 -0
  915. package/dist/data/swap_test/function/gcd_old/loop_body_1.mcfunction +7 -0
  916. package/dist/data/swap_test/function/gcd_old/loop_check_0.mcfunction +5 -0
  917. package/dist/data/swap_test/function/gcd_old/loop_exit_2.mcfunction +3 -0
  918. package/dist/data/swap_test/function/gcd_old.mcfunction +8 -0
  919. package/dist/data/test/function/__dyn_idx_test_arrays_a.mcfunction +1 -0
  920. package/dist/data/test/function/__dyn_idx_test_arrays_b.mcfunction +1 -0
  921. package/dist/data/test/function/__dyn_idx_test_arrays_c.mcfunction +1 -0
  922. package/dist/data/test/function/__dyn_idx_test_arrays_counter.mcfunction +1 -0
  923. package/dist/data/test/function/__dyn_idx_test_arrays_d.mcfunction +1 -0
  924. package/dist/data/test/function/__dyn_idx_test_arrays_e.mcfunction +1 -0
  925. package/dist/data/test/function/__dyn_idx_test_arrays_g.mcfunction +1 -0
  926. package/dist/data/test/function/__dyn_idx_test_arrays_h.mcfunction +1 -0
  927. package/dist/data/test/function/__dyn_idx_test_arrays_one.mcfunction +1 -0
  928. package/dist/data/test/function/__dyn_wrt_test_arrays_f.mcfunction +1 -0
  929. package/dist/data/test/function/__dyn_wrt_test_arrays_r.mcfunction +1 -0
  930. package/dist/data/test/function/__dyn_wrt_test_arrays_s.mcfunction +1 -0
  931. package/dist/data/test/function/_apply.mcfunction +5 -0
  932. package/dist/data/test/function/_atan_init.mcfunction +4 -0
  933. package/dist/data/test/function/_divider.mcfunction +1 -0
  934. package/dist/data/test/function/_dump_advanced_phase.mcfunction +4 -0
  935. package/dist/data/test/function/_dump_advanced_phase__loop_body_1.mcfunction +7 -0
  936. package/dist/data/test/function/_dump_advanced_phase__loop_body_6.mcfunction +10 -0
  937. package/dist/data/test/function/_dump_advanced_phase__loop_exit_2.mcfunction +20 -0
  938. package/dist/data/test/function/_dump_advanced_phase__loop_exit_7.mcfunction +12 -0
  939. package/dist/data/test/function/_dump_advanced_phase__loop_header_0.mcfunction +4 -0
  940. package/dist/data/test/function/_dump_advanced_phase__loop_header_5.mcfunction +4 -0
  941. package/dist/data/test/function/_dump_advanced_phase__merge_4.mcfunction +4 -0
  942. package/dist/data/test/function/_dump_advanced_phase__then_3.mcfunction +2 -0
  943. package/dist/data/test/function/_dump_bigint_phase.mcfunction +28 -0
  944. package/dist/data/test/function/_dump_math_phase.mcfunction +4 -0
  945. package/dist/data/test/function/_dump_math_phase__loop_body_1.mcfunction +9 -0
  946. package/dist/data/test/function/_dump_math_phase__loop_exit_2.mcfunction +18 -0
  947. package/dist/data/test/function/_dump_math_phase__loop_header_0.mcfunction +4 -0
  948. package/dist/data/test/function/_fp.mcfunction +2 -0
  949. package/dist/data/test/function/_hsl_chroma_x.mcfunction +11 -0
  950. package/dist/data/test/function/_hsl_chroma_x__merge_1.mcfunction +6 -0
  951. package/dist/data/test/function/_hsl_chroma_x__then_0.mcfunction +4 -0
  952. package/dist/data/test/function/_math_init.mcfunction +4 -0
  953. package/dist/data/test/function/_next_phase.mcfunction +1 -0
  954. package/dist/data/test/function/_section.mcfunction +3 -0
  955. package/dist/data/test/function/_section__const_0.mcfunction +3 -0
  956. package/dist/data/test/function/_tick_advanced_live.mcfunction +5 -0
  957. package/dist/data/test/function/_tick_advanced_live__foreach_t12.mcfunction +1 -0
  958. package/dist/data/test/function/_tick_bigint_live.mcfunction +8 -0
  959. package/dist/data/test/function/_tick_bigint_live__foreach_t11.mcfunction +1 -0
  960. package/dist/data/test/function/_tick_math.mcfunction +9 -0
  961. package/dist/data/test/function/_tick_math__foreach_t12.mcfunction +1 -0
  962. package/dist/data/test/function/_tick_visual.mcfunction +11 -0
  963. package/dist/data/test/function/_tick_visual__foreach_t12.mcfunction +1 -0
  964. package/dist/data/test/function/_tick_visual__foreach_t16.mcfunction +8 -0
  965. package/dist/data/test/function/_tick_visual__foreach_t17.mcfunction +8 -0
  966. package/dist/data/test/function/_tick_visual__foreach_t21.mcfunction +1 -0
  967. package/dist/data/test/function/aabb_contains.mcfunction +13 -0
  968. package/dist/data/test/function/aabb_contains__merge_1.mcfunction +4 -0
  969. package/dist/data/test/function/aabb_contains__merge_10.mcfunction +4 -0
  970. package/dist/data/test/function/aabb_contains__merge_13.mcfunction +4 -0
  971. package/dist/data/test/function/aabb_contains__merge_16.mcfunction +2 -0
  972. package/dist/data/test/function/aabb_contains__merge_4.mcfunction +4 -0
  973. package/dist/data/test/function/aabb_contains__merge_7.mcfunction +4 -0
  974. package/dist/data/test/function/aabb_contains__then_0.mcfunction +2 -0
  975. package/dist/data/test/function/aabb_contains__then_12.mcfunction +2 -0
  976. package/dist/data/test/function/aabb_contains__then_15.mcfunction +2 -0
  977. package/dist/data/test/function/aabb_contains__then_3.mcfunction +2 -0
  978. package/dist/data/test/function/aabb_contains__then_6.mcfunction +2 -0
  979. package/dist/data/test/function/aabb_contains__then_9.mcfunction +2 -0
  980. package/dist/data/test/function/add2d_x.mcfunction +5 -0
  981. package/dist/data/test/function/add2d_y.mcfunction +5 -0
  982. package/dist/data/test/function/add3d_x.mcfunction +5 -0
  983. package/dist/data/test/function/add3d_y.mcfunction +5 -0
  984. package/dist/data/test/function/add3d_z.mcfunction +5 -0
  985. package/dist/data/test/function/air_drag_fx.mcfunction +2 -0
  986. package/dist/data/test/function/angle_between.mcfunction +28 -0
  987. package/dist/data/test/function/angle_between__and_false_2.mcfunction +2 -0
  988. package/dist/data/test/function/angle_between__and_false_8.mcfunction +2 -0
  989. package/dist/data/test/function/angle_between__and_merge_1.mcfunction +2 -0
  990. package/dist/data/test/function/angle_between__and_merge_7.mcfunction +2 -0
  991. package/dist/data/test/function/angle_between__and_right_0.mcfunction +4 -0
  992. package/dist/data/test/function/angle_between__and_right_6.mcfunction +4 -0
  993. package/dist/data/test/function/angle_between__merge_10.mcfunction +26 -0
  994. package/dist/data/test/function/angle_between__merge_4.mcfunction +4 -0
  995. package/dist/data/test/function/angle_between__then_3.mcfunction +2 -0
  996. package/dist/data/test/function/angle_between__then_9.mcfunction +2 -0
  997. package/dist/data/test/function/angle_diff.mcfunction +13 -0
  998. package/dist/data/test/function/angle_diff__merge_1.mcfunction +1 -0
  999. package/dist/data/test/function/angle_diff__then_0.mcfunction +4 -0
  1000. package/dist/data/test/function/angle_normalize.mcfunction +3 -0
  1001. package/dist/data/test/function/angle_normalize__loop_body_1.mcfunction +4 -0
  1002. package/dist/data/test/function/angle_normalize__loop_body_4.mcfunction +4 -0
  1003. package/dist/data/test/function/angle_normalize__loop_exit_2.mcfunction +1 -0
  1004. package/dist/data/test/function/angle_normalize__loop_exit_5.mcfunction +1 -0
  1005. package/dist/data/test/function/angle_normalize__loop_header_0.mcfunction +5 -0
  1006. package/dist/data/test/function/angle_normalize__loop_header_3.mcfunction +5 -0
  1007. package/dist/data/test/function/apply_drag.mcfunction +8 -0
  1008. package/dist/data/test/function/apply_gravity.mcfunction +6 -0
  1009. package/dist/data/test/function/approx_eq.mcfunction +10 -0
  1010. package/dist/data/test/function/approx_eq__merge_1.mcfunction +3 -0
  1011. package/dist/data/test/function/approx_eq__merge_3.mcfunction +2 -0
  1012. package/dist/data/test/function/approx_eq__then_0.mcfunction +4 -0
  1013. package/dist/data/test/function/approx_eq__then_2.mcfunction +2 -0
  1014. package/dist/data/test/function/atan2_fixed.mcfunction +6 -0
  1015. package/dist/data/test/function/atan2_fixed__else_30.mcfunction +2 -0
  1016. package/dist/data/test/function/atan2_fixed__loop_body_26.mcfunction +21 -0
  1017. package/dist/data/test/function/atan2_fixed__loop_exit_27.mcfunction +5 -0
  1018. package/dist/data/test/function/atan2_fixed__loop_header_25.mcfunction +3 -0
  1019. package/dist/data/test/function/atan2_fixed__merge_1.mcfunction +4 -0
  1020. package/dist/data/test/function/atan2_fixed__merge_10.mcfunction +5 -0
  1021. package/dist/data/test/function/atan2_fixed__merge_12.mcfunction +2 -0
  1022. package/dist/data/test/function/atan2_fixed__merge_16.mcfunction +5 -0
  1023. package/dist/data/test/function/atan2_fixed__merge_18.mcfunction +4 -0
  1024. package/dist/data/test/function/atan2_fixed__merge_20.mcfunction +4 -0
  1025. package/dist/data/test/function/atan2_fixed__merge_22.mcfunction +4 -0
  1026. package/dist/data/test/function/atan2_fixed__merge_24.mcfunction +3 -0
  1027. package/dist/data/test/function/atan2_fixed__merge_29.mcfunction +1 -0
  1028. package/dist/data/test/function/atan2_fixed__merge_3.mcfunction +4 -0
  1029. package/dist/data/test/function/atan2_fixed__merge_32.mcfunction +4 -0
  1030. package/dist/data/test/function/atan2_fixed__merge_34.mcfunction +4 -0
  1031. package/dist/data/test/function/atan2_fixed__merge_36.mcfunction +3 -0
  1032. package/dist/data/test/function/atan2_fixed__merge_40.mcfunction +3 -0
  1033. package/dist/data/test/function/atan2_fixed__merge_6.mcfunction +2 -0
  1034. package/dist/data/test/function/atan2_fixed__then_0.mcfunction +4 -0
  1035. package/dist/data/test/function/atan2_fixed__then_11.mcfunction +2 -0
  1036. package/dist/data/test/function/atan2_fixed__then_15.mcfunction +4 -0
  1037. package/dist/data/test/function/atan2_fixed__then_17.mcfunction +4 -0
  1038. package/dist/data/test/function/atan2_fixed__then_19.mcfunction +2 -0
  1039. package/dist/data/test/function/atan2_fixed__then_2.mcfunction +2 -0
  1040. package/dist/data/test/function/atan2_fixed__then_21.mcfunction +2 -0
  1041. package/dist/data/test/function/atan2_fixed__then_23.mcfunction +5 -0
  1042. package/dist/data/test/function/atan2_fixed__then_28.mcfunction +4 -0
  1043. package/dist/data/test/function/atan2_fixed__then_31.mcfunction +4 -0
  1044. package/dist/data/test/function/atan2_fixed__then_33.mcfunction +4 -0
  1045. package/dist/data/test/function/atan2_fixed__then_35.mcfunction +1 -0
  1046. package/dist/data/test/function/atan2_fixed__then_39.mcfunction +3 -0
  1047. package/dist/data/test/function/atan2_fixed__then_5.mcfunction +2 -0
  1048. package/dist/data/test/function/atan2_fixed__then_9.mcfunction +4 -0
  1049. package/dist/data/test/function/avg3.mcfunction +11 -0
  1050. package/dist/data/test/function/avg5.mcfunction +17 -0
  1051. package/dist/data/test/function/bernoulli.mcfunction +13 -0
  1052. package/dist/data/test/function/bernoulli__merge_1.mcfunction +7 -0
  1053. package/dist/data/test/function/bernoulli__merge_3.mcfunction +2 -0
  1054. package/dist/data/test/function/bernoulli__then_0.mcfunction +4 -0
  1055. package/dist/data/test/function/bernoulli__then_2.mcfunction +2 -0
  1056. package/dist/data/test/function/bezier_cubic.mcfunction +36 -0
  1057. package/dist/data/test/function/bezier_quad.mcfunction +20 -0
  1058. package/dist/data/test/function/bigint3_add_hi.mcfunction +11 -0
  1059. package/dist/data/test/function/bigint3_add_lo.mcfunction +8 -0
  1060. package/dist/data/test/function/bigint3_add_mid.mcfunction +11 -0
  1061. package/dist/data/test/function/bigint3_borrow_lo.mcfunction +5 -0
  1062. package/dist/data/test/function/bigint3_borrow_lo__merge_1.mcfunction +2 -0
  1063. package/dist/data/test/function/bigint3_borrow_lo__then_0.mcfunction +2 -0
  1064. package/dist/data/test/function/bigint3_borrow_mid.mcfunction +8 -0
  1065. package/dist/data/test/function/bigint3_borrow_mid__merge_1.mcfunction +2 -0
  1066. package/dist/data/test/function/bigint3_borrow_mid__then_0.mcfunction +2 -0
  1067. package/dist/data/test/function/bigint3_carry_lo.mcfunction +8 -0
  1068. package/dist/data/test/function/bigint3_carry_mid.mcfunction +11 -0
  1069. package/dist/data/test/function/bigint3_cmp.mcfunction +9 -0
  1070. package/dist/data/test/function/bigint3_cmp__merge_1.mcfunction +3 -0
  1071. package/dist/data/test/function/bigint3_cmp__merge_10.mcfunction +3 -0
  1072. package/dist/data/test/function/bigint3_cmp__merge_13.mcfunction +3 -0
  1073. package/dist/data/test/function/bigint3_cmp__merge_16.mcfunction +2 -0
  1074. package/dist/data/test/function/bigint3_cmp__merge_4.mcfunction +3 -0
  1075. package/dist/data/test/function/bigint3_cmp__merge_7.mcfunction +3 -0
  1076. package/dist/data/test/function/bigint3_cmp__then_0.mcfunction +2 -0
  1077. package/dist/data/test/function/bigint3_cmp__then_12.mcfunction +2 -0
  1078. package/dist/data/test/function/bigint3_cmp__then_15.mcfunction +2 -0
  1079. package/dist/data/test/function/bigint3_cmp__then_3.mcfunction +2 -0
  1080. package/dist/data/test/function/bigint3_cmp__then_6.mcfunction +2 -0
  1081. package/dist/data/test/function/bigint3_cmp__then_9.mcfunction +2 -0
  1082. package/dist/data/test/function/bigint3_div_chunk.mcfunction +11 -0
  1083. package/dist/data/test/function/bigint3_mul1_hi.mcfunction +8 -0
  1084. package/dist/data/test/function/bigint3_mul1_lo.mcfunction +8 -0
  1085. package/dist/data/test/function/bigint3_mul1_mid.mcfunction +2 -0
  1086. package/dist/data/test/function/bigint3_rem_chunk.mcfunction +11 -0
  1087. package/dist/data/test/function/bigint3_sub_hi.mcfunction +8 -0
  1088. package/dist/data/test/function/bigint3_sub_lo.mcfunction +5 -0
  1089. package/dist/data/test/function/bigint3_sub_lo__merge_1.mcfunction +5 -0
  1090. package/dist/data/test/function/bigint3_sub_lo__then_0.mcfunction +3 -0
  1091. package/dist/data/test/function/bigint3_sub_mid.mcfunction +12 -0
  1092. package/dist/data/test/function/bigint3_sub_mid__merge_1.mcfunction +1 -0
  1093. package/dist/data/test/function/bigint3_sub_mid__then_0.mcfunction +4 -0
  1094. package/dist/data/test/function/bigint3_to_int32.mcfunction +14 -0
  1095. package/dist/data/test/function/bigint_add.mcfunction +8 -0
  1096. package/dist/data/test/function/bigint_add__arr_a__test_arrays__a__b__test_arrays__b__result__test_arrays__r.mcfunction +6 -0
  1097. package/dist/data/test/function/bigint_add__arr_a__test_arrays__a__b__test_arrays__b__result__test_arrays__r__loop_body_1.mcfunction +22 -0
  1098. package/dist/data/test/function/bigint_add__arr_a__test_arrays__a__b__test_arrays__b__result__test_arrays__r__loop_exit_2.mcfunction +1 -0
  1099. package/dist/data/test/function/bigint_add__arr_a__test_arrays__a__b__test_arrays__b__result__test_arrays__r__loop_header_0.mcfunction +4 -0
  1100. package/dist/data/test/function/bigint_add__arr_a__test_arrays__counter__b__test_arrays__one__result__test_arrays__r.mcfunction +6 -0
  1101. package/dist/data/test/function/bigint_add__arr_a__test_arrays__counter__b__test_arrays__one__result__test_arrays__r__loop_body_1.mcfunction +22 -0
  1102. package/dist/data/test/function/bigint_add__arr_a__test_arrays__counter__b__test_arrays__one__result__test_arrays__r__loop_exit_2.mcfunction +1 -0
  1103. package/dist/data/test/function/bigint_add__arr_a__test_arrays__counter__b__test_arrays__one__result__test_arrays__r__loop_header_0.mcfunction +4 -0
  1104. package/dist/data/test/function/bigint_add__loop_body_1.mcfunction +12 -0
  1105. package/dist/data/test/function/bigint_add__loop_exit_2.mcfunction +1 -0
  1106. package/dist/data/test/function/bigint_add__loop_header_0.mcfunction +4 -0
  1107. package/dist/data/test/function/bigint_base.mcfunction +2 -0
  1108. package/dist/data/test/function/bigint_cmp.mcfunction +5 -0
  1109. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h.mcfunction +3 -0
  1110. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__loop_body_1.mcfunction +7 -0
  1111. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__loop_exit_2.mcfunction +2 -0
  1112. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__loop_header_0.mcfunction +3 -0
  1113. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__merge_4.mcfunction +7 -0
  1114. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__merge_7.mcfunction +4 -0
  1115. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__then_3.mcfunction +2 -0
  1116. package/dist/data/test/function/bigint_cmp__arr_a__test_arrays__g__b__test_arrays__h__then_6.mcfunction +2 -0
  1117. package/dist/data/test/function/bigint_cmp__loop_body_1.mcfunction +3 -0
  1118. package/dist/data/test/function/bigint_cmp__loop_exit_2.mcfunction +2 -0
  1119. package/dist/data/test/function/bigint_cmp__loop_header_0.mcfunction +3 -0
  1120. package/dist/data/test/function/bigint_cmp__merge_4.mcfunction +3 -0
  1121. package/dist/data/test/function/bigint_cmp__merge_7.mcfunction +4 -0
  1122. package/dist/data/test/function/bigint_cmp__then_3.mcfunction +2 -0
  1123. package/dist/data/test/function/bigint_cmp__then_6.mcfunction +2 -0
  1124. package/dist/data/test/function/bigint_copy.mcfunction +3 -0
  1125. package/dist/data/test/function/bigint_copy__loop_body_1.mcfunction +4 -0
  1126. package/dist/data/test/function/bigint_copy__loop_exit_2.mcfunction +1 -0
  1127. package/dist/data/test/function/bigint_copy__loop_header_0.mcfunction +3 -0
  1128. package/dist/data/test/function/bigint_is_zero.mcfunction +4 -0
  1129. package/dist/data/test/function/bigint_is_zero__loop_body_1.mcfunction +4 -0
  1130. package/dist/data/test/function/bigint_is_zero__loop_exit_2.mcfunction +2 -0
  1131. package/dist/data/test/function/bigint_is_zero__loop_header_0.mcfunction +3 -0
  1132. package/dist/data/test/function/bigint_is_zero__merge_4.mcfunction +4 -0
  1133. package/dist/data/test/function/bigint_is_zero__then_3.mcfunction +2 -0
  1134. package/dist/data/test/function/bigint_leading_zeros.mcfunction +5 -0
  1135. package/dist/data/test/function/bigint_leading_zeros__loop_body_1.mcfunction +4 -0
  1136. package/dist/data/test/function/bigint_leading_zeros__loop_exit_2.mcfunction +1 -0
  1137. package/dist/data/test/function/bigint_leading_zeros__loop_header_0.mcfunction +3 -0
  1138. package/dist/data/test/function/bigint_leading_zeros__merge_4.mcfunction +9 -0
  1139. package/dist/data/test/function/bigint_leading_zeros__then_3.mcfunction +1 -0
  1140. package/dist/data/test/function/bigint_mul_small.mcfunction +8 -0
  1141. package/dist/data/test/function/bigint_mul_small__arr_a__test_arrays__e__result__test_arrays__f.mcfunction +7 -0
  1142. package/dist/data/test/function/bigint_mul_small__arr_a__test_arrays__e__result__test_arrays__f__loop_body_1.mcfunction +20 -0
  1143. package/dist/data/test/function/bigint_mul_small__arr_a__test_arrays__e__result__test_arrays__f__loop_exit_2.mcfunction +1 -0
  1144. package/dist/data/test/function/bigint_mul_small__arr_a__test_arrays__e__result__test_arrays__f__loop_header_0.mcfunction +4 -0
  1145. package/dist/data/test/function/bigint_mul_small__loop_body_1.mcfunction +12 -0
  1146. package/dist/data/test/function/bigint_mul_small__loop_exit_2.mcfunction +1 -0
  1147. package/dist/data/test/function/bigint_mul_small__loop_header_0.mcfunction +4 -0
  1148. package/dist/data/test/function/bigint_shift_left.mcfunction +3 -0
  1149. package/dist/data/test/function/bigint_shift_left__loop_body_1.mcfunction +4 -0
  1150. package/dist/data/test/function/bigint_shift_left__loop_exit_2.mcfunction +1 -0
  1151. package/dist/data/test/function/bigint_shift_left__loop_header_0.mcfunction +5 -0
  1152. package/dist/data/test/function/bigint_sub.mcfunction +8 -0
  1153. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s.mcfunction +6 -0
  1154. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__loop_body_1.mcfunction +13 -0
  1155. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__loop_exit_2.mcfunction +1 -0
  1156. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__loop_header_0.mcfunction +4 -0
  1157. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__merge_4.mcfunction +4 -0
  1158. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__merge_6.mcfunction +7 -0
  1159. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__then_3.mcfunction +5 -0
  1160. package/dist/data/test/function/bigint_sub__arr_a__test_arrays__c__b__test_arrays__d__result__test_arrays__s__then_5.mcfunction +2 -0
  1161. package/dist/data/test/function/bigint_sub__loop_body_1.mcfunction +9 -0
  1162. package/dist/data/test/function/bigint_sub__loop_exit_2.mcfunction +1 -0
  1163. package/dist/data/test/function/bigint_sub__loop_header_0.mcfunction +4 -0
  1164. package/dist/data/test/function/bigint_sub__merge_4.mcfunction +4 -0
  1165. package/dist/data/test/function/bigint_sub__merge_6.mcfunction +4 -0
  1166. package/dist/data/test/function/bigint_sub__then_3.mcfunction +5 -0
  1167. package/dist/data/test/function/bigint_sub__then_5.mcfunction +2 -0
  1168. package/dist/data/test/function/bigint_zero.mcfunction +3 -0
  1169. package/dist/data/test/function/bigint_zero__loop_body_1.mcfunction +4 -0
  1170. package/dist/data/test/function/bigint_zero__loop_exit_2.mcfunction +1 -0
  1171. package/dist/data/test/function/bigint_zero__loop_header_0.mcfunction +3 -0
  1172. package/dist/data/test/function/billboard_y.mcfunction +7 -0
  1173. package/dist/data/test/function/bit_and.mcfunction +6 -0
  1174. package/dist/data/test/function/bit_and__loop_body_1.mcfunction +10 -0
  1175. package/dist/data/test/function/bit_and__loop_exit_2.mcfunction +1 -0
  1176. package/dist/data/test/function/bit_and__loop_header_0.mcfunction +5 -0
  1177. package/dist/data/test/function/bit_and__merge_4.mcfunction +8 -0
  1178. package/dist/data/test/function/bit_and__merge_6.mcfunction +1 -0
  1179. package/dist/data/test/function/bit_and__then_3.mcfunction +10 -0
  1180. package/dist/data/test/function/bit_and__then_5.mcfunction +4 -0
  1181. package/dist/data/test/function/bit_clear.mcfunction +5 -0
  1182. package/dist/data/test/function/bit_clear__loop_body_1.mcfunction +8 -0
  1183. package/dist/data/test/function/bit_clear__loop_exit_2.mcfunction +10 -0
  1184. package/dist/data/test/function/bit_clear__loop_header_0.mcfunction +4 -0
  1185. package/dist/data/test/function/bit_clear__merge_4.mcfunction +1 -0
  1186. package/dist/data/test/function/bit_clear__then_3.mcfunction +3 -0
  1187. package/dist/data/test/function/bit_get.mcfunction +5 -0
  1188. package/dist/data/test/function/bit_get__loop_body_1.mcfunction +8 -0
  1189. package/dist/data/test/function/bit_get__loop_exit_2.mcfunction +6 -0
  1190. package/dist/data/test/function/bit_get__loop_header_0.mcfunction +4 -0
  1191. package/dist/data/test/function/bit_not.mcfunction +5 -0
  1192. package/dist/data/test/function/bit_not__loop_body_1.mcfunction +10 -0
  1193. package/dist/data/test/function/bit_not__loop_exit_2.mcfunction +1 -0
  1194. package/dist/data/test/function/bit_not__loop_header_0.mcfunction +5 -0
  1195. package/dist/data/test/function/bit_not__merge_4.mcfunction +8 -0
  1196. package/dist/data/test/function/bit_not__then_3.mcfunction +4 -0
  1197. package/dist/data/test/function/bit_or.mcfunction +6 -0
  1198. package/dist/data/test/function/bit_or__loop_body_1.mcfunction +10 -0
  1199. package/dist/data/test/function/bit_or__loop_exit_2.mcfunction +1 -0
  1200. package/dist/data/test/function/bit_or__loop_header_0.mcfunction +5 -0
  1201. package/dist/data/test/function/bit_or__merge_4.mcfunction +10 -0
  1202. package/dist/data/test/function/bit_or__merge_6.mcfunction +8 -0
  1203. package/dist/data/test/function/bit_or__merge_8.mcfunction +1 -0
  1204. package/dist/data/test/function/bit_or__then_3.mcfunction +4 -0
  1205. package/dist/data/test/function/bit_or__then_5.mcfunction +10 -0
  1206. package/dist/data/test/function/bit_or__then_7.mcfunction +4 -0
  1207. package/dist/data/test/function/bit_set.mcfunction +5 -0
  1208. package/dist/data/test/function/bit_set__loop_body_1.mcfunction +8 -0
  1209. package/dist/data/test/function/bit_set__loop_exit_2.mcfunction +10 -0
  1210. package/dist/data/test/function/bit_set__loop_header_0.mcfunction +4 -0
  1211. package/dist/data/test/function/bit_set__merge_4.mcfunction +1 -0
  1212. package/dist/data/test/function/bit_set__then_3.mcfunction +3 -0
  1213. package/dist/data/test/function/bit_shl.mcfunction +5 -0
  1214. package/dist/data/test/function/bit_shl__loop_body_1.mcfunction +8 -0
  1215. package/dist/data/test/function/bit_shl__loop_exit_2.mcfunction +1 -0
  1216. package/dist/data/test/function/bit_shl__loop_header_0.mcfunction +4 -0
  1217. package/dist/data/test/function/bit_shr.mcfunction +5 -0
  1218. package/dist/data/test/function/bit_shr__loop_body_1.mcfunction +8 -0
  1219. package/dist/data/test/function/bit_shr__loop_exit_2.mcfunction +1 -0
  1220. package/dist/data/test/function/bit_shr__loop_header_0.mcfunction +4 -0
  1221. package/dist/data/test/function/bit_toggle.mcfunction +5 -0
  1222. package/dist/data/test/function/bit_toggle__loop_body_1.mcfunction +8 -0
  1223. package/dist/data/test/function/bit_toggle__loop_exit_2.mcfunction +10 -0
  1224. package/dist/data/test/function/bit_toggle__loop_header_0.mcfunction +4 -0
  1225. package/dist/data/test/function/bit_toggle__merge_4.mcfunction +3 -0
  1226. package/dist/data/test/function/bit_toggle__then_3.mcfunction +3 -0
  1227. package/dist/data/test/function/bit_xor.mcfunction +6 -0
  1228. package/dist/data/test/function/bit_xor__loop_body_1.mcfunction +14 -0
  1229. package/dist/data/test/function/bit_xor__loop_exit_2.mcfunction +1 -0
  1230. package/dist/data/test/function/bit_xor__loop_header_0.mcfunction +5 -0
  1231. package/dist/data/test/function/bit_xor__merge_4.mcfunction +8 -0
  1232. package/dist/data/test/function/bit_xor__then_3.mcfunction +4 -0
  1233. package/dist/data/test/function/bounce_v.mcfunction +10 -0
  1234. package/dist/data/test/function/cbrt_fx.mcfunction +5 -0
  1235. package/dist/data/test/function/cbrt_fx__loop_body_6.mcfunction +7 -0
  1236. package/dist/data/test/function/cbrt_fx__loop_exit_7.mcfunction +1 -0
  1237. package/dist/data/test/function/cbrt_fx__loop_header_5.mcfunction +4 -0
  1238. package/dist/data/test/function/cbrt_fx__merge_1.mcfunction +8 -0
  1239. package/dist/data/test/function/cbrt_fx__merge_11.mcfunction +5 -0
  1240. package/dist/data/test/function/cbrt_fx__merge_13.mcfunction +4 -0
  1241. package/dist/data/test/function/cbrt_fx__merge_4.mcfunction +2 -0
  1242. package/dist/data/test/function/cbrt_fx__merge_9.mcfunction +13 -0
  1243. package/dist/data/test/function/cbrt_fx__then_0.mcfunction +2 -0
  1244. package/dist/data/test/function/cbrt_fx__then_10.mcfunction +2 -0
  1245. package/dist/data/test/function/cbrt_fx__then_12.mcfunction +2 -0
  1246. package/dist/data/test/function/cbrt_fx__then_3.mcfunction +2 -0
  1247. package/dist/data/test/function/cbrt_fx__then_8.mcfunction +2 -0
  1248. package/dist/data/test/function/ceil_div.mcfunction +9 -0
  1249. package/dist/data/test/function/chebyshev.mcfunction +14 -0
  1250. package/dist/data/test/function/chebyshev3d.mcfunction +19 -0
  1251. package/dist/data/test/function/chebyshev3d__merge_1.mcfunction +4 -0
  1252. package/dist/data/test/function/chebyshev3d__merge_3.mcfunction +4 -0
  1253. package/dist/data/test/function/chebyshev3d__merge_5.mcfunction +4 -0
  1254. package/dist/data/test/function/chebyshev3d__merge_7.mcfunction +3 -0
  1255. package/dist/data/test/function/chebyshev3d__merge_9.mcfunction +1 -0
  1256. package/dist/data/test/function/chebyshev3d__then_0.mcfunction +4 -0
  1257. package/dist/data/test/function/chebyshev3d__then_2.mcfunction +4 -0
  1258. package/dist/data/test/function/chebyshev3d__then_4.mcfunction +4 -0
  1259. package/dist/data/test/function/chebyshev3d__then_6.mcfunction +2 -0
  1260. package/dist/data/test/function/chebyshev3d__then_8.mcfunction +2 -0
  1261. package/dist/data/test/function/chebyshev__merge_1.mcfunction +4 -0
  1262. package/dist/data/test/function/chebyshev__merge_3.mcfunction +3 -0
  1263. package/dist/data/test/function/chebyshev__merge_5.mcfunction +1 -0
  1264. package/dist/data/test/function/chebyshev__then_0.mcfunction +4 -0
  1265. package/dist/data/test/function/chebyshev__then_2.mcfunction +4 -0
  1266. package/dist/data/test/function/chebyshev__then_4.mcfunction +1 -0
  1267. package/dist/data/test/function/chunk_hi.mcfunction +5 -0
  1268. package/dist/data/test/function/chunk_lo.mcfunction +5 -0
  1269. package/dist/data/test/function/circular_x.mcfunction +14 -0
  1270. package/dist/data/test/function/circular_z.mcfunction +14 -0
  1271. package/dist/data/test/function/clamp3.mcfunction +7 -0
  1272. package/dist/data/test/function/clamp3__merge_1.mcfunction +4 -0
  1273. package/dist/data/test/function/clamp3__merge_4.mcfunction +1 -0
  1274. package/dist/data/test/function/clamp3__then_0.mcfunction +1 -0
  1275. package/dist/data/test/function/clamp3__then_3.mcfunction +1 -0
  1276. package/dist/data/test/function/clamp_circle_x.mcfunction +13 -0
  1277. package/dist/data/test/function/clamp_circle_x__merge_1.mcfunction +10 -0
  1278. package/dist/data/test/function/clamp_circle_x__then_0.mcfunction +1 -0
  1279. package/dist/data/test/function/clamp_circle_y.mcfunction +13 -0
  1280. package/dist/data/test/function/clamp_circle_y__merge_1.mcfunction +10 -0
  1281. package/dist/data/test/function/clamp_circle_y__then_0.mcfunction +1 -0
  1282. package/dist/data/test/function/clamp_velocity.mcfunction +5 -0
  1283. package/dist/data/test/function/clamp_velocity__merge_1.mcfunction +5 -0
  1284. package/dist/data/test/function/clamp_velocity__merge_4.mcfunction +1 -0
  1285. package/dist/data/test/function/clamp_velocity__then_0.mcfunction +1 -0
  1286. package/dist/data/test/function/clamp_velocity__then_3.mcfunction +3 -0
  1287. package/dist/data/test/function/collatz_steps.mcfunction +5 -0
  1288. package/dist/data/test/function/collatz_steps__else_8.mcfunction +6 -0
  1289. package/dist/data/test/function/collatz_steps__loop_body_4.mcfunction +7 -0
  1290. package/dist/data/test/function/collatz_steps__loop_exit_5.mcfunction +1 -0
  1291. package/dist/data/test/function/collatz_steps__loop_header_3.mcfunction +4 -0
  1292. package/dist/data/test/function/collatz_steps__merge_1.mcfunction +3 -0
  1293. package/dist/data/test/function/collatz_steps__merge_7.mcfunction +4 -0
  1294. package/dist/data/test/function/collatz_steps__then_0.mcfunction +2 -0
  1295. package/dist/data/test/function/collatz_steps__then_6.mcfunction +5 -0
  1296. package/dist/data/test/function/combinations.mcfunction +6 -0
  1297. package/dist/data/test/function/combinations__loop_body_9.mcfunction +15 -0
  1298. package/dist/data/test/function/combinations__loop_exit_10.mcfunction +1 -0
  1299. package/dist/data/test/function/combinations__loop_header_8.mcfunction +3 -0
  1300. package/dist/data/test/function/combinations__merge_1.mcfunction +3 -0
  1301. package/dist/data/test/function/combinations__merge_4.mcfunction +6 -0
  1302. package/dist/data/test/function/combinations__merge_7.mcfunction +3 -0
  1303. package/dist/data/test/function/combinations__then_0.mcfunction +2 -0
  1304. package/dist/data/test/function/combinations__then_3.mcfunction +2 -0
  1305. package/dist/data/test/function/combinations__then_6.mcfunction +4 -0
  1306. package/dist/data/test/function/cos_fixed.mcfunction +7 -0
  1307. package/dist/data/test/function/cos_fixed__const_0.mcfunction +5 -0
  1308. package/dist/data/test/function/cos_hp.mcfunction +6 -0
  1309. package/dist/data/test/function/count_digits.mcfunction +6 -0
  1310. package/dist/data/test/function/count_digits__loop_body_6.mcfunction +8 -0
  1311. package/dist/data/test/function/count_digits__loop_exit_7.mcfunction +1 -0
  1312. package/dist/data/test/function/count_digits__loop_header_5.mcfunction +4 -0
  1313. package/dist/data/test/function/count_digits__merge_1.mcfunction +4 -0
  1314. package/dist/data/test/function/count_digits__merge_3.mcfunction +2 -0
  1315. package/dist/data/test/function/count_digits__then_0.mcfunction +4 -0
  1316. package/dist/data/test/function/count_digits__then_2.mcfunction +2 -0
  1317. package/dist/data/test/function/cross2d.mcfunction +11 -0
  1318. package/dist/data/test/function/cross3d_x.mcfunction +11 -0
  1319. package/dist/data/test/function/cross3d_y.mcfunction +11 -0
  1320. package/dist/data/test/function/cross3d_z.mcfunction +11 -0
  1321. package/dist/data/test/function/cylinder_contains.mcfunction +21 -0
  1322. package/dist/data/test/function/cylinder_contains__merge_1.mcfunction +2 -0
  1323. package/dist/data/test/function/cylinder_contains__then_0.mcfunction +2 -0
  1324. package/dist/data/test/function/debug_bigint.mcfunction +25 -0
  1325. package/dist/data/test/function/digit_sum.mcfunction +6 -0
  1326. package/dist/data/test/function/digit_sum__loop_body_6.mcfunction +11 -0
  1327. package/dist/data/test/function/digit_sum__loop_exit_7.mcfunction +1 -0
  1328. package/dist/data/test/function/digit_sum__loop_header_5.mcfunction +4 -0
  1329. package/dist/data/test/function/digit_sum__merge_1.mcfunction +4 -0
  1330. package/dist/data/test/function/digit_sum__merge_3.mcfunction +2 -0
  1331. package/dist/data/test/function/digit_sum__then_0.mcfunction +4 -0
  1332. package/dist/data/test/function/digit_sum__then_2.mcfunction +2 -0
  1333. package/dist/data/test/function/digital_root.mcfunction +5 -0
  1334. package/dist/data/test/function/digital_root__merge_1.mcfunction +8 -0
  1335. package/dist/data/test/function/digital_root__merge_4.mcfunction +1 -0
  1336. package/dist/data/test/function/digital_root__then_0.mcfunction +2 -0
  1337. package/dist/data/test/function/digital_root__then_3.mcfunction +2 -0
  1338. package/dist/data/test/function/distance2d_fixed.mcfunction +13 -0
  1339. package/dist/data/test/function/distance3d_fixed.mcfunction +18 -0
  1340. package/dist/data/test/function/divfix.mcfunction +6 -0
  1341. package/dist/data/test/function/divfix__merge_1.mcfunction +6 -0
  1342. package/dist/data/test/function/divfix__then_0.mcfunction +2 -0
  1343. package/dist/data/test/function/dot2d.mcfunction +11 -0
  1344. package/dist/data/test/function/dot3d.mcfunction +17 -0
  1345. package/dist/data/test/function/dump_advanced.mcfunction +1 -0
  1346. package/dist/data/test/function/dump_bigint.mcfunction +1 -0
  1347. package/dist/data/test/function/dump_math.mcfunction +1 -0
  1348. package/dist/data/test/function/ease_in_back.mcfunction +26 -0
  1349. package/dist/data/test/function/ease_in_bounce.mcfunction +9 -0
  1350. package/dist/data/test/function/ease_in_cubic.mcfunction +12 -0
  1351. package/dist/data/test/function/ease_in_expo.mcfunction +6 -0
  1352. package/dist/data/test/function/ease_in_expo__merge_1.mcfunction +11 -0
  1353. package/dist/data/test/function/ease_in_expo__then_0.mcfunction +2 -0
  1354. package/dist/data/test/function/ease_in_out_back.mcfunction +6 -0
  1355. package/dist/data/test/function/ease_in_out_back__merge_1.mcfunction +14 -0
  1356. package/dist/data/test/function/ease_in_out_back__then_0.mcfunction +10 -0
  1357. package/dist/data/test/function/ease_in_out_bounce.mcfunction +6 -0
  1358. package/dist/data/test/function/ease_in_out_bounce__merge_1.mcfunction +14 -0
  1359. package/dist/data/test/function/ease_in_out_bounce__then_0.mcfunction +10 -0
  1360. package/dist/data/test/function/ease_in_out_cubic.mcfunction +6 -0
  1361. package/dist/data/test/function/ease_in_out_cubic__merge_1.mcfunction +17 -0
  1362. package/dist/data/test/function/ease_in_out_cubic__then_0.mcfunction +13 -0
  1363. package/dist/data/test/function/ease_in_out_quad.mcfunction +6 -0
  1364. package/dist/data/test/function/ease_in_out_quad__merge_1.mcfunction +12 -0
  1365. package/dist/data/test/function/ease_in_out_quad__then_0.mcfunction +8 -0
  1366. package/dist/data/test/function/ease_in_out_sine.mcfunction +6 -0
  1367. package/dist/data/test/function/ease_in_out_sine__merge_1.mcfunction +14 -0
  1368. package/dist/data/test/function/ease_in_out_sine__then_0.mcfunction +10 -0
  1369. package/dist/data/test/function/ease_in_quad.mcfunction +7 -0
  1370. package/dist/data/test/function/ease_in_quart.mcfunction +12 -0
  1371. package/dist/data/test/function/ease_in_sine.mcfunction +30 -0
  1372. package/dist/data/test/function/ease_linear.mcfunction +2 -0
  1373. package/dist/data/test/function/ease_out_back.mcfunction +9 -0
  1374. package/dist/data/test/function/ease_out_bounce.mcfunction +7 -0
  1375. package/dist/data/test/function/ease_out_bounce__merge_1.mcfunction +5 -0
  1376. package/dist/data/test/function/ease_out_bounce__merge_4.mcfunction +5 -0
  1377. package/dist/data/test/function/ease_out_bounce__merge_7.mcfunction +15 -0
  1378. package/dist/data/test/function/ease_out_bounce__then_0.mcfunction +11 -0
  1379. package/dist/data/test/function/ease_out_bounce__then_3.mcfunction +15 -0
  1380. package/dist/data/test/function/ease_out_bounce__then_6.mcfunction +15 -0
  1381. package/dist/data/test/function/ease_out_cubic.mcfunction +16 -0
  1382. package/dist/data/test/function/ease_out_expo.mcfunction +6 -0
  1383. package/dist/data/test/function/ease_out_expo__merge_1.mcfunction +8 -0
  1384. package/dist/data/test/function/ease_out_expo__then_0.mcfunction +2 -0
  1385. package/dist/data/test/function/ease_out_quad.mcfunction +11 -0
  1386. package/dist/data/test/function/ease_out_quart.mcfunction +16 -0
  1387. package/dist/data/test/function/ease_out_sine.mcfunction +9 -0
  1388. package/dist/data/test/function/ease_smooth.mcfunction +23 -0
  1389. package/dist/data/test/function/ease_smoother.mcfunction +41 -0
  1390. package/dist/data/test/function/exp_dist_approx.mcfunction +13 -0
  1391. package/dist/data/test/function/exp_dist_approx__merge_1.mcfunction +16 -0
  1392. package/dist/data/test/function/exp_dist_approx__merge_3.mcfunction +11 -0
  1393. package/dist/data/test/function/exp_dist_approx__merge_5.mcfunction +1 -0
  1394. package/dist/data/test/function/exp_dist_approx__then_0.mcfunction +4 -0
  1395. package/dist/data/test/function/exp_dist_approx__then_2.mcfunction +2 -0
  1396. package/dist/data/test/function/exp_dist_approx__then_4.mcfunction +2 -0
  1397. package/dist/data/test/function/exp_fx.mcfunction +16 -0
  1398. package/dist/data/test/function/exp_fx__loop_body_10.mcfunction +8 -0
  1399. package/dist/data/test/function/exp_fx__loop_body_5.mcfunction +8 -0
  1400. package/dist/data/test/function/exp_fx__loop_exit_11.mcfunction +1 -0
  1401. package/dist/data/test/function/exp_fx__loop_exit_6.mcfunction +1 -0
  1402. package/dist/data/test/function/exp_fx__loop_header_4.mcfunction +3 -0
  1403. package/dist/data/test/function/exp_fx__loop_header_9.mcfunction +3 -0
  1404. package/dist/data/test/function/exp_fx__merge_1.mcfunction +47 -0
  1405. package/dist/data/test/function/exp_fx__merge_3.mcfunction +4 -0
  1406. package/dist/data/test/function/exp_fx__merge_8.mcfunction +1 -0
  1407. package/dist/data/test/function/exp_fx__then_0.mcfunction +7 -0
  1408. package/dist/data/test/function/exp_fx__then_2.mcfunction +2 -0
  1409. package/dist/data/test/function/exp_fx__then_7.mcfunction +5 -0
  1410. package/dist/data/test/function/factorial.mcfunction +5 -0
  1411. package/dist/data/test/function/factorial__loop_body_4.mcfunction +7 -0
  1412. package/dist/data/test/function/factorial__loop_exit_5.mcfunction +1 -0
  1413. package/dist/data/test/function/factorial__loop_header_3.mcfunction +3 -0
  1414. package/dist/data/test/function/factorial__merge_1.mcfunction +3 -0
  1415. package/dist/data/test/function/factorial__then_0.mcfunction +2 -0
  1416. package/dist/data/test/function/fbm_1d.mcfunction +9 -0
  1417. package/dist/data/test/function/fbm_1d__loop_body_1.mcfunction +33 -0
  1418. package/dist/data/test/function/fbm_1d__loop_exit_2.mcfunction +5 -0
  1419. package/dist/data/test/function/fbm_1d__loop_header_0.mcfunction +4 -0
  1420. package/dist/data/test/function/fbm_1d__merge_4.mcfunction +6 -0
  1421. package/dist/data/test/function/fbm_1d__then_3.mcfunction +2 -0
  1422. package/dist/data/test/function/fbm_2d.mcfunction +10 -0
  1423. package/dist/data/test/function/fbm_2d__loop_body_1.mcfunction +39 -0
  1424. package/dist/data/test/function/fbm_2d__loop_exit_2.mcfunction +5 -0
  1425. package/dist/data/test/function/fbm_2d__loop_header_0.mcfunction +4 -0
  1426. package/dist/data/test/function/fbm_2d__merge_4.mcfunction +6 -0
  1427. package/dist/data/test/function/fbm_2d__then_3.mcfunction +2 -0
  1428. package/dist/data/test/function/fib.mcfunction +5 -0
  1429. package/dist/data/test/function/fib__loop_body_7.mcfunction +8 -0
  1430. package/dist/data/test/function/fib__loop_exit_8.mcfunction +1 -0
  1431. package/dist/data/test/function/fib__loop_header_6.mcfunction +3 -0
  1432. package/dist/data/test/function/fib__merge_1.mcfunction +4 -0
  1433. package/dist/data/test/function/fib__merge_4.mcfunction +4 -0
  1434. package/dist/data/test/function/fib__then_0.mcfunction +2 -0
  1435. package/dist/data/test/function/fib__then_3.mcfunction +2 -0
  1436. package/dist/data/test/function/format_time_h.mcfunction +5 -0
  1437. package/dist/data/test/function/format_time_m.mcfunction +8 -0
  1438. package/dist/data/test/function/format_time_s.mcfunction +8 -0
  1439. package/dist/data/test/function/friction_decel.mcfunction +5 -0
  1440. package/dist/data/test/function/friction_decel__merge_1.mcfunction +5 -0
  1441. package/dist/data/test/function/friction_decel__merge_4.mcfunction +2 -0
  1442. package/dist/data/test/function/friction_decel__then_0.mcfunction +3 -0
  1443. package/dist/data/test/function/friction_decel__then_3.mcfunction +3 -0
  1444. package/dist/data/test/function/gamma_int.mcfunction +5 -0
  1445. package/dist/data/test/function/gamma_int__merge_1.mcfunction +6 -0
  1446. package/dist/data/test/function/gamma_int__then_0.mcfunction +2 -0
  1447. package/dist/data/test/function/gcd.mcfunction +7 -0
  1448. package/dist/data/test/function/gcd__loop_body_5.mcfunction +5 -0
  1449. package/dist/data/test/function/gcd__loop_exit_6.mcfunction +1 -0
  1450. package/dist/data/test/function/gcd__loop_header_4.mcfunction +4 -0
  1451. package/dist/data/test/function/gcd__merge_1.mcfunction +5 -0
  1452. package/dist/data/test/function/gcd__merge_3.mcfunction +1 -0
  1453. package/dist/data/test/function/gcd__then_0.mcfunction +4 -0
  1454. package/dist/data/test/function/gcd__then_2.mcfunction +4 -0
  1455. package/dist/data/test/function/gravity_fx.mcfunction +2 -0
  1456. package/dist/data/test/function/hash_1d.mcfunction +15 -0
  1457. package/dist/data/test/function/hash_1d_pos.mcfunction +10 -0
  1458. package/dist/data/test/function/hash_1d_pos__merge_1.mcfunction +4 -0
  1459. package/dist/data/test/function/hash_1d_pos__then_0.mcfunction +4 -0
  1460. package/dist/data/test/function/hash_2d.mcfunction +11 -0
  1461. package/dist/data/test/function/hash_2d_pos.mcfunction +12 -0
  1462. package/dist/data/test/function/hash_2d_pos__merge_1.mcfunction +4 -0
  1463. package/dist/data/test/function/hash_2d_pos__then_0.mcfunction +4 -0
  1464. package/dist/data/test/function/hash_int.mcfunction +6 -0
  1465. package/dist/data/test/function/hash_int__merge_1.mcfunction +14 -0
  1466. package/dist/data/test/function/hash_int__merge_3.mcfunction +14 -0
  1467. package/dist/data/test/function/hash_int__merge_5.mcfunction +1 -0
  1468. package/dist/data/test/function/hash_int__then_0.mcfunction +4 -0
  1469. package/dist/data/test/function/hash_int__then_2.mcfunction +4 -0
  1470. package/dist/data/test/function/hash_int__then_4.mcfunction +4 -0
  1471. package/dist/data/test/function/hsl_to_b.mcfunction +24 -0
  1472. package/dist/data/test/function/hsl_to_b__merge_1.mcfunction +30 -0
  1473. package/dist/data/test/function/hsl_to_b__merge_12.mcfunction +5 -0
  1474. package/dist/data/test/function/hsl_to_b__merge_15.mcfunction +3 -0
  1475. package/dist/data/test/function/hsl_to_b__merge_3.mcfunction +5 -0
  1476. package/dist/data/test/function/hsl_to_b__merge_6.mcfunction +5 -0
  1477. package/dist/data/test/function/hsl_to_b__merge_9.mcfunction +5 -0
  1478. package/dist/data/test/function/hsl_to_b__then_0.mcfunction +4 -0
  1479. package/dist/data/test/function/hsl_to_b__then_11.mcfunction +3 -0
  1480. package/dist/data/test/function/hsl_to_b__then_14.mcfunction +3 -0
  1481. package/dist/data/test/function/hsl_to_b__then_2.mcfunction +1 -0
  1482. package/dist/data/test/function/hsl_to_b__then_5.mcfunction +1 -0
  1483. package/dist/data/test/function/hsl_to_b__then_8.mcfunction +3 -0
  1484. package/dist/data/test/function/hsl_to_g.mcfunction +24 -0
  1485. package/dist/data/test/function/hsl_to_g__merge_1.mcfunction +30 -0
  1486. package/dist/data/test/function/hsl_to_g__merge_12.mcfunction +5 -0
  1487. package/dist/data/test/function/hsl_to_g__merge_15.mcfunction +1 -0
  1488. package/dist/data/test/function/hsl_to_g__merge_3.mcfunction +5 -0
  1489. package/dist/data/test/function/hsl_to_g__merge_6.mcfunction +5 -0
  1490. package/dist/data/test/function/hsl_to_g__merge_9.mcfunction +5 -0
  1491. package/dist/data/test/function/hsl_to_g__then_0.mcfunction +4 -0
  1492. package/dist/data/test/function/hsl_to_g__then_11.mcfunction +3 -0
  1493. package/dist/data/test/function/hsl_to_g__then_14.mcfunction +1 -0
  1494. package/dist/data/test/function/hsl_to_g__then_2.mcfunction +3 -0
  1495. package/dist/data/test/function/hsl_to_g__then_5.mcfunction +3 -0
  1496. package/dist/data/test/function/hsl_to_g__then_8.mcfunction +3 -0
  1497. package/dist/data/test/function/hsl_to_packed.mcfunction +24 -0
  1498. package/dist/data/test/function/hsl_to_r.mcfunction +24 -0
  1499. package/dist/data/test/function/hsl_to_r__merge_1.mcfunction +30 -0
  1500. package/dist/data/test/function/hsl_to_r__merge_12.mcfunction +5 -0
  1501. package/dist/data/test/function/hsl_to_r__merge_15.mcfunction +3 -0
  1502. package/dist/data/test/function/hsl_to_r__merge_3.mcfunction +5 -0
  1503. package/dist/data/test/function/hsl_to_r__merge_6.mcfunction +5 -0
  1504. package/dist/data/test/function/hsl_to_r__merge_9.mcfunction +5 -0
  1505. package/dist/data/test/function/hsl_to_r__then_0.mcfunction +4 -0
  1506. package/dist/data/test/function/hsl_to_r__then_11.mcfunction +1 -0
  1507. package/dist/data/test/function/hsl_to_r__then_14.mcfunction +3 -0
  1508. package/dist/data/test/function/hsl_to_r__then_2.mcfunction +3 -0
  1509. package/dist/data/test/function/hsl_to_r__then_5.mcfunction +3 -0
  1510. package/dist/data/test/function/hsl_to_r__then_8.mcfunction +1 -0
  1511. package/dist/data/test/function/impact_velocity.mcfunction +5 -0
  1512. package/dist/data/test/function/impact_velocity__merge_1.mcfunction +16 -0
  1513. package/dist/data/test/function/impact_velocity__then_0.mcfunction +2 -0
  1514. package/dist/data/test/function/init_trig.mcfunction +1 -0
  1515. package/dist/data/test/function/int32_to_bigint3_hi.mcfunction +5 -0
  1516. package/dist/data/test/function/int32_to_bigint3_hi__merge_1.mcfunction +4 -0
  1517. package/dist/data/test/function/int32_to_bigint3_hi__then_0.mcfunction +4 -0
  1518. package/dist/data/test/function/int32_to_bigint3_lo.mcfunction +5 -0
  1519. package/dist/data/test/function/int32_to_bigint3_lo__merge_1.mcfunction +4 -0
  1520. package/dist/data/test/function/int32_to_bigint3_lo__then_0.mcfunction +4 -0
  1521. package/dist/data/test/function/int32_to_bigint3_mid.mcfunction +5 -0
  1522. package/dist/data/test/function/int32_to_bigint3_mid__merge_1.mcfunction +7 -0
  1523. package/dist/data/test/function/int32_to_bigint3_mid__then_0.mcfunction +4 -0
  1524. package/dist/data/test/function/is_grounded.mcfunction +5 -0
  1525. package/dist/data/test/function/is_grounded__merge_1.mcfunction +2 -0
  1526. package/dist/data/test/function/is_grounded__then_0.mcfunction +2 -0
  1527. package/dist/data/test/function/is_prime.mcfunction +5 -0
  1528. package/dist/data/test/function/is_prime__loop_body_10.mcfunction +6 -0
  1529. package/dist/data/test/function/is_prime__loop_exit_11.mcfunction +2 -0
  1530. package/dist/data/test/function/is_prime__loop_header_9.mcfunction +5 -0
  1531. package/dist/data/test/function/is_prime__merge_1.mcfunction +4 -0
  1532. package/dist/data/test/function/is_prime__merge_13.mcfunction +4 -0
  1533. package/dist/data/test/function/is_prime__merge_4.mcfunction +7 -0
  1534. package/dist/data/test/function/is_prime__merge_7.mcfunction +2 -0
  1535. package/dist/data/test/function/is_prime__then_0.mcfunction +2 -0
  1536. package/dist/data/test/function/is_prime__then_12.mcfunction +2 -0
  1537. package/dist/data/test/function/is_prime__then_3.mcfunction +2 -0
  1538. package/dist/data/test/function/is_prime__then_6.mcfunction +2 -0
  1539. package/dist/data/test/function/isqrt.mcfunction +5 -0
  1540. package/dist/data/test/function/isqrt__loop_body_10.mcfunction +8 -0
  1541. package/dist/data/test/function/isqrt__loop_body_13.mcfunction +11 -0
  1542. package/dist/data/test/function/isqrt__loop_body_7.mcfunction +8 -0
  1543. package/dist/data/test/function/isqrt__loop_exit_11.mcfunction +2 -0
  1544. package/dist/data/test/function/isqrt__loop_exit_14.mcfunction +1 -0
  1545. package/dist/data/test/function/isqrt__loop_exit_8.mcfunction +9 -0
  1546. package/dist/data/test/function/isqrt__loop_header_12.mcfunction +4 -0
  1547. package/dist/data/test/function/isqrt__loop_header_6.mcfunction +4 -0
  1548. package/dist/data/test/function/isqrt__loop_header_9.mcfunction +3 -0
  1549. package/dist/data/test/function/isqrt__merge_1.mcfunction +4 -0
  1550. package/dist/data/test/function/isqrt__merge_16.mcfunction +5 -0
  1551. package/dist/data/test/function/isqrt__merge_4.mcfunction +3 -0
  1552. package/dist/data/test/function/isqrt__then_0.mcfunction +2 -0
  1553. package/dist/data/test/function/isqrt__then_15.mcfunction +1 -0
  1554. package/dist/data/test/function/isqrt__then_3.mcfunction +2 -0
  1555. package/dist/data/test/function/julia_iter.mcfunction +9 -0
  1556. package/dist/data/test/function/julia_iter__loop_body_1.mcfunction +36 -0
  1557. package/dist/data/test/function/julia_iter__loop_exit_2.mcfunction +1 -0
  1558. package/dist/data/test/function/julia_iter__loop_header_0.mcfunction +3 -0
  1559. package/dist/data/test/function/julia_iter__merge_4.mcfunction +4 -0
  1560. package/dist/data/test/function/julia_iter__then_3.mcfunction +1 -0
  1561. package/dist/data/test/function/lambda_demo.mcfunction +2 -0
  1562. package/dist/data/test/function/lcm.mcfunction +11 -0
  1563. package/dist/data/test/function/lcm__merge_1.mcfunction +5 -0
  1564. package/dist/data/test/function/lcm__then_0.mcfunction +2 -0
  1565. package/dist/data/test/function/length2d_fixed.mcfunction +15 -0
  1566. package/dist/data/test/function/length3d_fixed.mcfunction +20 -0
  1567. package/dist/data/test/function/lerp.mcfunction +13 -0
  1568. package/dist/data/test/function/lerp2d_x.mcfunction +13 -0
  1569. package/dist/data/test/function/lerp2d_y.mcfunction +13 -0
  1570. package/dist/data/test/function/lerp_angle.mcfunction +7 -0
  1571. package/dist/data/test/function/lerp_angle__loop_body_1.mcfunction +4 -0
  1572. package/dist/data/test/function/lerp_angle__loop_body_4.mcfunction +4 -0
  1573. package/dist/data/test/function/lerp_angle__loop_exit_2.mcfunction +1 -0
  1574. package/dist/data/test/function/lerp_angle__loop_exit_5.mcfunction +8 -0
  1575. package/dist/data/test/function/lerp_angle__loop_header_0.mcfunction +4 -0
  1576. package/dist/data/test/function/lerp_angle__loop_header_3.mcfunction +3 -0
  1577. package/dist/data/test/function/list_avg.mcfunction +9 -0
  1578. package/dist/data/test/function/list_clamp_all.mcfunction +6 -0
  1579. package/dist/data/test/function/list_clamp_all__loop_body_1.mcfunction +4 -0
  1580. package/dist/data/test/function/list_clamp_all__loop_exit_2.mcfunction +1 -0
  1581. package/dist/data/test/function/list_clamp_all__loop_header_0.mcfunction +4 -0
  1582. package/dist/data/test/function/list_clamp_all__merge_4.mcfunction +4 -0
  1583. package/dist/data/test/function/list_clamp_all__merge_6.mcfunction +4 -0
  1584. package/dist/data/test/function/list_clamp_all__then_3.mcfunction +1 -0
  1585. package/dist/data/test/function/list_clamp_all__then_5.mcfunction +1 -0
  1586. package/dist/data/test/function/list_contains.mcfunction +5 -0
  1587. package/dist/data/test/function/list_contains__loop_body_1.mcfunction +4 -0
  1588. package/dist/data/test/function/list_contains__loop_exit_2.mcfunction +2 -0
  1589. package/dist/data/test/function/list_contains__loop_header_0.mcfunction +4 -0
  1590. package/dist/data/test/function/list_contains__merge_4.mcfunction +4 -0
  1591. package/dist/data/test/function/list_contains__then_3.mcfunction +2 -0
  1592. package/dist/data/test/function/list_count_if_gt.mcfunction +6 -0
  1593. package/dist/data/test/function/list_count_if_gt__loop_body_1.mcfunction +4 -0
  1594. package/dist/data/test/function/list_count_if_gt__loop_exit_2.mcfunction +1 -0
  1595. package/dist/data/test/function/list_count_if_gt__loop_header_0.mcfunction +4 -0
  1596. package/dist/data/test/function/list_count_if_gt__merge_4.mcfunction +4 -0
  1597. package/dist/data/test/function/list_count_if_gt__then_3.mcfunction +4 -0
  1598. package/dist/data/test/function/list_fill.mcfunction +3 -0
  1599. package/dist/data/test/function/list_fill__loop_body_1.mcfunction +4 -0
  1600. package/dist/data/test/function/list_fill__loop_exit_2.mcfunction +1 -0
  1601. package/dist/data/test/function/list_fill__loop_header_0.mcfunction +4 -0
  1602. package/dist/data/test/function/list_index_of.mcfunction +5 -0
  1603. package/dist/data/test/function/list_index_of__loop_body_1.mcfunction +4 -0
  1604. package/dist/data/test/function/list_index_of__loop_exit_2.mcfunction +2 -0
  1605. package/dist/data/test/function/list_index_of__loop_header_0.mcfunction +4 -0
  1606. package/dist/data/test/function/list_index_of__merge_4.mcfunction +4 -0
  1607. package/dist/data/test/function/list_index_of__then_3.mcfunction +1 -0
  1608. package/dist/data/test/function/list_max.mcfunction +5 -0
  1609. package/dist/data/test/function/list_max3.mcfunction +8 -0
  1610. package/dist/data/test/function/list_max3__merge_1.mcfunction +4 -0
  1611. package/dist/data/test/function/list_max3__merge_3.mcfunction +1 -0
  1612. package/dist/data/test/function/list_max3__then_0.mcfunction +2 -0
  1613. package/dist/data/test/function/list_max3__then_2.mcfunction +2 -0
  1614. package/dist/data/test/function/list_max5.mcfunction +10 -0
  1615. package/dist/data/test/function/list_max5__merge_1.mcfunction +4 -0
  1616. package/dist/data/test/function/list_max5__merge_3.mcfunction +4 -0
  1617. package/dist/data/test/function/list_max5__merge_5.mcfunction +4 -0
  1618. package/dist/data/test/function/list_max5__merge_7.mcfunction +1 -0
  1619. package/dist/data/test/function/list_max5__then_0.mcfunction +2 -0
  1620. package/dist/data/test/function/list_max5__then_2.mcfunction +2 -0
  1621. package/dist/data/test/function/list_max5__then_4.mcfunction +2 -0
  1622. package/dist/data/test/function/list_max5__then_6.mcfunction +2 -0
  1623. package/dist/data/test/function/list_max__loop_body_1.mcfunction +4 -0
  1624. package/dist/data/test/function/list_max__loop_exit_2.mcfunction +1 -0
  1625. package/dist/data/test/function/list_max__loop_header_0.mcfunction +4 -0
  1626. package/dist/data/test/function/list_max__merge_4.mcfunction +4 -0
  1627. package/dist/data/test/function/list_max__then_3.mcfunction +2 -0
  1628. package/dist/data/test/function/list_min.mcfunction +5 -0
  1629. package/dist/data/test/function/list_min3.mcfunction +8 -0
  1630. package/dist/data/test/function/list_min3__merge_1.mcfunction +4 -0
  1631. package/dist/data/test/function/list_min3__merge_3.mcfunction +1 -0
  1632. package/dist/data/test/function/list_min3__then_0.mcfunction +2 -0
  1633. package/dist/data/test/function/list_min3__then_2.mcfunction +2 -0
  1634. package/dist/data/test/function/list_min5.mcfunction +10 -0
  1635. package/dist/data/test/function/list_min5__merge_1.mcfunction +4 -0
  1636. package/dist/data/test/function/list_min5__merge_3.mcfunction +4 -0
  1637. package/dist/data/test/function/list_min5__merge_5.mcfunction +4 -0
  1638. package/dist/data/test/function/list_min5__merge_7.mcfunction +1 -0
  1639. package/dist/data/test/function/list_min5__then_0.mcfunction +2 -0
  1640. package/dist/data/test/function/list_min5__then_2.mcfunction +2 -0
  1641. package/dist/data/test/function/list_min5__then_4.mcfunction +2 -0
  1642. package/dist/data/test/function/list_min5__then_6.mcfunction +2 -0
  1643. package/dist/data/test/function/list_min__loop_body_1.mcfunction +4 -0
  1644. package/dist/data/test/function/list_min__loop_exit_2.mcfunction +1 -0
  1645. package/dist/data/test/function/list_min__loop_header_0.mcfunction +4 -0
  1646. package/dist/data/test/function/list_min__merge_4.mcfunction +4 -0
  1647. package/dist/data/test/function/list_min__then_3.mcfunction +2 -0
  1648. package/dist/data/test/function/list_reverse.mcfunction +6 -0
  1649. package/dist/data/test/function/list_reverse__loop_body_1.mcfunction +9 -0
  1650. package/dist/data/test/function/list_reverse__loop_exit_2.mcfunction +1 -0
  1651. package/dist/data/test/function/list_reverse__loop_header_0.mcfunction +4 -0
  1652. package/dist/data/test/function/list_sort_asc.mcfunction +4 -0
  1653. package/dist/data/test/function/list_sort_asc__loop_body_1.mcfunction +2 -0
  1654. package/dist/data/test/function/list_sort_asc__loop_body_4.mcfunction +4 -0
  1655. package/dist/data/test/function/list_sort_asc__loop_exit_2.mcfunction +1 -0
  1656. package/dist/data/test/function/list_sort_asc__loop_exit_5.mcfunction +4 -0
  1657. package/dist/data/test/function/list_sort_asc__loop_header_0.mcfunction +6 -0
  1658. package/dist/data/test/function/list_sort_asc__loop_header_3.mcfunction +8 -0
  1659. package/dist/data/test/function/list_sort_asc__merge_7.mcfunction +4 -0
  1660. package/dist/data/test/function/list_sort_asc__then_6.mcfunction +1 -0
  1661. package/dist/data/test/function/list_sort_desc.mcfunction +4 -0
  1662. package/dist/data/test/function/list_sort_desc__loop_body_1.mcfunction +2 -0
  1663. package/dist/data/test/function/list_sort_desc__loop_body_4.mcfunction +4 -0
  1664. package/dist/data/test/function/list_sort_desc__loop_exit_2.mcfunction +1 -0
  1665. package/dist/data/test/function/list_sort_desc__loop_exit_5.mcfunction +4 -0
  1666. package/dist/data/test/function/list_sort_desc__loop_header_0.mcfunction +6 -0
  1667. package/dist/data/test/function/list_sort_desc__loop_header_3.mcfunction +8 -0
  1668. package/dist/data/test/function/list_sort_desc__merge_7.mcfunction +4 -0
  1669. package/dist/data/test/function/list_sort_desc__then_6.mcfunction +1 -0
  1670. package/dist/data/test/function/list_sum.mcfunction +5 -0
  1671. package/dist/data/test/function/list_sum3.mcfunction +8 -0
  1672. package/dist/data/test/function/list_sum4.mcfunction +11 -0
  1673. package/dist/data/test/function/list_sum5.mcfunction +14 -0
  1674. package/dist/data/test/function/list_sum__loop_body_1.mcfunction +7 -0
  1675. package/dist/data/test/function/list_sum__loop_exit_2.mcfunction +1 -0
  1676. package/dist/data/test/function/list_sum__loop_header_0.mcfunction +4 -0
  1677. package/dist/data/test/function/ln.mcfunction +9 -0
  1678. package/dist/data/test/function/ln__loop_body_1.mcfunction +8 -0
  1679. package/dist/data/test/function/ln__loop_body_4.mcfunction +8 -0
  1680. package/dist/data/test/function/ln__loop_exit_2.mcfunction +1 -0
  1681. package/dist/data/test/function/ln__loop_exit_5.mcfunction +37 -0
  1682. package/dist/data/test/function/ln__loop_header_0.mcfunction +3 -0
  1683. package/dist/data/test/function/ln__loop_header_3.mcfunction +6 -0
  1684. package/dist/data/test/function/load.mcfunction +1 -0
  1685. package/dist/data/test/function/log10_fx.mcfunction +11 -0
  1686. package/dist/data/test/function/log2_fx.mcfunction +11 -0
  1687. package/dist/data/test/function/log2_int.mcfunction +5 -0
  1688. package/dist/data/test/function/log2_int__loop_body_4.mcfunction +8 -0
  1689. package/dist/data/test/function/log2_int__loop_exit_5.mcfunction +1 -0
  1690. package/dist/data/test/function/log2_int__loop_header_3.mcfunction +4 -0
  1691. package/dist/data/test/function/log2_int__merge_1.mcfunction +3 -0
  1692. package/dist/data/test/function/log2_int__then_0.mcfunction +2 -0
  1693. package/dist/data/test/function/loga_fx.mcfunction +10 -0
  1694. package/dist/data/test/function/loga_fx__merge_1.mcfunction +9 -0
  1695. package/dist/data/test/function/loga_fx__then_0.mcfunction +2 -0
  1696. package/dist/data/test/function/mandelbrot_iter.mcfunction +7 -0
  1697. package/dist/data/test/function/mandelbrot_iter__loop_body_1.mcfunction +36 -0
  1698. package/dist/data/test/function/mandelbrot_iter__loop_exit_2.mcfunction +1 -0
  1699. package/dist/data/test/function/mandelbrot_iter__loop_header_0.mcfunction +3 -0
  1700. package/dist/data/test/function/mandelbrot_iter__merge_4.mcfunction +4 -0
  1701. package/dist/data/test/function/mandelbrot_iter__then_3.mcfunction +1 -0
  1702. package/dist/data/test/function/manhattan.mcfunction +14 -0
  1703. package/dist/data/test/function/manhattan3d.mcfunction +19 -0
  1704. package/dist/data/test/function/manhattan3d__merge_1.mcfunction +4 -0
  1705. package/dist/data/test/function/manhattan3d__merge_3.mcfunction +4 -0
  1706. package/dist/data/test/function/manhattan3d__merge_5.mcfunction +5 -0
  1707. package/dist/data/test/function/manhattan3d__then_0.mcfunction +4 -0
  1708. package/dist/data/test/function/manhattan3d__then_2.mcfunction +4 -0
  1709. package/dist/data/test/function/manhattan3d__then_4.mcfunction +4 -0
  1710. package/dist/data/test/function/manhattan__merge_1.mcfunction +4 -0
  1711. package/dist/data/test/function/manhattan__merge_3.mcfunction +3 -0
  1712. package/dist/data/test/function/manhattan__then_0.mcfunction +4 -0
  1713. package/dist/data/test/function/manhattan__then_2.mcfunction +4 -0
  1714. package/dist/data/test/function/map.mcfunction +12 -0
  1715. package/dist/data/test/function/map__merge_1.mcfunction +11 -0
  1716. package/dist/data/test/function/map__then_0.mcfunction +1 -0
  1717. package/dist/data/test/function/mc_day_angle.mcfunction +16 -0
  1718. package/dist/data/test/function/midpoint.mcfunction +8 -0
  1719. package/dist/data/test/function/mod_pow.mcfunction +7 -0
  1720. package/dist/data/test/function/mod_pow__loop_body_6.mcfunction +7 -0
  1721. package/dist/data/test/function/mod_pow__loop_exit_7.mcfunction +1 -0
  1722. package/dist/data/test/function/mod_pow__loop_header_5.mcfunction +4 -0
  1723. package/dist/data/test/function/mod_pow__merge_1.mcfunction +8 -0
  1724. package/dist/data/test/function/mod_pow__merge_4.mcfunction +2 -0
  1725. package/dist/data/test/function/mod_pow__merge_9.mcfunction +10 -0
  1726. package/dist/data/test/function/mod_pow__then_0.mcfunction +2 -0
  1727. package/dist/data/test/function/mod_pow__then_3.mcfunction +4 -0
  1728. package/dist/data/test/function/mod_pow__then_8.mcfunction +6 -0
  1729. package/dist/data/test/function/mulfix.mcfunction +8 -0
  1730. package/dist/data/test/function/neg2d_x.mcfunction +4 -0
  1731. package/dist/data/test/function/neg2d_y.mcfunction +4 -0
  1732. package/dist/data/test/function/neg3d_x.mcfunction +4 -0
  1733. package/dist/data/test/function/neg3d_y.mcfunction +4 -0
  1734. package/dist/data/test/function/neg3d_z.mcfunction +4 -0
  1735. package/dist/data/test/function/newton_sqrt.mcfunction +5 -0
  1736. package/dist/data/test/function/newton_sqrt__loop_body_7.mcfunction +10 -0
  1737. package/dist/data/test/function/newton_sqrt__loop_exit_8.mcfunction +1 -0
  1738. package/dist/data/test/function/newton_sqrt__loop_header_6.mcfunction +3 -0
  1739. package/dist/data/test/function/newton_sqrt__merge_1.mcfunction +4 -0
  1740. package/dist/data/test/function/newton_sqrt__merge_4.mcfunction +6 -0
  1741. package/dist/data/test/function/newton_sqrt__then_0.mcfunction +2 -0
  1742. package/dist/data/test/function/newton_sqrt__then_3.mcfunction +2 -0
  1743. package/dist/data/test/function/next_lcg.mcfunction +7 -0
  1744. package/dist/data/test/function/noise1d.mcfunction +13 -0
  1745. package/dist/data/test/function/noise1d__merge_1.mcfunction +20 -0
  1746. package/dist/data/test/function/noise1d__merge_3.mcfunction +4 -0
  1747. package/dist/data/test/function/noise1d__merge_5.mcfunction +11 -0
  1748. package/dist/data/test/function/noise1d__then_0.mcfunction +7 -0
  1749. package/dist/data/test/function/noise1d__then_2.mcfunction +4 -0
  1750. package/dist/data/test/function/noise1d__then_4.mcfunction +4 -0
  1751. package/dist/data/test/function/normal_approx12.mcfunction +16 -0
  1752. package/dist/data/test/function/normal_approx12__merge_1.mcfunction +18 -0
  1753. package/dist/data/test/function/normal_approx12__merge_11.mcfunction +18 -0
  1754. package/dist/data/test/function/normal_approx12__merge_13.mcfunction +18 -0
  1755. package/dist/data/test/function/normal_approx12__merge_15.mcfunction +18 -0
  1756. package/dist/data/test/function/normal_approx12__merge_17.mcfunction +18 -0
  1757. package/dist/data/test/function/normal_approx12__merge_19.mcfunction +18 -0
  1758. package/dist/data/test/function/normal_approx12__merge_21.mcfunction +18 -0
  1759. package/dist/data/test/function/normal_approx12__merge_23.mcfunction +9 -0
  1760. package/dist/data/test/function/normal_approx12__merge_3.mcfunction +18 -0
  1761. package/dist/data/test/function/normal_approx12__merge_5.mcfunction +18 -0
  1762. package/dist/data/test/function/normal_approx12__merge_7.mcfunction +18 -0
  1763. package/dist/data/test/function/normal_approx12__merge_9.mcfunction +18 -0
  1764. package/dist/data/test/function/normal_approx12__then_0.mcfunction +4 -0
  1765. package/dist/data/test/function/normal_approx12__then_10.mcfunction +4 -0
  1766. package/dist/data/test/function/normal_approx12__then_12.mcfunction +4 -0
  1767. package/dist/data/test/function/normal_approx12__then_14.mcfunction +4 -0
  1768. package/dist/data/test/function/normal_approx12__then_16.mcfunction +4 -0
  1769. package/dist/data/test/function/normal_approx12__then_18.mcfunction +4 -0
  1770. package/dist/data/test/function/normal_approx12__then_2.mcfunction +4 -0
  1771. package/dist/data/test/function/normal_approx12__then_20.mcfunction +4 -0
  1772. package/dist/data/test/function/normal_approx12__then_22.mcfunction +4 -0
  1773. package/dist/data/test/function/normal_approx12__then_4.mcfunction +4 -0
  1774. package/dist/data/test/function/normal_approx12__then_6.mcfunction +4 -0
  1775. package/dist/data/test/function/normal_approx12__then_8.mcfunction +4 -0
  1776. package/dist/data/test/function/normalize2d_x.mcfunction +11 -0
  1777. package/dist/data/test/function/normalize2d_x__merge_1.mcfunction +6 -0
  1778. package/dist/data/test/function/normalize2d_x__then_0.mcfunction +2 -0
  1779. package/dist/data/test/function/normalize2d_y.mcfunction +11 -0
  1780. package/dist/data/test/function/normalize2d_y__merge_1.mcfunction +6 -0
  1781. package/dist/data/test/function/normalize2d_y__then_0.mcfunction +2 -0
  1782. package/dist/data/test/function/parabola_land_t.mcfunction +7 -0
  1783. package/dist/data/test/function/parabola_x.mcfunction +8 -0
  1784. package/dist/data/test/function/parabola_y.mcfunction +17 -0
  1785. package/dist/data/test/function/pcg_next_hi.mcfunction +8 -0
  1786. package/dist/data/test/function/pcg_next_lo.mcfunction +7 -0
  1787. package/dist/data/test/function/pcg_output.mcfunction +15 -0
  1788. package/dist/data/test/function/pcg_output__merge_1.mcfunction +1 -0
  1789. package/dist/data/test/function/pcg_output__then_0.mcfunction +4 -0
  1790. package/dist/data/test/function/popcount.mcfunction +5 -0
  1791. package/dist/data/test/function/popcount__loop_body_1.mcfunction +8 -0
  1792. package/dist/data/test/function/popcount__loop_exit_2.mcfunction +1 -0
  1793. package/dist/data/test/function/popcount__loop_header_0.mcfunction +5 -0
  1794. package/dist/data/test/function/popcount__merge_4.mcfunction +8 -0
  1795. package/dist/data/test/function/popcount__then_3.mcfunction +4 -0
  1796. package/dist/data/test/function/pow_int.mcfunction +6 -0
  1797. package/dist/data/test/function/pow_int__loop_body_4.mcfunction +7 -0
  1798. package/dist/data/test/function/pow_int__loop_exit_5.mcfunction +1 -0
  1799. package/dist/data/test/function/pow_int__loop_header_3.mcfunction +4 -0
  1800. package/dist/data/test/function/pow_int__merge_1.mcfunction +4 -0
  1801. package/dist/data/test/function/pow_int__merge_7.mcfunction +8 -0
  1802. package/dist/data/test/function/pow_int__then_0.mcfunction +2 -0
  1803. package/dist/data/test/function/pow_int__then_6.mcfunction +4 -0
  1804. package/dist/data/test/function/projectile_land_t.mcfunction +5 -0
  1805. package/dist/data/test/function/projectile_land_t__merge_1.mcfunction +7 -0
  1806. package/dist/data/test/function/projectile_land_t__then_0.mcfunction +2 -0
  1807. package/dist/data/test/function/projectile_max_height.mcfunction +10 -0
  1808. package/dist/data/test/function/projectile_vy.mcfunction +9 -0
  1809. package/dist/data/test/function/projectile_x.mcfunction +8 -0
  1810. package/dist/data/test/function/projectile_y.mcfunction +19 -0
  1811. package/dist/data/test/function/ptimer/new.mcfunction +3 -0
  1812. package/dist/data/test/function/ptimer/reset.mcfunction +1 -0
  1813. package/dist/data/test/function/ptimer/tick.mcfunction +8 -0
  1814. package/dist/data/test/function/ptimer/tick__merge_1.mcfunction +2 -0
  1815. package/dist/data/test/function/ptimer/tick__then_0.mcfunction +3 -0
  1816. package/dist/data/test/function/quadratic_disc.mcfunction +12 -0
  1817. package/dist/data/test/function/quadratic_x1.mcfunction +7 -0
  1818. package/dist/data/test/function/quadratic_x1__merge_1.mcfunction +13 -0
  1819. package/dist/data/test/function/quadratic_x1__merge_4.mcfunction +15 -0
  1820. package/dist/data/test/function/quadratic_x1__then_0.mcfunction +2 -0
  1821. package/dist/data/test/function/quadratic_x1__then_3.mcfunction +2 -0
  1822. package/dist/data/test/function/quadratic_x2.mcfunction +7 -0
  1823. package/dist/data/test/function/quadratic_x2__merge_1.mcfunction +13 -0
  1824. package/dist/data/test/function/quadratic_x2__merge_4.mcfunction +15 -0
  1825. package/dist/data/test/function/quadratic_x2__then_0.mcfunction +2 -0
  1826. package/dist/data/test/function/quadratic_x2__then_3.mcfunction +2 -0
  1827. package/dist/data/test/function/quat_cos_half.mcfunction +8 -0
  1828. package/dist/data/test/function/quat_sin_half.mcfunction +8 -0
  1829. package/dist/data/test/function/random_bool.mcfunction +7 -0
  1830. package/dist/data/test/function/random_bool__merge_1.mcfunction +4 -0
  1831. package/dist/data/test/function/random_bool__then_0.mcfunction +4 -0
  1832. package/dist/data/test/function/random_range.mcfunction +9 -0
  1833. package/dist/data/test/function/random_range__merge_1.mcfunction +7 -0
  1834. package/dist/data/test/function/random_range__then_0.mcfunction +4 -0
  1835. package/dist/data/test/function/reverse_int.mcfunction +7 -0
  1836. package/dist/data/test/function/reverse_int__loop_body_3.mcfunction +14 -0
  1837. package/dist/data/test/function/reverse_int__loop_exit_4.mcfunction +4 -0
  1838. package/dist/data/test/function/reverse_int__loop_header_2.mcfunction +4 -0
  1839. package/dist/data/test/function/reverse_int__merge_1.mcfunction +2 -0
  1840. package/dist/data/test/function/reverse_int__merge_6.mcfunction +1 -0
  1841. package/dist/data/test/function/reverse_int__then_0.mcfunction +5 -0
  1842. package/dist/data/test/function/reverse_int__then_5.mcfunction +3 -0
  1843. package/dist/data/test/function/rgb_b.mcfunction +5 -0
  1844. package/dist/data/test/function/rgb_g.mcfunction +8 -0
  1845. package/dist/data/test/function/rgb_lerp.mcfunction +71 -0
  1846. package/dist/data/test/function/rgb_pack.mcfunction +14 -0
  1847. package/dist/data/test/function/rgb_r.mcfunction +8 -0
  1848. package/dist/data/test/function/rgb_to_h.mcfunction +8 -0
  1849. package/dist/data/test/function/rgb_to_h__merge_1.mcfunction +4 -0
  1850. package/dist/data/test/function/rgb_to_h__merge_12.mcfunction +4 -0
  1851. package/dist/data/test/function/rgb_to_h__merge_14.mcfunction +1 -0
  1852. package/dist/data/test/function/rgb_to_h__merge_17.mcfunction +9 -0
  1853. package/dist/data/test/function/rgb_to_h__merge_3.mcfunction +5 -0
  1854. package/dist/data/test/function/rgb_to_h__merge_5.mcfunction +4 -0
  1855. package/dist/data/test/function/rgb_to_h__merge_7.mcfunction +8 -0
  1856. package/dist/data/test/function/rgb_to_h__merge_9.mcfunction +4 -0
  1857. package/dist/data/test/function/rgb_to_h__then_0.mcfunction +2 -0
  1858. package/dist/data/test/function/rgb_to_h__then_11.mcfunction +12 -0
  1859. package/dist/data/test/function/rgb_to_h__then_13.mcfunction +4 -0
  1860. package/dist/data/test/function/rgb_to_h__then_16.mcfunction +9 -0
  1861. package/dist/data/test/function/rgb_to_h__then_2.mcfunction +2 -0
  1862. package/dist/data/test/function/rgb_to_h__then_4.mcfunction +2 -0
  1863. package/dist/data/test/function/rgb_to_h__then_6.mcfunction +2 -0
  1864. package/dist/data/test/function/rgb_to_h__then_8.mcfunction +2 -0
  1865. package/dist/data/test/function/rgb_to_l.mcfunction +8 -0
  1866. package/dist/data/test/function/rgb_to_l__merge_1.mcfunction +4 -0
  1867. package/dist/data/test/function/rgb_to_l__merge_3.mcfunction +5 -0
  1868. package/dist/data/test/function/rgb_to_l__merge_5.mcfunction +4 -0
  1869. package/dist/data/test/function/rgb_to_l__merge_7.mcfunction +9 -0
  1870. package/dist/data/test/function/rgb_to_l__then_0.mcfunction +2 -0
  1871. package/dist/data/test/function/rgb_to_l__then_2.mcfunction +2 -0
  1872. package/dist/data/test/function/rgb_to_l__then_4.mcfunction +2 -0
  1873. package/dist/data/test/function/rgb_to_l__then_6.mcfunction +2 -0
  1874. package/dist/data/test/function/rgb_to_s.mcfunction +8 -0
  1875. package/dist/data/test/function/rgb_to_s__merge_1.mcfunction +4 -0
  1876. package/dist/data/test/function/rgb_to_s__merge_12.mcfunction +10 -0
  1877. package/dist/data/test/function/rgb_to_s__merge_3.mcfunction +5 -0
  1878. package/dist/data/test/function/rgb_to_s__merge_5.mcfunction +4 -0
  1879. package/dist/data/test/function/rgb_to_s__merge_7.mcfunction +8 -0
  1880. package/dist/data/test/function/rgb_to_s__merge_9.mcfunction +13 -0
  1881. package/dist/data/test/function/rgb_to_s__then_0.mcfunction +2 -0
  1882. package/dist/data/test/function/rgb_to_s__then_11.mcfunction +8 -0
  1883. package/dist/data/test/function/rgb_to_s__then_2.mcfunction +2 -0
  1884. package/dist/data/test/function/rgb_to_s__then_4.mcfunction +2 -0
  1885. package/dist/data/test/function/rgb_to_s__then_6.mcfunction +2 -0
  1886. package/dist/data/test/function/rgb_to_s__then_8.mcfunction +2 -0
  1887. package/dist/data/test/function/rotate2d_x.mcfunction +20 -0
  1888. package/dist/data/test/function/rotate2d_y.mcfunction +20 -0
  1889. package/dist/data/test/function/rotate_x_y.mcfunction +28 -0
  1890. package/dist/data/test/function/rotate_x_z.mcfunction +28 -0
  1891. package/dist/data/test/function/rotate_y_x.mcfunction +28 -0
  1892. package/dist/data/test/function/rotate_y_z.mcfunction +30 -0
  1893. package/dist/data/test/function/scale2d_x.mcfunction +8 -0
  1894. package/dist/data/test/function/scale2d_y.mcfunction +8 -0
  1895. package/dist/data/test/function/scale3d_x.mcfunction +8 -0
  1896. package/dist/data/test/function/scale3d_y.mcfunction +8 -0
  1897. package/dist/data/test/function/scale3d_z.mcfunction +8 -0
  1898. package/dist/data/test/function/scale_x.mcfunction +8 -0
  1899. package/dist/data/test/function/scale_y.mcfunction +8 -0
  1900. package/dist/data/test/function/scale_z.mcfunction +8 -0
  1901. package/dist/data/test/function/seconds_to_ticks.mcfunction +5 -0
  1902. package/dist/data/test/function/showcase_load.mcfunction +4 -0
  1903. package/dist/data/test/function/showcase_tick.mcfunction +1 -0
  1904. package/dist/data/test/function/sign.mcfunction +5 -0
  1905. package/dist/data/test/function/sign__merge_1.mcfunction +4 -0
  1906. package/dist/data/test/function/sign__merge_4.mcfunction +2 -0
  1907. package/dist/data/test/function/sign__then_0.mcfunction +2 -0
  1908. package/dist/data/test/function/sign__then_3.mcfunction +2 -0
  1909. package/dist/data/test/function/sin_fixed.mcfunction +9 -0
  1910. package/dist/data/test/function/sin_fixed__merge_1.mcfunction +4 -0
  1911. package/dist/data/test/function/sin_fixed__merge_3.mcfunction +4 -0
  1912. package/dist/data/test/function/sin_fixed__merge_6.mcfunction +4 -0
  1913. package/dist/data/test/function/sin_fixed__merge_9.mcfunction +10 -0
  1914. package/dist/data/test/function/sin_fixed__then_0.mcfunction +4 -0
  1915. package/dist/data/test/function/sin_fixed__then_2.mcfunction +6 -0
  1916. package/dist/data/test/function/sin_fixed__then_5.mcfunction +8 -0
  1917. package/dist/data/test/function/sin_fixed__then_8.mcfunction +10 -0
  1918. package/dist/data/test/function/sin_hp.mcfunction +6 -0
  1919. package/dist/data/test/function/smootherstep.mcfunction +10 -0
  1920. package/dist/data/test/function/smootherstep__merge_1.mcfunction +12 -0
  1921. package/dist/data/test/function/smootherstep__merge_4.mcfunction +4 -0
  1922. package/dist/data/test/function/smootherstep__merge_6.mcfunction +27 -0
  1923. package/dist/data/test/function/smootherstep__then_0.mcfunction +2 -0
  1924. package/dist/data/test/function/smootherstep__then_3.mcfunction +2 -0
  1925. package/dist/data/test/function/smootherstep__then_5.mcfunction +2 -0
  1926. package/dist/data/test/function/smoothstep.mcfunction +10 -0
  1927. package/dist/data/test/function/smoothstep__merge_1.mcfunction +12 -0
  1928. package/dist/data/test/function/smoothstep__merge_4.mcfunction +4 -0
  1929. package/dist/data/test/function/smoothstep__merge_6.mcfunction +15 -0
  1930. package/dist/data/test/function/smoothstep__then_0.mcfunction +2 -0
  1931. package/dist/data/test/function/smoothstep__then_3.mcfunction +2 -0
  1932. package/dist/data/test/function/smoothstep__then_5.mcfunction +2 -0
  1933. package/dist/data/test/function/solve2x2_x.mcfunction +17 -0
  1934. package/dist/data/test/function/solve2x2_x__merge_1.mcfunction +12 -0
  1935. package/dist/data/test/function/solve2x2_x__then_0.mcfunction +2 -0
  1936. package/dist/data/test/function/solve2x2_y.mcfunction +17 -0
  1937. package/dist/data/test/function/solve2x2_y__merge_1.mcfunction +12 -0
  1938. package/dist/data/test/function/solve2x2_y__then_0.mcfunction +2 -0
  1939. package/dist/data/test/function/sort2_max.mcfunction +6 -0
  1940. package/dist/data/test/function/sort2_max__merge_1.mcfunction +1 -0
  1941. package/dist/data/test/function/sort2_max__then_0.mcfunction +1 -0
  1942. package/dist/data/test/function/sort2_min.mcfunction +6 -0
  1943. package/dist/data/test/function/sort2_min__merge_1.mcfunction +1 -0
  1944. package/dist/data/test/function/sort2_min__then_0.mcfunction +1 -0
  1945. package/dist/data/test/function/sort3.mcfunction +11 -0
  1946. package/dist/data/test/function/sort3__merge_1.mcfunction +4 -0
  1947. package/dist/data/test/function/sort3__merge_10.mcfunction +1 -0
  1948. package/dist/data/test/function/sort3__merge_3.mcfunction +4 -0
  1949. package/dist/data/test/function/sort3__merge_5.mcfunction +5 -0
  1950. package/dist/data/test/function/sort3__merge_7.mcfunction +5 -0
  1951. package/dist/data/test/function/sort3__then_0.mcfunction +4 -0
  1952. package/dist/data/test/function/sort3__then_2.mcfunction +4 -0
  1953. package/dist/data/test/function/sort3__then_4.mcfunction +4 -0
  1954. package/dist/data/test/function/sort3__then_6.mcfunction +1 -0
  1955. package/dist/data/test/function/sort3__then_9.mcfunction +1 -0
  1956. package/dist/data/test/function/sort4.mcfunction +13 -0
  1957. package/dist/data/test/function/sort4__merge_1.mcfunction +4 -0
  1958. package/dist/data/test/function/sort4__merge_11.mcfunction +5 -0
  1959. package/dist/data/test/function/sort4__merge_14.mcfunction +5 -0
  1960. package/dist/data/test/function/sort4__merge_17.mcfunction +1 -0
  1961. package/dist/data/test/function/sort4__merge_3.mcfunction +4 -0
  1962. package/dist/data/test/function/sort4__merge_5.mcfunction +4 -0
  1963. package/dist/data/test/function/sort4__merge_7.mcfunction +4 -0
  1964. package/dist/data/test/function/sort4__merge_9.mcfunction +5 -0
  1965. package/dist/data/test/function/sort4__then_0.mcfunction +4 -0
  1966. package/dist/data/test/function/sort4__then_10.mcfunction +1 -0
  1967. package/dist/data/test/function/sort4__then_13.mcfunction +1 -0
  1968. package/dist/data/test/function/sort4__then_16.mcfunction +1 -0
  1969. package/dist/data/test/function/sort4__then_2.mcfunction +4 -0
  1970. package/dist/data/test/function/sort4__then_4.mcfunction +4 -0
  1971. package/dist/data/test/function/sort4__then_6.mcfunction +4 -0
  1972. package/dist/data/test/function/sort4__then_8.mcfunction +4 -0
  1973. package/dist/data/test/function/sort5.mcfunction +15 -0
  1974. package/dist/data/test/function/sort5__merge_1.mcfunction +4 -0
  1975. package/dist/data/test/function/sort5__merge_11.mcfunction +4 -0
  1976. package/dist/data/test/function/sort5__merge_13.mcfunction +4 -0
  1977. package/dist/data/test/function/sort5__merge_15.mcfunction +4 -0
  1978. package/dist/data/test/function/sort5__merge_17.mcfunction +5 -0
  1979. package/dist/data/test/function/sort5__merge_19.mcfunction +5 -0
  1980. package/dist/data/test/function/sort5__merge_22.mcfunction +5 -0
  1981. package/dist/data/test/function/sort5__merge_25.mcfunction +5 -0
  1982. package/dist/data/test/function/sort5__merge_28.mcfunction +1 -0
  1983. package/dist/data/test/function/sort5__merge_3.mcfunction +4 -0
  1984. package/dist/data/test/function/sort5__merge_5.mcfunction +4 -0
  1985. package/dist/data/test/function/sort5__merge_7.mcfunction +4 -0
  1986. package/dist/data/test/function/sort5__merge_9.mcfunction +4 -0
  1987. package/dist/data/test/function/sort5__then_0.mcfunction +4 -0
  1988. package/dist/data/test/function/sort5__then_10.mcfunction +4 -0
  1989. package/dist/data/test/function/sort5__then_12.mcfunction +4 -0
  1990. package/dist/data/test/function/sort5__then_14.mcfunction +4 -0
  1991. package/dist/data/test/function/sort5__then_16.mcfunction +4 -0
  1992. package/dist/data/test/function/sort5__then_18.mcfunction +1 -0
  1993. package/dist/data/test/function/sort5__then_2.mcfunction +4 -0
  1994. package/dist/data/test/function/sort5__then_21.mcfunction +1 -0
  1995. package/dist/data/test/function/sort5__then_24.mcfunction +1 -0
  1996. package/dist/data/test/function/sort5__then_27.mcfunction +1 -0
  1997. package/dist/data/test/function/sort5__then_4.mcfunction +4 -0
  1998. package/dist/data/test/function/sort5__then_6.mcfunction +4 -0
  1999. package/dist/data/test/function/sort5__then_8.mcfunction +4 -0
  2000. package/dist/data/test/function/sphere_contains.mcfunction +29 -0
  2001. package/dist/data/test/function/sphere_contains__merge_1.mcfunction +2 -0
  2002. package/dist/data/test/function/sphere_contains__then_0.mcfunction +2 -0
  2003. package/dist/data/test/function/spiral_ring.mcfunction +5 -0
  2004. package/dist/data/test/function/spiral_ring__merge_1.mcfunction +13 -0
  2005. package/dist/data/test/function/spiral_ring__then_0.mcfunction +2 -0
  2006. package/dist/data/test/function/spring_force.mcfunction +11 -0
  2007. package/dist/data/test/function/spring_update_v.mcfunction +18 -0
  2008. package/dist/data/test/function/sqrt_fixed.mcfunction +8 -0
  2009. package/dist/data/test/function/sqrt_fx.mcfunction +11 -0
  2010. package/dist/data/test/function/start.mcfunction +8 -0
  2011. package/dist/data/test/function/stop.mcfunction +2 -0
  2012. package/dist/data/test/function/stop__foreach_t0.mcfunction +1 -0
  2013. package/dist/data/test/function/sub2d_x.mcfunction +5 -0
  2014. package/dist/data/test/function/sub2d_y.mcfunction +5 -0
  2015. package/dist/data/test/function/sub3d_x.mcfunction +5 -0
  2016. package/dist/data/test/function/sub3d_y.mcfunction +5 -0
  2017. package/dist/data/test/function/sub3d_z.mcfunction +5 -0
  2018. package/dist/data/test/function/terrain_height.mcfunction +24 -0
  2019. package/dist/data/test/function/tick_to_ms.mcfunction +5 -0
  2020. package/dist/data/test/function/tick_to_seconds.mcfunction +5 -0
  2021. package/dist/data/test/function/tile_center.mcfunction +10 -0
  2022. package/dist/data/test/function/tile_of.mcfunction +7 -0
  2023. package/dist/data/test/function/tile_of__merge_1.mcfunction +7 -0
  2024. package/dist/data/test/function/tile_of__then_0.mcfunction +3 -0
  2025. package/dist/data/test/function/timer/done.mcfunction +5 -0
  2026. package/dist/data/test/function/timer/elapsed.mcfunction +2 -0
  2027. package/dist/data/test/function/timer/new.mcfunction +5 -0
  2028. package/dist/data/test/function/timer/pause.mcfunction +1 -0
  2029. package/dist/data/test/function/timer/remaining.mcfunction +10 -0
  2030. package/dist/data/test/function/timer/remaining__merge_1.mcfunction +2 -0
  2031. package/dist/data/test/function/timer/remaining__then_0.mcfunction +1 -0
  2032. package/dist/data/test/function/timer/reset.mcfunction +1 -0
  2033. package/dist/data/test/function/timer/start.mcfunction +1 -0
  2034. package/dist/data/test/function/timer/tick.mcfunction +9 -0
  2035. package/dist/data/test/function/timer/tick__merge_1.mcfunction +1 -0
  2036. package/dist/data/test/function/timer/tick__merge_3.mcfunction +1 -0
  2037. package/dist/data/test/function/timer/tick__then_0.mcfunction +4 -0
  2038. package/dist/data/test/function/timer/tick__then_2.mcfunction +4 -0
  2039. package/dist/data/test/function/uniform_frac.mcfunction +12 -0
  2040. package/dist/data/test/function/uniform_frac__merge_1.mcfunction +4 -0
  2041. package/dist/data/test/function/uniform_frac__then_0.mcfunction +4 -0
  2042. package/dist/data/test/function/uniform_int.mcfunction +14 -0
  2043. package/dist/data/test/function/uniform_int__merge_1.mcfunction +9 -0
  2044. package/dist/data/test/function/uniform_int__then_0.mcfunction +4 -0
  2045. package/dist/data/test/function/uniform_scale.mcfunction +8 -0
  2046. package/dist/data/test/function/update_pos.mcfunction +5 -0
  2047. package/dist/data/test/function/value_noise_1d.mcfunction +14 -0
  2048. package/dist/data/test/function/value_noise_1d__merge_1.mcfunction +39 -0
  2049. package/dist/data/test/function/value_noise_1d__then_0.mcfunction +7 -0
  2050. package/dist/data/test/function/value_noise_2d.mcfunction +15 -0
  2051. package/dist/data/test/function/value_noise_2d__merge_1.mcfunction +13 -0
  2052. package/dist/data/test/function/value_noise_2d__merge_3.mcfunction +98 -0
  2053. package/dist/data/test/function/value_noise_2d__then_0.mcfunction +7 -0
  2054. package/dist/data/test/function/value_noise_2d__then_2.mcfunction +7 -0
  2055. package/dist/data/test/function/water_drag_fx.mcfunction +2 -0
  2056. package/dist/data/test/function/weighted2.mcfunction +17 -0
  2057. package/dist/data/test/function/weighted2__merge_1.mcfunction +6 -0
  2058. package/dist/data/test/function/weighted2__merge_3.mcfunction +2 -0
  2059. package/dist/data/test/function/weighted2__then_0.mcfunction +4 -0
  2060. package/dist/data/test/function/weighted2__then_2.mcfunction +2 -0
  2061. package/dist/data/test/function/weighted3.mcfunction +20 -0
  2062. package/dist/data/test/function/weighted3__merge_1.mcfunction +7 -0
  2063. package/dist/data/test/function/weighted3__merge_3.mcfunction +6 -0
  2064. package/dist/data/test/function/weighted3__merge_6.mcfunction +2 -0
  2065. package/dist/data/test/function/weighted3__then_0.mcfunction +4 -0
  2066. package/dist/data/test/function/weighted3__then_2.mcfunction +2 -0
  2067. package/dist/data/test/function/weighted3__then_5.mcfunction +2 -0
  2068. package/dist/data/turret/function/__load.mcfunction +5 -0
  2069. package/dist/data/turret/function/__tick.mcfunction +4 -0
  2070. package/dist/data/turret/function/__trigger_deploy_turret_dispatch.mcfunction +4 -0
  2071. package/dist/data/turret/function/deploy_turret.mcfunction +8 -0
  2072. package/dist/data/turret/function/turret_tick/at_1.mcfunction +2 -0
  2073. package/dist/data/turret/function/turret_tick/foreach_0.mcfunction +2 -0
  2074. package/dist/data/turret/function/turret_tick/foreach_2.mcfunction +2 -0
  2075. package/dist/data/turret/function/turret_tick/tick_body.mcfunction +3 -0
  2076. package/dist/data/turret/function/turret_tick/tick_skip.mcfunction +1 -0
  2077. package/dist/data/turret/function/turret_tick.mcfunction +5 -0
  2078. package/dist/diagnostics/index.d.ts +44 -0
  2079. package/dist/diagnostics/index.js +140 -0
  2080. package/dist/events/types.d.ts +35 -0
  2081. package/dist/events/types.js +59 -0
  2082. package/dist/formatter/index.d.ts +1 -0
  2083. package/dist/formatter/index.js +26 -0
  2084. package/dist/gcd2.map.json +15 -0
  2085. package/dist/gcd3.map.json +17 -0
  2086. package/dist/gcd_test.map.json +15 -0
  2087. package/dist/index.d.ts +62 -0
  2088. package/dist/ir/builder.d.ts +33 -0
  2089. package/dist/ir/builder.js +99 -0
  2090. package/dist/ir/types.d.ts +132 -0
  2091. package/dist/ir/types.js +15 -0
  2092. package/dist/isqrttest.map.json +15 -0
  2093. package/dist/lexer/index.d.ts +37 -0
  2094. package/dist/lexer/index.js +569 -0
  2095. package/dist/lowering/index.d.ts +188 -0
  2096. package/dist/lowering/index.js +3405 -0
  2097. package/dist/mathtest.map.json +6 -0
  2098. package/dist/mc-test/client.d.ts +128 -0
  2099. package/dist/mc-test/client.js +174 -0
  2100. package/dist/mc-test/runner.d.ts +28 -0
  2101. package/dist/mc-test/runner.js +150 -0
  2102. package/dist/mc-test/setup.d.ts +11 -0
  2103. package/dist/mc-test/setup.js +98 -0
  2104. package/dist/mc-validator/index.d.ts +17 -0
  2105. package/dist/mc-validator/index.js +322 -0
  2106. package/dist/mypack.map.json +27 -0
  2107. package/dist/nbt/index.d.ts +86 -0
  2108. package/dist/nbt/index.js +250 -0
  2109. package/dist/optimizer/commands.d.ts +38 -0
  2110. package/dist/optimizer/commands.js +451 -0
  2111. package/dist/optimizer/dce.d.ts +34 -0
  2112. package/dist/optimizer/dce.js +639 -0
  2113. package/dist/optimizer/passes.d.ts +34 -0
  2114. package/dist/optimizer/passes.js +243 -0
  2115. package/dist/optimizer/structure.d.ts +9 -0
  2116. package/dist/optimizer/structure.js +356 -0
  2117. package/dist/pack.mcmeta +6 -0
  2118. package/dist/parser/index.d.ts +93 -0
  2119. package/dist/parser/index.js +1687 -0
  2120. package/dist/repl.d.ts +16 -0
  2121. package/dist/repl.js +165 -0
  2122. package/dist/reqtest.map.json +4 -0
  2123. package/dist/reqtest2.map.json +4 -0
  2124. package/dist/runtime/index.d.ts +107 -0
  2125. package/dist/runtime/index.js +1409 -0
  2126. package/dist/runtime.map.json +7 -0
  2127. package/dist/src/__tests__/array-param.test.d.ts +9 -0
  2128. package/dist/src/__tests__/array-param.test.js +69 -0
  2129. package/dist/src/__tests__/codegen.test.d.ts +1 -0
  2130. package/dist/src/__tests__/codegen.test.js +152 -0
  2131. package/dist/src/__tests__/debug-compile.test.d.ts +1 -0
  2132. package/dist/src/__tests__/debug-compile.test.js +24 -0
  2133. package/dist/src/__tests__/debug-compile2.test.d.ts +1 -0
  2134. package/dist/src/__tests__/debug-compile2.test.js +19 -0
  2135. package/dist/src/__tests__/debug-compile3.test.d.ts +1 -0
  2136. package/dist/src/__tests__/debug-compile3.test.js +22 -0
  2137. package/dist/src/__tests__/debug-wm.test.d.ts +1 -0
  2138. package/dist/src/__tests__/debug-wm.test.js +50 -0
  2139. package/dist/src/__tests__/debug_gen.d.ts +1 -0
  2140. package/dist/src/__tests__/debug_gen.js +24 -0
  2141. package/dist/src/__tests__/debug_scoreboard.test.d.ts +1 -0
  2142. package/dist/src/__tests__/debug_scoreboard.test.js +19 -0
  2143. package/dist/src/__tests__/debug_scoreboard2.test.d.ts +1 -0
  2144. package/dist/src/__tests__/debug_scoreboard2.test.js +27 -0
  2145. package/dist/src/__tests__/debug_scoreboard3.test.d.ts +1 -0
  2146. package/dist/src/__tests__/debug_scoreboard3.test.js +37 -0
  2147. package/dist/src/__tests__/e2e.test.d.ts +6 -0
  2148. package/dist/src/__tests__/e2e.test.js +1789 -0
  2149. package/dist/src/__tests__/entity-types.test.d.ts +1 -0
  2150. package/dist/src/__tests__/entity-types.test.js +203 -0
  2151. package/dist/src/__tests__/lowering.test.d.ts +1 -0
  2152. package/dist/src/__tests__/lowering.test.js +1015 -0
  2153. package/dist/src/__tests__/macro.test.d.ts +8 -0
  2154. package/dist/src/__tests__/macro.test.js +306 -0
  2155. package/dist/src/__tests__/nbt.test.d.ts +1 -0
  2156. package/dist/src/__tests__/nbt.test.js +82 -0
  2157. package/dist/src/__tests__/optimizer/lir/peephole.test.js +92 -0
  2158. package/dist/src/__tests__/optimizer-advanced.test.d.ts +1 -0
  2159. package/dist/src/__tests__/optimizer-advanced.test.js +124 -0
  2160. package/dist/src/__tests__/optimizer.test.d.ts +1 -0
  2161. package/dist/src/__tests__/optimizer.test.js +149 -0
  2162. package/dist/src/__tests__/runtime.test.d.ts +1 -0
  2163. package/dist/src/__tests__/runtime.test.js +289 -0
  2164. package/dist/src/__tests__/stdlib/math.test.d.ts +5 -0
  2165. package/dist/src/__tests__/stdlib/math.test.js +121 -0
  2166. package/dist/src/__tests__/stdlib-advanced.test.d.ts +4 -0
  2167. package/dist/src/__tests__/stdlib-advanced.test.js +374 -0
  2168. package/dist/src/__tests__/stdlib-bigint.test.d.ts +7 -0
  2169. package/dist/src/__tests__/stdlib-bigint.test.js +426 -0
  2170. package/dist/src/__tests__/stdlib-math.test.d.ts +7 -0
  2171. package/dist/src/__tests__/stdlib-math.test.js +351 -0
  2172. package/dist/src/__tests__/stdlib-vec.test.d.ts +4 -0
  2173. package/dist/src/__tests__/stdlib-vec.test.js +263 -0
  2174. package/dist/src/__tests__/structure-optimizer.test.d.ts +1 -0
  2175. package/dist/src/__tests__/structure-optimizer.test.js +33 -0
  2176. package/dist/src/__tests__/timer-debug.test.d.ts +1 -0
  2177. package/dist/src/__tests__/timer-debug.test.js +33 -0
  2178. package/dist/src/__tests__/var-allocator.test.d.ts +1 -0
  2179. package/dist/src/__tests__/var-allocator.test.js +69 -0
  2180. package/dist/src/ast/types.d.ts +7 -0
  2181. package/dist/src/codegen/cmdblock/index.d.ts +26 -0
  2182. package/dist/src/codegen/cmdblock/index.js +45 -0
  2183. package/dist/src/codegen/mcfunction/index.d.ts +40 -0
  2184. package/dist/src/codegen/mcfunction/index.js +606 -0
  2185. package/dist/src/codegen/structure/index.d.ts +24 -0
  2186. package/dist/src/codegen/structure/index.js +279 -0
  2187. package/dist/src/codegen/var-allocator.d.ts +45 -0
  2188. package/dist/src/codegen/var-allocator.js +104 -0
  2189. package/dist/src/hir/lower.js +51 -0
  2190. package/dist/src/ir/builder.d.ts +33 -0
  2191. package/dist/src/ir/builder.js +99 -0
  2192. package/dist/src/ir/types.d.ts +132 -0
  2193. package/dist/src/ir/types.js +15 -0
  2194. package/dist/src/lowering/index.d.ts +188 -0
  2195. package/dist/src/lowering/index.js +3405 -0
  2196. package/dist/src/lsp/main.js +0 -0
  2197. package/dist/src/mir/lower.js +93 -12
  2198. package/dist/src/optimizer/commands.d.ts +38 -0
  2199. package/dist/src/optimizer/commands.js +451 -0
  2200. package/dist/src/optimizer/lir/peephole.d.ts +13 -4
  2201. package/dist/src/optimizer/lir/peephole.js +44 -5
  2202. package/dist/src/optimizer/passes.d.ts +34 -0
  2203. package/dist/src/optimizer/passes.js +243 -0
  2204. package/dist/src/optimizer/structure.d.ts +9 -0
  2205. package/dist/src/optimizer/structure.js +356 -0
  2206. package/dist/src/parser/index.js +12 -0
  2207. package/dist/src2/__tests__/e2e/basic.test.d.ts +8 -0
  2208. package/dist/src2/__tests__/e2e/basic.test.js +140 -0
  2209. package/dist/src2/__tests__/e2e/macros.test.d.ts +9 -0
  2210. package/dist/src2/__tests__/e2e/macros.test.js +182 -0
  2211. package/dist/src2/__tests__/e2e/migrate.test.d.ts +13 -0
  2212. package/dist/src2/__tests__/e2e/migrate.test.js +2739 -0
  2213. package/dist/src2/__tests__/hir/desugar.test.d.ts +1 -0
  2214. package/dist/src2/__tests__/hir/desugar.test.js +234 -0
  2215. package/dist/src2/__tests__/lir/lower.test.d.ts +1 -0
  2216. package/dist/src2/__tests__/lir/lower.test.js +559 -0
  2217. package/dist/src2/__tests__/lir/types.test.d.ts +1 -0
  2218. package/dist/src2/__tests__/lir/types.test.js +185 -0
  2219. package/dist/src2/__tests__/lir/verify.test.d.ts +1 -0
  2220. package/dist/src2/__tests__/lir/verify.test.js +221 -0
  2221. package/dist/src2/__tests__/mir/arithmetic.test.d.ts +1 -0
  2222. package/dist/src2/__tests__/mir/arithmetic.test.js +130 -0
  2223. package/dist/src2/__tests__/mir/control-flow.test.d.ts +1 -0
  2224. package/dist/src2/__tests__/mir/control-flow.test.js +205 -0
  2225. package/dist/src2/__tests__/mir/verify.test.d.ts +1 -0
  2226. package/dist/src2/__tests__/mir/verify.test.js +223 -0
  2227. package/dist/src2/__tests__/optimizer/block_merge.test.d.ts +1 -0
  2228. package/dist/src2/__tests__/optimizer/block_merge.test.js +78 -0
  2229. package/dist/src2/__tests__/optimizer/branch_simplify.test.d.ts +1 -0
  2230. package/dist/src2/__tests__/optimizer/branch_simplify.test.js +58 -0
  2231. package/dist/src2/__tests__/optimizer/constant_fold.test.d.ts +1 -0
  2232. package/dist/src2/__tests__/optimizer/constant_fold.test.js +131 -0
  2233. package/dist/src2/__tests__/optimizer/copy_prop.test.d.ts +1 -0
  2234. package/dist/src2/__tests__/optimizer/copy_prop.test.js +91 -0
  2235. package/dist/src2/__tests__/optimizer/dce.test.d.ts +1 -0
  2236. package/dist/src2/__tests__/optimizer/dce.test.js +76 -0
  2237. package/dist/src2/__tests__/optimizer/pipeline.test.d.ts +1 -0
  2238. package/dist/src2/__tests__/optimizer/pipeline.test.js +102 -0
  2239. package/dist/src2/emit/compile.d.ts +19 -0
  2240. package/dist/src2/emit/compile.js +80 -0
  2241. package/dist/src2/emit/index.d.ts +17 -0
  2242. package/dist/src2/emit/index.js +172 -0
  2243. package/dist/src2/hir/lower.d.ts +15 -0
  2244. package/dist/src2/hir/lower.js +378 -0
  2245. package/dist/src2/hir/types.d.ts +373 -0
  2246. package/dist/src2/hir/types.js +16 -0
  2247. package/dist/src2/lir/lower.d.ts +15 -0
  2248. package/dist/src2/lir/lower.js +453 -0
  2249. package/dist/src2/lir/types.d.ts +136 -0
  2250. package/dist/src2/lir/types.js +11 -0
  2251. package/dist/src2/lir/verify.d.ts +14 -0
  2252. package/dist/src2/lir/verify.js +113 -0
  2253. package/dist/src2/mir/lower.d.ts +9 -0
  2254. package/dist/src2/mir/lower.js +1030 -0
  2255. package/dist/src2/mir/macro.d.ts +22 -0
  2256. package/dist/src2/mir/macro.js +168 -0
  2257. package/dist/src2/mir/types.d.ts +183 -0
  2258. package/dist/src2/mir/types.js +11 -0
  2259. package/dist/src2/mir/verify.d.ts +16 -0
  2260. package/dist/src2/mir/verify.js +216 -0
  2261. package/dist/src2/optimizer/block_merge.d.ts +12 -0
  2262. package/dist/src2/optimizer/block_merge.js +84 -0
  2263. package/dist/src2/optimizer/branch_simplify.d.ts +9 -0
  2264. package/dist/src2/optimizer/branch_simplify.js +28 -0
  2265. package/dist/src2/optimizer/constant_fold.d.ts +10 -0
  2266. package/dist/src2/optimizer/constant_fold.js +85 -0
  2267. package/dist/src2/optimizer/copy_prop.d.ts +9 -0
  2268. package/dist/src2/optimizer/copy_prop.js +113 -0
  2269. package/dist/src2/optimizer/dce.d.ts +8 -0
  2270. package/dist/src2/optimizer/dce.js +155 -0
  2271. package/dist/src2/optimizer/pipeline.d.ts +10 -0
  2272. package/dist/src2/optimizer/pipeline.js +42 -0
  2273. package/dist/swap_test.map.json +14 -0
  2274. package/dist/tsconfig.tsbuildinfo +1 -0
  2275. package/dist/typechecker/index.d.ts +61 -0
  2276. package/dist/typechecker/index.js +1034 -0
  2277. package/dist/types/entity-hierarchy.d.ts +29 -0
  2278. package/dist/types/entity-hierarchy.js +107 -0
  2279. package/editors/vscode/package-lock.json +3 -3
  2280. package/editors/vscode/package.json +1 -1
  2281. package/examples/math-demo.mcrs +127 -0
  2282. package/examples/showcase.mcrs +64 -109
  2283. package/package.json +1 -1
  2284. package/src/__tests__/array-param.test.ts +77 -0
  2285. package/src/__tests__/e2e/for-in-array.test.ts +62 -0
  2286. package/src/__tests__/optimizer/lir/peephole.test.ts +100 -0
  2287. package/src/__tests__/stdlib/math.test.ts +102 -0
  2288. package/src/ast/types.ts +1 -0
  2289. package/src/hir/lower.ts +52 -0
  2290. package/src/mir/lower.ts +109 -11
  2291. package/src/optimizer/lir/peephole.ts +50 -5
  2292. package/src/parser/index.ts +13 -0
  2293. package/src/stdlib/bigint.mcrs +128 -100
  2294. package/src/stdlib/easing.mcrs +182 -0
  2295. package/src/stdlib/list.mcrs +76 -0
  2296. package/src/stdlib/matrix.mcrs +108 -0
  2297. package/src/stdlib/noise.mcrs +153 -0
  2298. package/src/stdlib/physics.mcrs +134 -0
@@ -0,0 +1,3405 @@
1
+ "use strict";
2
+ /**
3
+ * RedScript Lowering
4
+ *
5
+ * Transforms AST into IR (Three-Address Code).
6
+ * Handles control flow, function extraction for foreach, and builtin calls.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.Lowering = exports.LOWERING_OBJ = void 0;
43
+ exports.setScoreboardObjective = setScoreboardObjective;
44
+ const builder_1 = require("../ir/builder");
45
+ const diagnostics_1 = require("../diagnostics");
46
+ const path = __importStar(require("path"));
47
+ const types_1 = require("../events/types");
48
+ const entity_hierarchy_1 = require("../types/entity-hierarchy");
49
+ // ---------------------------------------------------------------------------
50
+ // Macro-aware builtins (MC 1.20.2+)
51
+ // These builtins generate commands where parameter variables cannot appear
52
+ // as literal values (coordinates, entity types, block types), so they
53
+ // require MC macro syntax when called with runtime variables.
54
+ // ---------------------------------------------------------------------------
55
+ // All builtins support macro parameters - any arg that's a function param
56
+ // will automatically use MC 1.20.2+ macro syntax when needed
57
+ // ---------------------------------------------------------------------------
58
+ // Scoreboard Objective
59
+ // Set per-compilation via setScoreboardObjective() — defaults to 'rs'.
60
+ // ---------------------------------------------------------------------------
61
+ /** Current scoreboard objective. Set once per compile() call. */
62
+ exports.LOWERING_OBJ = 'rs';
63
+ function setScoreboardObjective(obj) { exports.LOWERING_OBJ = obj; }
64
+ // ---------------------------------------------------------------------------
65
+ // Builtin Functions
66
+ // ---------------------------------------------------------------------------
67
+ const BUILTINS = {
68
+ say: ([msg]) => `say ${msg}`,
69
+ tell: ([sel, msg]) => `tellraw ${sel} {"text":"${msg}"}`,
70
+ tellraw: ([sel, msg]) => `tellraw ${sel} {"text":"${msg}"}`,
71
+ title: ([sel, msg]) => `title ${sel} title {"text":"${msg}"}`,
72
+ actionbar: ([sel, msg]) => `title ${sel} actionbar {"text":"${msg}"}`,
73
+ subtitle: ([sel, msg]) => `title ${sel} subtitle {"text":"${msg}"}`,
74
+ title_times: ([sel, fadeIn, stay, fadeOut]) => `title ${sel} times ${fadeIn} ${stay} ${fadeOut}`,
75
+ announce: ([msg]) => `tellraw @a {"text":"${msg}"}`,
76
+ give: ([sel, item, count, nbt]) => nbt ? `give ${sel} ${item}${nbt} ${count ?? '1'}` : `give ${sel} ${item} ${count ?? '1'}`,
77
+ kill: ([sel]) => `kill ${sel ?? '@s'}`,
78
+ effect: ([sel, eff, dur, amp]) => `effect give ${sel} ${eff} ${dur ?? '30'} ${amp ?? '0'}`,
79
+ effect_clear: ([sel, eff]) => eff ? `effect clear ${sel} ${eff}` : `effect clear ${sel}`,
80
+ summon: ([type, x, y, z, nbt]) => {
81
+ const pos = [x ?? '~', y ?? '~', z ?? '~'].join(' ');
82
+ return nbt ? `summon ${type} ${pos} ${nbt}` : `summon ${type} ${pos}`;
83
+ },
84
+ particle: ([name, x, y, z, dx, dy, dz, speed, count]) => {
85
+ const pos = [x ?? '~', y ?? '~', z ?? '~'].join(' ');
86
+ // dx/dy/dz/speed/count are optional; omit trailing undefineds
87
+ const extra = [dx, dy, dz, speed, count].filter(v => v !== undefined && v !== null);
88
+ return extra.length > 0
89
+ ? `particle ${name} ${pos} ${extra.join(' ')}`
90
+ : `particle ${name} ${pos}`;
91
+ },
92
+ playsound: ([sound, source, sel, x, y, z, volume, pitch, minVolume]) => ['playsound', sound, source, sel, x, y, z, volume, pitch, minVolume].filter(Boolean).join(' '),
93
+ tp: () => null, // Special handling
94
+ tp_to: () => null, // Special handling (deprecated alias)
95
+ clear: ([sel, item]) => `clear ${sel} ${item ?? ''}`.trim(),
96
+ weather: ([type]) => `weather ${type}`,
97
+ time_set: ([val]) => `time set ${val}`,
98
+ time_add: ([val]) => `time add ${val}`,
99
+ gamerule: ([rule, val]) => `gamerule ${rule} ${val}`,
100
+ tag_add: ([sel, tag]) => `tag ${sel} add ${tag}`,
101
+ tag_remove: ([sel, tag]) => `tag ${sel} remove ${tag}`,
102
+ kick: ([player, reason]) => `kick ${player} ${reason ?? ''}`.trim(),
103
+ setblock: ([x, y, z, block]) => `setblock ${x} ${y} ${z} ${block}`,
104
+ fill: ([x1, y1, z1, x2, y2, z2, block]) => `fill ${x1} ${y1} ${z1} ${x2} ${y2} ${z2} ${block}`,
105
+ clone: ([x1, y1, z1, x2, y2, z2, dx, dy, dz]) => `clone ${x1} ${y1} ${z1} ${x2} ${y2} ${z2} ${dx} ${dy} ${dz}`,
106
+ difficulty: ([level]) => `difficulty ${level}`,
107
+ xp_add: ([sel, amount, type]) => `xp add ${sel} ${amount} ${type ?? 'points'}`,
108
+ xp_set: ([sel, amount, type]) => `xp set ${sel} ${amount} ${type ?? 'points'}`,
109
+ random: () => null, // Special handling
110
+ random_native: () => null, // Special handling
111
+ random_sequence: () => null, // Special handling
112
+ scoreboard_get: () => null, // Special handling (returns value)
113
+ scoreboard_set: () => null, // Special handling
114
+ score: () => null, // Special handling (same as scoreboard_get)
115
+ scoreboard_display: () => null, // Special handling
116
+ scoreboard_hide: () => null, // Special handling
117
+ scoreboard_add_objective: () => null, // Special handling
118
+ scoreboard_remove_objective: () => null, // Special handling
119
+ bossbar_add: () => null, // Special handling
120
+ bossbar_set_value: () => null, // Special handling
121
+ bossbar_set_max: () => null, // Special handling
122
+ bossbar_set_color: () => null, // Special handling
123
+ bossbar_set_style: () => null, // Special handling
124
+ bossbar_set_visible: () => null, // Special handling
125
+ bossbar_set_players: () => null, // Special handling
126
+ bossbar_remove: () => null, // Special handling
127
+ bossbar_get_value: () => null, // Special handling
128
+ team_add: () => null, // Special handling
129
+ team_remove: () => null, // Special handling
130
+ team_join: () => null, // Special handling
131
+ team_leave: () => null, // Special handling
132
+ team_option: () => null, // Special handling
133
+ data_get: () => null, // Special handling (returns value from NBT)
134
+ data_merge: () => null, // Special handling (merge NBT)
135
+ set_new: () => null, // Special handling (returns set ID)
136
+ set_add: () => null, // Special handling
137
+ set_contains: () => null, // Special handling (returns 1/0)
138
+ set_remove: () => null, // Special handling
139
+ set_clear: () => null, // Special handling
140
+ setTimeout: () => null, // Special handling
141
+ setInterval: () => null, // Special handling
142
+ clearInterval: () => null, // Special handling
143
+ storage_get_int: () => null, // Special handling (dynamic NBT array read via macro)
144
+ storage_set_array: () => null, // Special handling (write literal NBT array to storage)
145
+ storage_set_int: () => null, // Special handling (dynamic NBT array write via macro)
146
+ };
147
+ function getSpan(node) {
148
+ return node?.span;
149
+ }
150
+ const NAMESPACED_ENTITY_TYPE_RE = /^[a-z0-9_.-]+:[a-z0-9_./-]+$/;
151
+ const BARE_ENTITY_TYPE_RE = /^[a-z0-9_./-]+$/;
152
+ const ENTITY_TO_MC_TYPE = {
153
+ Player: 'minecraft:player',
154
+ Zombie: 'minecraft:zombie',
155
+ Skeleton: 'minecraft:skeleton',
156
+ Creeper: 'minecraft:creeper',
157
+ Spider: 'minecraft:spider',
158
+ Enderman: 'minecraft:enderman',
159
+ Blaze: 'minecraft:blaze',
160
+ Witch: 'minecraft:witch',
161
+ Slime: 'minecraft:slime',
162
+ ZombieVillager: 'minecraft:zombie_villager',
163
+ Husk: 'minecraft:husk',
164
+ Drowned: 'minecraft:drowned',
165
+ Stray: 'minecraft:stray',
166
+ WitherSkeleton: 'minecraft:wither_skeleton',
167
+ CaveSpider: 'minecraft:cave_spider',
168
+ Pig: 'minecraft:pig',
169
+ Cow: 'minecraft:cow',
170
+ Sheep: 'minecraft:sheep',
171
+ Chicken: 'minecraft:chicken',
172
+ Villager: 'minecraft:villager',
173
+ WanderingTrader: 'minecraft:wandering_trader',
174
+ ArmorStand: 'minecraft:armor_stand',
175
+ Item: 'minecraft:item',
176
+ Arrow: 'minecraft:arrow',
177
+ };
178
+ function normalizeSelector(selector, warnings) {
179
+ return selector.replace(/type=([^,\]]+)/g, (match, entityType) => {
180
+ const trimmed = entityType.trim();
181
+ if (trimmed.includes(':')) {
182
+ if (!NAMESPACED_ENTITY_TYPE_RE.test(trimmed)) {
183
+ throw new diagnostics_1.DiagnosticError('LoweringError', `Invalid entity type format: "${trimmed}" (must be namespace:name)`, { line: 1, col: 1 });
184
+ }
185
+ return match;
186
+ }
187
+ if (!BARE_ENTITY_TYPE_RE.test(trimmed)) {
188
+ throw new diagnostics_1.DiagnosticError('LoweringError', `Invalid entity type format: "${trimmed}" (must be namespace:name or bare_name)`, { line: 1, col: 1 });
189
+ }
190
+ warnings.push({
191
+ message: `Unnamespaced entity type "${trimmed}", auto-qualifying to "minecraft:${trimmed}"`,
192
+ code: 'W_UNNAMESPACED_TYPE',
193
+ });
194
+ return `type=minecraft:${trimmed}`;
195
+ });
196
+ }
197
+ function emitCoord(component) {
198
+ switch (component.kind) {
199
+ case 'absolute':
200
+ return String(component.value);
201
+ case 'relative':
202
+ return component.offset === 0 ? '~' : `~${component.offset}`;
203
+ case 'local':
204
+ return component.offset === 0 ? '^' : `^${component.offset}`;
205
+ }
206
+ }
207
+ function emitBlockPos(pos) {
208
+ return `${emitCoord(pos.x)} ${emitCoord(pos.y)} ${emitCoord(pos.z)}`;
209
+ }
210
+ // ---------------------------------------------------------------------------
211
+ // Lowering Class
212
+ // ---------------------------------------------------------------------------
213
+ class Lowering {
214
+ /** Unique IR variable name for a local variable, scoped to the current function.
215
+ * Prevents cross-function scoreboard slot collisions: $fn_x ≠ $gn_x.
216
+ * Only applies to user-defined locals/params; internal slots ($p0, $ret) are
217
+ * intentionally global (calling convention). */
218
+ fnVar(name) {
219
+ return `$${this.currentFn}_${name}`;
220
+ }
221
+ currentEntityContext() {
222
+ return this.entityContextStack.length > 0
223
+ ? this.entityContextStack[this.entityContextStack.length - 1]
224
+ : 'Entity';
225
+ }
226
+ constructor(namespace, sourceRanges = []) {
227
+ this.functions = [];
228
+ this.globals = [];
229
+ this.globalNames = new Map();
230
+ this.fnDecls = new Map();
231
+ this.implMethods = new Map();
232
+ this.specializedFunctions = new Map();
233
+ this.currentFn = '';
234
+ this.foreachCounter = 0;
235
+ this.lambdaCounter = 0;
236
+ this.timeoutCounter = 0;
237
+ this.intervalCounter = 0;
238
+ this.warnings = [];
239
+ // Entity type context stack for W_IMPOSSIBLE_AS warnings
240
+ this.entityContextStack = [];
241
+ this.varMap = new Map();
242
+ this.lambdaBindings = new Map();
243
+ this.intervalBindings = new Map();
244
+ this.intervalFunctions = new Map();
245
+ this.currentCallbackBindings = new Map();
246
+ this.currentContext = {};
247
+ this.blockPosVars = new Map();
248
+ // Struct definitions: name → { fieldName: TypeNode }
249
+ this.structDefs = new Map();
250
+ // Full struct declarations for field iteration
251
+ this.structDecls = new Map();
252
+ this.enumDefs = new Map();
253
+ this.functionDefaults = new Map();
254
+ this.constValues = new Map();
255
+ this.stringValues = new Map();
256
+ // Variable types: varName → TypeNode
257
+ this.varTypes = new Map();
258
+ // Float variables (stored as fixed-point × 1000)
259
+ this.floatVars = new Set();
260
+ // World object counter for unique tags
261
+ this.worldObjCounter = 0;
262
+ // Loop context stack for break/continue
263
+ this.loopStack = [];
264
+ // MC 1.20.2+ macro function support
265
+ // Names of params in the current function being lowered
266
+ this.currentFnParamNames = new Set();
267
+ // Params in the current function that need macro treatment (used in literal positions)
268
+ this.currentFnMacroParams = new Set();
269
+ // Global registry: fnName → macroParamNames (populated by pre-scan + lowering)
270
+ this.macroFunctionInfo = new Map();
271
+ this.namespace = namespace;
272
+ this.sourceRanges = sourceRanges;
273
+ LoweringBuilder.resetTempCounter();
274
+ }
275
+ // ---------------------------------------------------------------------------
276
+ // MC Macro pre-scan: identify which function params need macro treatment
277
+ // ---------------------------------------------------------------------------
278
+ preScanMacroFunctions(program) {
279
+ for (const fn of program.declarations) {
280
+ const paramNames = new Set(fn.params.map(p => p.name));
281
+ const macroParams = new Set();
282
+ this.preScanStmts(fn.body, paramNames, macroParams);
283
+ if (macroParams.size > 0) {
284
+ this.macroFunctionInfo.set(fn.name, [...macroParams]);
285
+ }
286
+ }
287
+ for (const implBlock of program.implBlocks ?? []) {
288
+ for (const method of implBlock.methods) {
289
+ const paramNames = new Set(method.params.map(p => p.name));
290
+ const macroParams = new Set();
291
+ this.preScanStmts(method.body, paramNames, macroParams);
292
+ if (macroParams.size > 0) {
293
+ this.macroFunctionInfo.set(`${implBlock.typeName}_${method.name}`, [...macroParams]);
294
+ }
295
+ }
296
+ }
297
+ }
298
+ preScanStmts(stmts, paramNames, macroParams) {
299
+ for (const stmt of stmts) {
300
+ this.preScanStmt(stmt, paramNames, macroParams);
301
+ }
302
+ }
303
+ preScanStmt(stmt, paramNames, macroParams) {
304
+ switch (stmt.kind) {
305
+ case 'expr':
306
+ this.preScanExpr(stmt.expr, paramNames, macroParams);
307
+ break;
308
+ case 'let':
309
+ this.preScanExpr(stmt.init, paramNames, macroParams);
310
+ break;
311
+ case 'return':
312
+ if (stmt.value)
313
+ this.preScanExpr(stmt.value, paramNames, macroParams);
314
+ break;
315
+ case 'if':
316
+ this.preScanExpr(stmt.cond, paramNames, macroParams);
317
+ this.preScanStmts(stmt.then, paramNames, macroParams);
318
+ if (stmt.else_)
319
+ this.preScanStmts(stmt.else_, paramNames, macroParams);
320
+ break;
321
+ case 'while':
322
+ this.preScanExpr(stmt.cond, paramNames, macroParams);
323
+ this.preScanStmts(stmt.body, paramNames, macroParams);
324
+ break;
325
+ case 'for':
326
+ if (stmt.init)
327
+ this.preScanStmt(stmt.init, paramNames, macroParams);
328
+ this.preScanExpr(stmt.cond, paramNames, macroParams);
329
+ this.preScanStmts(stmt.body, paramNames, macroParams);
330
+ break;
331
+ case 'for_range':
332
+ this.preScanStmts(stmt.body, paramNames, macroParams);
333
+ break;
334
+ case 'foreach':
335
+ this.preScanStmts(stmt.body, paramNames, macroParams);
336
+ break;
337
+ case 'match':
338
+ this.preScanExpr(stmt.expr, paramNames, macroParams);
339
+ for (const arm of stmt.arms) {
340
+ this.preScanStmts(arm.body, paramNames, macroParams);
341
+ }
342
+ break;
343
+ case 'as_block':
344
+ case 'at_block':
345
+ this.preScanStmts(stmt.body, paramNames, macroParams);
346
+ break;
347
+ case 'execute':
348
+ this.preScanStmts(stmt.body, paramNames, macroParams);
349
+ break;
350
+ // raw, break, continue have no nested exprs of interest
351
+ }
352
+ }
353
+ preScanExpr(expr, paramNames, macroParams) {
354
+ if (expr.kind === 'call' && BUILTINS[expr.fn] !== undefined) {
355
+ // Only trigger macro param detection for builtins that actually emit
356
+ // MC commands with $(param) inline in the current function body.
357
+ // Special-handled builtins (storage_get_int / storage_set_int / etc.) are
358
+ // declared as `() => null` — they create their own sub-functions for macro
359
+ // indirection and do NOT require the surrounding function to be a macro.
360
+ const handler = BUILTINS[expr.fn];
361
+ const isSpecialHandled = (() => {
362
+ try {
363
+ return handler() === null;
364
+ }
365
+ catch {
366
+ return false;
367
+ }
368
+ })();
369
+ if (!isSpecialHandled) {
370
+ for (const arg of expr.args) {
371
+ if (arg.kind === 'ident' && paramNames.has(arg.name)) {
372
+ macroParams.add(arg.name);
373
+ }
374
+ }
375
+ }
376
+ // Always recurse into args for nested calls/expressions
377
+ for (const arg of expr.args)
378
+ this.preScanExpr(arg, paramNames, macroParams);
379
+ return;
380
+ }
381
+ // Recurse into sub-expressions for other call types
382
+ if (expr.kind === 'call') {
383
+ for (const arg of expr.args)
384
+ this.preScanExpr(arg, paramNames, macroParams);
385
+ }
386
+ else if (expr.kind === 'binary') {
387
+ this.preScanExpr(expr.left, paramNames, macroParams);
388
+ this.preScanExpr(expr.right, paramNames, macroParams);
389
+ }
390
+ else if (expr.kind === 'unary') {
391
+ this.preScanExpr(expr.operand, paramNames, macroParams);
392
+ }
393
+ else if (expr.kind === 'assign') {
394
+ this.preScanExpr(expr.value, paramNames, macroParams);
395
+ }
396
+ }
397
+ // ---------------------------------------------------------------------------
398
+ // Macro helpers
399
+ // ---------------------------------------------------------------------------
400
+ /**
401
+ * If `expr` is a function parameter that needs macro treatment (runtime value
402
+ * used in a literal position), returns the param name; otherwise null.
403
+ */
404
+ tryGetMacroParam(expr) {
405
+ if (expr.kind !== 'ident')
406
+ return null;
407
+ if (!this.currentFnParamNames.has(expr.name))
408
+ return null;
409
+ if (this.constValues.has(expr.name))
410
+ return null;
411
+ if (this.stringValues.has(expr.name))
412
+ return null;
413
+ return expr.name;
414
+ }
415
+ tryGetMacroParamByName(name) {
416
+ if (!this.currentFnParamNames.has(name))
417
+ return null;
418
+ if (this.constValues.has(name))
419
+ return null;
420
+ if (this.stringValues.has(name))
421
+ return null;
422
+ return name;
423
+ }
424
+ /**
425
+ * Converts an expression to a string for use as a builtin arg.
426
+ * If the expression is a macro param, returns `$(name)` and sets macroParam.
427
+ */
428
+ exprToBuiltinArg(expr) {
429
+ const macroParam = this.tryGetMacroParam(expr);
430
+ if (macroParam) {
431
+ return { str: `$(${macroParam})`, macroParam };
432
+ }
433
+ // Handle ~ident / ^ident syntax — relative/local coord with a VARIABLE offset.
434
+ //
435
+ // WHY macros are required here:
436
+ // Minecraft's ~N and ^N coordinate syntax requires N to be a compile-time
437
+ // literal number. There is no command that accepts a scoreboard value as a
438
+ // relative offset. Therefore `~height` (where height is a runtime int) can
439
+ // only be expressed at the MC level via the 1.20.2+ function macro system,
440
+ // which substitutes $(height) into the command text at call time.
441
+ //
442
+ // Contrast with absolute coords: `tp(target, x, y, z)` where x/y/z are
443
+ // plain ints — those become $(x) etc. as literal replacements, same mechanism,
444
+ // but the distinction matters to callers: ~$(height) means "relative by height
445
+ // blocks from current pos", not "teleport to absolute scoreboard value".
446
+ //
447
+ // Example:
448
+ // fn launch_up(target: selector, height: int) {
449
+ // tp(target, ~0, ~height, ~0); // "~height" parsed as rel_coord
450
+ // }
451
+ // Emits: $tp $(target) ~0 ~$(height) ~0
452
+ // Called: function ns:launch_up with storage rs:macro_args
453
+ if (expr.kind === 'rel_coord' || expr.kind === 'local_coord') {
454
+ const val = expr.value; // e.g. "~height" or "^depth"
455
+ const prefix = val[0]; // ~ or ^
456
+ const rest = val.slice(1);
457
+ // If rest is an identifier (not a number), treat as macro param
458
+ if (rest && /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(rest)) {
459
+ const paramName = this.tryGetMacroParamByName(rest);
460
+ if (paramName) {
461
+ return { str: `${prefix}$(${paramName})`, macroParam: paramName };
462
+ }
463
+ }
464
+ }
465
+ if (expr.kind === 'struct_lit' || expr.kind === 'array_lit') {
466
+ return { str: this.exprToSnbt(expr) };
467
+ }
468
+ // Float literals: preserve the float value for MC commands that accept floats
469
+ // (particle spread, playsound volume/pitch, etc.)
470
+ // We do NOT truncate here — that only applies to scoreboard/IR contexts.
471
+ if (expr.kind === 'float_lit') {
472
+ return { str: expr.value.toString() };
473
+ }
474
+ // Unary minus applied to a float literal (e.g. -0.5)
475
+ if (expr.kind === 'unary' && expr.op === '-' && expr.operand.kind === 'float_lit') {
476
+ return { str: (-expr.operand.value).toString() };
477
+ }
478
+ return { str: this.exprToString(expr) };
479
+ }
480
+ /**
481
+ * Emits a call to a macro function, setting up both scoreboard params
482
+ * (for arithmetic use) and NBT macro args (for coordinate/literal use).
483
+ */
484
+ emitMacroFunctionCall(fnName, args, macroParamNames, fnDecl) {
485
+ const params = fnDecl?.params ?? [];
486
+ const loweredArgs = args.map(arg => this.lowerExpr(arg));
487
+ // Set up regular scoreboard params (for arithmetic within the function)
488
+ for (let i = 0; i < loweredArgs.length; i++) {
489
+ const operand = loweredArgs[i];
490
+ if (operand.kind === 'const') {
491
+ this.builder.emitRaw(`scoreboard players set $p${i} ${exports.LOWERING_OBJ} ${operand.value}`);
492
+ }
493
+ else if (operand.kind === 'var') {
494
+ this.builder.emitRaw(`scoreboard players operation $p${i} ${exports.LOWERING_OBJ} = ${operand.name} ${exports.LOWERING_OBJ}`);
495
+ }
496
+ }
497
+ // Set up NBT storage for each macro param
498
+ // float-typed params are stored as `double 0.01` so that an integer value N
499
+ // becomes N/100.0 in the command (e.g. scoreboard value 975 → NBT 9.75d → ^9.75)
500
+ for (const macroParam of macroParamNames) {
501
+ const paramIdx = params.findIndex(p => p.name === macroParam);
502
+ if (paramIdx < 0 || paramIdx >= loweredArgs.length)
503
+ continue;
504
+ const operand = loweredArgs[paramIdx];
505
+ const paramType = params[paramIdx]?.type;
506
+ const isFloat = paramType?.kind === 'named' && paramType.name === 'float';
507
+ if (operand.kind === 'const') {
508
+ if (isFloat) {
509
+ const floatVal = (operand.value / 100).toFixed(6);
510
+ this.builder.emitRaw(`data modify storage rs:macro_args ${macroParam} set value ${floatVal}d`);
511
+ }
512
+ else {
513
+ this.builder.emitRaw(`data modify storage rs:macro_args ${macroParam} set value ${operand.value}`);
514
+ }
515
+ }
516
+ else if (operand.kind === 'var') {
517
+ if (isFloat) {
518
+ this.builder.emitRaw(`execute store result storage rs:macro_args ${macroParam} double 0.01 run scoreboard players get ${operand.name} ${exports.LOWERING_OBJ}`);
519
+ }
520
+ else {
521
+ this.builder.emitRaw(`execute store result storage rs:macro_args ${macroParam} int 1 run scoreboard players get ${operand.name} ${exports.LOWERING_OBJ}`);
522
+ }
523
+ }
524
+ }
525
+ // Call with macro storage
526
+ this.builder.emitRaw(`function ${this.namespace}:${fnName} with storage rs:macro_args`);
527
+ // Copy return value (callers may use it)
528
+ const dst = this.builder.freshTemp();
529
+ this.builder.emitRaw(`scoreboard players operation ${dst} ${exports.LOWERING_OBJ} = $ret ${exports.LOWERING_OBJ}`);
530
+ return { kind: 'var', name: dst };
531
+ }
532
+ lower(program) {
533
+ this.namespace = program.namespace;
534
+ // Pre-scan for macro functions before main lowering (so call sites can detect them)
535
+ this.preScanMacroFunctions(program);
536
+ // Load struct definitions
537
+ for (const struct of program.structs ?? []) {
538
+ const fields = new Map();
539
+ for (const field of struct.fields) {
540
+ fields.set(field.name, field.type);
541
+ }
542
+ this.structDefs.set(struct.name, fields);
543
+ this.structDecls.set(struct.name, struct);
544
+ }
545
+ for (const enumDecl of program.enums ?? []) {
546
+ const variants = new Map();
547
+ for (const variant of enumDecl.variants) {
548
+ variants.set(variant.name, variant.value ?? 0);
549
+ }
550
+ this.enumDefs.set(enumDecl.name, variants);
551
+ }
552
+ for (const constDecl of program.consts ?? []) {
553
+ this.constValues.set(constDecl.name, constDecl.value);
554
+ this.varTypes.set(constDecl.name, this.normalizeType(constDecl.type));
555
+ }
556
+ // Process global variable declarations (top-level let)
557
+ for (const g of program.globals ?? []) {
558
+ this.globalNames.set(g.name, { mutable: g.mutable });
559
+ this.varTypes.set(g.name, this.normalizeType(g.type));
560
+ const initValue = g.init.kind === 'int_lit' ? g.init.value : 0;
561
+ this.globals.push({ name: `$${g.name}`, init: initValue });
562
+ }
563
+ for (const fn of program.declarations) {
564
+ this.fnDecls.set(fn.name, fn);
565
+ this.functionDefaults.set(fn.name, fn.params.map(param => param.default));
566
+ }
567
+ for (const implBlock of program.implBlocks ?? []) {
568
+ let methods = this.implMethods.get(implBlock.typeName);
569
+ if (!methods) {
570
+ methods = new Map();
571
+ this.implMethods.set(implBlock.typeName, methods);
572
+ }
573
+ for (const method of implBlock.methods) {
574
+ const loweredName = `${implBlock.typeName}_${method.name}`;
575
+ methods.set(method.name, { fn: method, loweredName });
576
+ this.fnDecls.set(loweredName, method);
577
+ this.functionDefaults.set(loweredName, method.params.map(param => param.default));
578
+ }
579
+ }
580
+ for (const fn of program.declarations) {
581
+ this.lowerFn(fn);
582
+ }
583
+ for (const implBlock of program.implBlocks ?? []) {
584
+ for (const method of implBlock.methods) {
585
+ this.lowerFn(method, { name: `${implBlock.typeName}_${method.name}` });
586
+ }
587
+ }
588
+ return (0, builder_1.buildModule)(this.namespace, this.functions, this.globals);
589
+ }
590
+ // -------------------------------------------------------------------------
591
+ // Function Lowering
592
+ // -------------------------------------------------------------------------
593
+ lowerFn(fn, options = {}) {
594
+ const loweredName = options.name ?? fn.name;
595
+ const callbackBindings = options.callbackBindings ?? new Map();
596
+ const stdlibCallSite = options.stdlibCallSite;
597
+ const staticEventDec = fn.decorators.find(d => d.name === 'on');
598
+ const eventType = staticEventDec?.args?.eventType;
599
+ const eventParamSpecs = eventType && (0, types_1.isEventTypeName)(eventType) ? (0, types_1.getEventParamSpecs)(eventType) : [];
600
+ const runtimeParams = staticEventDec
601
+ ? []
602
+ : fn.params.filter(param => !callbackBindings.has(param.name));
603
+ this.currentFn = loweredName;
604
+ this.currentStdlibCallSite = stdlibCallSite;
605
+ this.foreachCounter = 0;
606
+ this.varMap = new Map();
607
+ this.lambdaBindings = new Map();
608
+ this.intervalBindings = new Map();
609
+ this.currentCallbackBindings = new Map(callbackBindings);
610
+ this.currentContext = {};
611
+ this.blockPosVars = new Map();
612
+ this.stringValues = new Map();
613
+ this.builder = new LoweringBuilder();
614
+ // Initialize macro tracking for this function
615
+ this.currentFnParamNames = new Set(runtimeParams.map(p => p.name));
616
+ this.currentFnMacroParams = new Set();
617
+ // Map parameters
618
+ if (staticEventDec) {
619
+ for (let i = 0; i < fn.params.length; i++) {
620
+ const param = fn.params[i];
621
+ const expected = eventParamSpecs[i];
622
+ const normalizedType = this.normalizeType(param.type);
623
+ this.varTypes.set(param.name, normalizedType);
624
+ if (expected?.type.kind === 'entity') {
625
+ this.varMap.set(param.name, '@s');
626
+ continue;
627
+ }
628
+ if (expected?.type.kind === 'named' && expected.type.name === 'string') {
629
+ this.stringValues.set(param.name, '');
630
+ continue;
631
+ }
632
+ this.varMap.set(param.name, this.fnVar(param.name));
633
+ }
634
+ }
635
+ else {
636
+ for (const param of runtimeParams) {
637
+ const paramName = param.name;
638
+ this.varMap.set(paramName, this.fnVar(paramName));
639
+ this.varTypes.set(paramName, this.normalizeType(param.type));
640
+ }
641
+ }
642
+ for (const param of fn.params) {
643
+ if (callbackBindings.has(param.name)) {
644
+ this.varTypes.set(param.name, this.normalizeType(param.type));
645
+ }
646
+ }
647
+ // Start entry block
648
+ this.builder.startBlock('entry');
649
+ // Copy params from the parameter-passing slots to named local variables.
650
+ // Use { kind: 'param', index: i } so the codegen resolves to
651
+ // alloc.internal('p{i}') consistently in both mangle and no-mangle modes,
652
+ // avoiding the slot-collision between the internal register and a user variable
653
+ // named 'p0'/'p1' that occurred with { kind: 'var', name: '$p0' }.
654
+ for (let i = 0; i < runtimeParams.length; i++) {
655
+ const paramName = runtimeParams[i].name;
656
+ const varName = this.fnVar(paramName);
657
+ this.builder.emitAssign(varName, { kind: 'param', index: i });
658
+ }
659
+ if (staticEventDec) {
660
+ for (let i = 0; i < fn.params.length; i++) {
661
+ const param = fn.params[i];
662
+ const expected = eventParamSpecs[i];
663
+ if (expected?.type.kind === 'named' && expected.type.name !== 'string') {
664
+ this.builder.emitAssign(this.fnVar(param.name), { kind: 'const', value: 0 });
665
+ }
666
+ }
667
+ }
668
+ // Lower body
669
+ this.lowerBlock(fn.body);
670
+ // If no explicit return, add void return
671
+ if (!this.builder.isBlockSealed()) {
672
+ this.builder.emitReturn();
673
+ }
674
+ // Build function
675
+ const isTickLoop = fn.decorators.some(d => d.name === 'tick');
676
+ const tickRate = this.getTickRate(fn.decorators);
677
+ // Check for trigger handler
678
+ const triggerDec = fn.decorators.find(d => d.name === 'on_trigger');
679
+ const isTriggerHandler = !!triggerDec;
680
+ const triggerName = triggerDec?.args?.trigger;
681
+ const irFn = this.builder.build(loweredName, runtimeParams.map(p => `$${p.name}`), isTickLoop);
682
+ // Add trigger metadata if applicable
683
+ if (isTriggerHandler && triggerName) {
684
+ irFn.isTriggerHandler = true;
685
+ irFn.triggerName = triggerName;
686
+ }
687
+ const eventDec = fn.decorators.find(d => d.name === 'on_advancement' ||
688
+ d.name === 'on_craft' ||
689
+ d.name === 'on_death' ||
690
+ d.name === 'on_login' ||
691
+ d.name === 'on_join_team');
692
+ if (eventDec) {
693
+ switch (eventDec.name) {
694
+ case 'on_advancement':
695
+ irFn.eventTrigger = { kind: 'advancement', value: eventDec.args?.advancement };
696
+ break;
697
+ case 'on_craft':
698
+ irFn.eventTrigger = { kind: 'craft', value: eventDec.args?.item };
699
+ break;
700
+ case 'on_death':
701
+ irFn.eventTrigger = { kind: 'death' };
702
+ break;
703
+ case 'on_login':
704
+ irFn.eventTrigger = { kind: 'login' };
705
+ break;
706
+ case 'on_join_team':
707
+ irFn.eventTrigger = { kind: 'join_team', value: eventDec.args?.team };
708
+ break;
709
+ }
710
+ }
711
+ if (eventType && (0, types_1.isEventTypeName)(eventType)) {
712
+ irFn.eventHandler = {
713
+ eventType,
714
+ tag: types_1.EVENT_TYPES[eventType].tag,
715
+ };
716
+ }
717
+ // Check for @load decorator
718
+ if (fn.decorators.some(d => d.name === 'load')) {
719
+ irFn.isLoadInit = true;
720
+ }
721
+ // @requires("dep_fn") — when this function is compiled in, dep_fn is also
722
+ // called from __load. The dep_fn itself does NOT need @load; it can be a
723
+ // private (_) function that only runs at load time when this fn is used.
724
+ const requiredLoads = [];
725
+ for (const d of fn.decorators) {
726
+ if (d.name === 'require_on_load') {
727
+ for (const arg of d.rawArgs ?? []) {
728
+ if (arg.kind === 'string') {
729
+ requiredLoads.push(arg.value);
730
+ }
731
+ }
732
+ }
733
+ }
734
+ if (requiredLoads.length > 0) {
735
+ irFn.requiredLoads = requiredLoads;
736
+ }
737
+ // Handle tick rate counter if needed
738
+ if (tickRate && tickRate > 1) {
739
+ this.wrapWithTickRate(irFn, tickRate);
740
+ }
741
+ // Set macro metadata if this function uses MC macro syntax
742
+ if (this.currentFnMacroParams.size > 0) {
743
+ irFn.isMacroFunction = true;
744
+ irFn.macroParamNames = [...this.currentFnMacroParams];
745
+ // Update registry (may refine the pre-scan result)
746
+ this.macroFunctionInfo.set(loweredName, irFn.macroParamNames);
747
+ }
748
+ this.functions.push(irFn);
749
+ }
750
+ getTickRate(decorators) {
751
+ const tickDec = decorators.find(d => d.name === 'tick');
752
+ return tickDec?.args?.rate;
753
+ }
754
+ wrapWithTickRate(fn, rate) {
755
+ // Add tick counter logic to entry block
756
+ const counterVar = `$__tick_${fn.name}`;
757
+ this.globals.push({ name: counterVar, init: 0 });
758
+ // Prepend counter logic to entry block
759
+ const entry = fn.blocks[0];
760
+ const originalInstrs = [...entry.instrs];
761
+ const originalTerm = entry.term;
762
+ entry.instrs = [
763
+ { op: 'raw', cmd: `scoreboard players add ${counterVar} ${exports.LOWERING_OBJ} 1` },
764
+ ];
765
+ // Create conditional jump
766
+ const bodyLabel = 'tick_body';
767
+ const skipLabel = 'tick_skip';
768
+ entry.term = {
769
+ op: 'jump_if',
770
+ cond: `${counterVar}_check`,
771
+ then: bodyLabel,
772
+ else_: skipLabel,
773
+ };
774
+ // Add check instruction
775
+ entry.instrs.push({
776
+ op: 'raw',
777
+ cmd: `execute store success score ${counterVar}_check ${exports.LOWERING_OBJ} if score ${counterVar} ${exports.LOWERING_OBJ} matches ${rate}..`,
778
+ });
779
+ // Body block (original logic + counter reset)
780
+ fn.blocks.push({
781
+ label: bodyLabel,
782
+ instrs: [
783
+ { op: 'raw', cmd: `scoreboard players set ${counterVar} ${exports.LOWERING_OBJ} 0` },
784
+ ...originalInstrs,
785
+ ],
786
+ term: originalTerm,
787
+ });
788
+ // Skip block (just return)
789
+ fn.blocks.push({
790
+ label: skipLabel,
791
+ instrs: [],
792
+ term: { op: 'return' },
793
+ });
794
+ }
795
+ // -------------------------------------------------------------------------
796
+ // Statement Lowering
797
+ // -------------------------------------------------------------------------
798
+ lowerBlock(stmts) {
799
+ for (const stmt of stmts) {
800
+ this.lowerStmt(stmt);
801
+ }
802
+ }
803
+ lowerStmt(stmt) {
804
+ switch (stmt.kind) {
805
+ case 'let':
806
+ this.lowerLetStmt(stmt);
807
+ break;
808
+ case 'expr':
809
+ this.lowerExpr(stmt.expr);
810
+ break;
811
+ case 'return':
812
+ this.lowerReturnStmt(stmt);
813
+ break;
814
+ case 'break':
815
+ this.lowerBreakStmt();
816
+ break;
817
+ case 'continue':
818
+ this.lowerContinueStmt();
819
+ break;
820
+ case 'if':
821
+ this.lowerIfStmt(stmt);
822
+ break;
823
+ case 'while':
824
+ this.lowerWhileStmt(stmt);
825
+ break;
826
+ case 'for':
827
+ this.lowerForStmt(stmt);
828
+ break;
829
+ case 'foreach':
830
+ this.lowerForeachStmt(stmt);
831
+ break;
832
+ case 'for_range':
833
+ this.lowerForRangeStmt(stmt);
834
+ break;
835
+ case 'match':
836
+ this.lowerMatchStmt(stmt);
837
+ break;
838
+ case 'as_block':
839
+ this.lowerAsBlockStmt(stmt);
840
+ break;
841
+ case 'at_block':
842
+ this.lowerAtBlockStmt(stmt);
843
+ break;
844
+ case 'as_at':
845
+ this.lowerAsAtStmt(stmt);
846
+ break;
847
+ case 'execute':
848
+ this.lowerExecuteStmt(stmt);
849
+ break;
850
+ case 'raw':
851
+ this.checkRawCommandInterpolation(stmt.cmd, stmt.span);
852
+ this.builder.emitRaw(stmt.cmd);
853
+ break;
854
+ }
855
+ }
856
+ lowerLetStmt(stmt) {
857
+ // Check for duplicate declaration of foreach binding
858
+ if (this.currentContext.binding === stmt.name) {
859
+ throw new diagnostics_1.DiagnosticError('LoweringError', `Cannot redeclare foreach binding '${stmt.name}'`, stmt.span ?? { line: 0, col: 0 });
860
+ }
861
+ const varName = this.fnVar(stmt.name);
862
+ this.varMap.set(stmt.name, varName);
863
+ // Track variable type
864
+ const declaredType = stmt.type ? this.normalizeType(stmt.type) : this.inferExprType(stmt.init);
865
+ if (declaredType) {
866
+ this.varTypes.set(stmt.name, declaredType);
867
+ // Track float variables for fixed-point arithmetic
868
+ if (declaredType.kind === 'named' && declaredType.name === 'float') {
869
+ this.floatVars.add(stmt.name);
870
+ }
871
+ }
872
+ if (stmt.init.kind === 'lambda') {
873
+ const lambdaName = this.lowerLambdaExpr(stmt.init);
874
+ this.lambdaBindings.set(stmt.name, lambdaName);
875
+ return;
876
+ }
877
+ if (stmt.init.kind === 'call' && stmt.init.fn === 'setInterval') {
878
+ const value = this.lowerExpr(stmt.init);
879
+ const intervalFn = this.intervalFunctions.get(value.kind === 'const' ? value.value : NaN);
880
+ if (intervalFn) {
881
+ this.intervalBindings.set(stmt.name, intervalFn);
882
+ }
883
+ this.builder.emitAssign(varName, value);
884
+ return;
885
+ }
886
+ // Handle struct literal initialization
887
+ if (stmt.init.kind === 'struct_lit' && stmt.type?.kind === 'struct') {
888
+ const structName = stmt.type.name.toLowerCase();
889
+ for (const field of stmt.init.fields) {
890
+ const path = `rs:heap ${structName}_${stmt.name}.${field.name}`;
891
+ const fieldValue = this.lowerExpr(field.value);
892
+ if (fieldValue.kind === 'const') {
893
+ this.builder.emitRaw(`data modify storage ${path} set value ${fieldValue.value}`);
894
+ }
895
+ else if (fieldValue.kind === 'var') {
896
+ // Copy from scoreboard to NBT
897
+ this.builder.emitRaw(`execute store result storage ${path} int 1 run scoreboard players get ${fieldValue.name} ${exports.LOWERING_OBJ}`);
898
+ }
899
+ }
900
+ return;
901
+ }
902
+ // Handle struct initialization from function call (copy from __ret_struct)
903
+ if ((stmt.init.kind === 'call' || stmt.init.kind === 'static_call') && stmt.type?.kind === 'struct') {
904
+ // First, execute the function call
905
+ this.lowerExpr(stmt.init);
906
+ // Then copy all fields from __ret_struct to the variable's storage
907
+ const structDecl = this.structDecls.get(stmt.type.name);
908
+ if (structDecl) {
909
+ const structName = stmt.type.name.toLowerCase();
910
+ for (const field of structDecl.fields) {
911
+ const srcPath = `rs:heap __ret_struct.${field.name}`;
912
+ const dstPath = `rs:heap ${structName}_${stmt.name}.${field.name}`;
913
+ this.builder.emitRaw(`data modify storage ${dstPath} set from storage ${srcPath}`);
914
+ }
915
+ }
916
+ return;
917
+ }
918
+ // Handle array literal initialization
919
+ if (stmt.init.kind === 'array_lit') {
920
+ // Initialize empty NBT array
921
+ this.builder.emitRaw(`data modify storage rs:heap ${stmt.name} set value []`);
922
+ // Add each element
923
+ for (const elem of stmt.init.elements) {
924
+ const elemValue = this.lowerExpr(elem);
925
+ if (elemValue.kind === 'const') {
926
+ this.builder.emitRaw(`data modify storage rs:heap ${stmt.name} append value ${elemValue.value}`);
927
+ }
928
+ else if (elemValue.kind === 'var') {
929
+ this.builder.emitRaw(`data modify storage rs:heap ${stmt.name} append value 0`);
930
+ this.builder.emitRaw(`execute store result storage rs:heap ${stmt.name}[-1] int 1 run scoreboard players get ${elemValue.name} ${exports.LOWERING_OBJ}`);
931
+ }
932
+ }
933
+ return;
934
+ }
935
+ // Handle set_new returning a set ID string
936
+ if (stmt.init.kind === 'call' && stmt.init.fn === 'set_new') {
937
+ const setId = `__set_${this.foreachCounter++}`;
938
+ this.builder.emitRaw(`data modify storage rs:sets ${setId} set value []`);
939
+ this.stringValues.set(stmt.name, setId);
940
+ return;
941
+ }
942
+ // Handle spawn_object returning entity handle
943
+ if (stmt.init.kind === 'call' && stmt.init.fn === 'spawn_object') {
944
+ const value = this.lowerExpr(stmt.init);
945
+ // value is the selector like @e[tag=__rs_obj_0,limit=1]
946
+ if (value.kind === 'var' && value.name.startsWith('@e[tag=__rs_obj_')) {
947
+ this.varMap.set(stmt.name, value.name);
948
+ // Mark as entity type for later member access
949
+ this.varTypes.set(stmt.name, { kind: 'named', name: 'void' }); // Marker
950
+ }
951
+ return;
952
+ }
953
+ const blockPosValue = this.resolveBlockPosExpr(stmt.init);
954
+ if (blockPosValue) {
955
+ this.blockPosVars.set(stmt.name, blockPosValue);
956
+ return;
957
+ }
958
+ const stmtType = stmt.type ? this.normalizeType(stmt.type) : this.inferExprType(stmt.init);
959
+ if (stmtType?.kind === 'named' && stmtType.name === 'string' && this.storeStringValue(stmt.name, stmt.init)) {
960
+ return;
961
+ }
962
+ const value = this.lowerExpr(stmt.init);
963
+ this.builder.emitAssign(varName, value);
964
+ }
965
+ lowerReturnStmt(stmt) {
966
+ if (stmt.value) {
967
+ // Handle struct literal return: store fields to __ret_struct storage
968
+ if (stmt.value.kind === 'struct_lit') {
969
+ for (const field of stmt.value.fields) {
970
+ const path = `rs:heap __ret_struct.${field.name}`;
971
+ const fieldValue = this.lowerExpr(field.value);
972
+ if (fieldValue.kind === 'const') {
973
+ this.builder.emitRaw(`data modify storage ${path} set value ${fieldValue.value}`);
974
+ }
975
+ else if (fieldValue.kind === 'var') {
976
+ this.builder.emitRaw(`execute store result storage ${path} int 1 run scoreboard players get ${fieldValue.name} ${exports.LOWERING_OBJ}`);
977
+ }
978
+ }
979
+ this.builder.emitReturn({ kind: 'const', value: 0 });
980
+ return;
981
+ }
982
+ const value = this.lowerExpr(stmt.value);
983
+ this.builder.emitReturn(value);
984
+ }
985
+ else {
986
+ this.builder.emitReturn();
987
+ }
988
+ }
989
+ lowerBreakStmt() {
990
+ if (this.loopStack.length === 0) {
991
+ throw new diagnostics_1.DiagnosticError('LoweringError', 'break statement outside of loop', { line: 1, col: 1 });
992
+ }
993
+ const loop = this.loopStack[this.loopStack.length - 1];
994
+ this.builder.emitJump(loop.breakLabel);
995
+ }
996
+ lowerContinueStmt() {
997
+ if (this.loopStack.length === 0) {
998
+ throw new diagnostics_1.DiagnosticError('LoweringError', 'continue statement outside of loop', { line: 1, col: 1 });
999
+ }
1000
+ const loop = this.loopStack[this.loopStack.length - 1];
1001
+ this.builder.emitJump(loop.continueLabel);
1002
+ }
1003
+ lowerIfStmt(stmt) {
1004
+ if (stmt.cond.kind === 'is_check') {
1005
+ this.lowerIsCheckIfStmt(stmt);
1006
+ return;
1007
+ }
1008
+ const condVar = this.lowerExpr(stmt.cond);
1009
+ const condName = this.operandToVar(condVar);
1010
+ const thenLabel = this.builder.freshLabel('then');
1011
+ const elseLabel = this.builder.freshLabel('else');
1012
+ const mergeLabel = this.builder.freshLabel('merge');
1013
+ this.builder.emitJumpIf(condName, thenLabel, stmt.else_ ? elseLabel : mergeLabel);
1014
+ // Then block
1015
+ this.builder.startBlock(thenLabel);
1016
+ this.lowerBlock(stmt.then);
1017
+ if (!this.builder.isBlockSealed()) {
1018
+ this.builder.emitJump(mergeLabel);
1019
+ }
1020
+ // Else block (if present)
1021
+ if (stmt.else_) {
1022
+ this.builder.startBlock(elseLabel);
1023
+ this.lowerBlock(stmt.else_);
1024
+ if (!this.builder.isBlockSealed()) {
1025
+ this.builder.emitJump(mergeLabel);
1026
+ }
1027
+ }
1028
+ // Merge block
1029
+ this.builder.startBlock(mergeLabel);
1030
+ }
1031
+ lowerIsCheckIfStmt(stmt) {
1032
+ const cond = stmt.cond;
1033
+ if (cond.kind !== 'is_check') {
1034
+ throw new diagnostics_1.DiagnosticError('LoweringError', "Internal error: expected 'is' check condition", stmt.span ?? { line: 0, col: 0 });
1035
+ }
1036
+ if (stmt.else_) {
1037
+ throw new diagnostics_1.DiagnosticError('LoweringError', "'is' checks with else branches are not yet supported", cond.span ?? stmt.span ?? { line: 0, col: 0 });
1038
+ }
1039
+ const selector = this.exprToEntitySelector(cond.expr);
1040
+ if (!selector) {
1041
+ throw new diagnostics_1.DiagnosticError('LoweringError', "'is' checks require an entity selector or entity binding", cond.span ?? stmt.span ?? { line: 0, col: 0 });
1042
+ }
1043
+ const mcType = ENTITY_TO_MC_TYPE[cond.entityType];
1044
+ const thenFnName = `${this.currentFn}/then_${this.foreachCounter++}`;
1045
+ if (!mcType) {
1046
+ // Abstract type — check all concrete subtypes
1047
+ const subtypes = (0, entity_hierarchy_1.getConcreteSubtypes)(cond.entityType);
1048
+ if (subtypes.length === 0) {
1049
+ throw new diagnostics_1.DiagnosticError('LoweringError', `Cannot lower entity type check for '${cond.entityType}'`, cond.span ?? stmt.span ?? { line: 0, col: 0 });
1050
+ }
1051
+ // Use a temp scoreboard variable to OR multiple type checks
1052
+ this.builder.emitRaw(`scoreboard players set __is_result rs:temp 0`);
1053
+ for (const subtype of subtypes) {
1054
+ if (subtype.mcId) {
1055
+ this.builder.emitRaw(`execute if entity ${this.appendTypeFilter(selector, subtype.mcId)} run scoreboard players set __is_result rs:temp 1`);
1056
+ }
1057
+ }
1058
+ this.builder.emitRaw(`execute if score __is_result rs:temp matches 1 run function ${this.namespace}:${thenFnName}`);
1059
+ }
1060
+ else {
1061
+ // Concrete type — single check
1062
+ this.builder.emitRaw(`execute if entity ${this.appendTypeFilter(selector, mcType)} run function ${this.namespace}:${thenFnName}`);
1063
+ }
1064
+ const savedBuilder = this.builder;
1065
+ const savedVarMap = new Map(this.varMap);
1066
+ const savedBlockPosVars = new Map(this.blockPosVars);
1067
+ this.builder = new LoweringBuilder();
1068
+ this.varMap = new Map(savedVarMap);
1069
+ this.blockPosVars = new Map(savedBlockPosVars);
1070
+ this.builder.startBlock('entry');
1071
+ this.lowerBlock(stmt.then);
1072
+ if (!this.builder.isBlockSealed()) {
1073
+ this.builder.emitReturn();
1074
+ }
1075
+ this.functions.push(this.builder.build(thenFnName, [], false));
1076
+ this.builder = savedBuilder;
1077
+ this.varMap = savedVarMap;
1078
+ this.blockPosVars = savedBlockPosVars;
1079
+ }
1080
+ lowerWhileStmt(stmt) {
1081
+ const checkLabel = this.builder.freshLabel('loop_check');
1082
+ const bodyLabel = this.builder.freshLabel('loop_body');
1083
+ const exitLabel = this.builder.freshLabel('loop_exit');
1084
+ this.builder.emitJump(checkLabel);
1085
+ // Check block
1086
+ this.builder.startBlock(checkLabel);
1087
+ const condVar = this.lowerExpr(stmt.cond);
1088
+ const condName = this.operandToVar(condVar);
1089
+ this.builder.emitJumpIf(condName, bodyLabel, exitLabel);
1090
+ // Push loop context for break/continue (while has no step, so continue goes to check)
1091
+ this.loopStack.push({ breakLabel: exitLabel, continueLabel: checkLabel });
1092
+ // Body block
1093
+ this.builder.startBlock(bodyLabel);
1094
+ this.lowerBlock(stmt.body);
1095
+ if (!this.builder.isBlockSealed()) {
1096
+ this.builder.emitJump(checkLabel);
1097
+ }
1098
+ // Pop loop context
1099
+ this.loopStack.pop();
1100
+ // Exit block
1101
+ this.builder.startBlock(exitLabel);
1102
+ }
1103
+ lowerForStmt(stmt) {
1104
+ // For loop is lowered to: init; while(cond) { body; step; }
1105
+ // Init statement (if present)
1106
+ if (stmt.init) {
1107
+ this.lowerStmt(stmt.init);
1108
+ }
1109
+ const checkLabel = this.builder.freshLabel('for_check');
1110
+ const bodyLabel = this.builder.freshLabel('for_body');
1111
+ const continueLabel = this.builder.freshLabel('for_continue');
1112
+ const exitLabel = this.builder.freshLabel('for_exit');
1113
+ this.builder.emitJump(checkLabel);
1114
+ // Check block
1115
+ this.builder.startBlock(checkLabel);
1116
+ const condVar = this.lowerExpr(stmt.cond);
1117
+ const condName = this.operandToVar(condVar);
1118
+ this.builder.emitJumpIf(condName, bodyLabel, exitLabel);
1119
+ // Push loop context for break/continue
1120
+ this.loopStack.push({ breakLabel: exitLabel, continueLabel });
1121
+ // Body block
1122
+ this.builder.startBlock(bodyLabel);
1123
+ this.lowerBlock(stmt.body);
1124
+ if (!this.builder.isBlockSealed()) {
1125
+ this.builder.emitJump(continueLabel);
1126
+ }
1127
+ // Continue block (step + loop back)
1128
+ this.builder.startBlock(continueLabel);
1129
+ this.lowerExpr(stmt.step);
1130
+ this.builder.emitJump(checkLabel);
1131
+ // Pop loop context
1132
+ this.loopStack.pop();
1133
+ // Exit block
1134
+ this.builder.startBlock(exitLabel);
1135
+ }
1136
+ lowerForRangeStmt(stmt) {
1137
+ const loopVar = this.fnVar(stmt.varName);
1138
+ const subFnName = `${this.currentFn}/__for_${this.foreachCounter++}`;
1139
+ // Initialize loop variable
1140
+ this.varMap.set(stmt.varName, loopVar);
1141
+ const startVal = this.lowerExpr(stmt.start);
1142
+ if (startVal.kind === 'const') {
1143
+ this.builder.emitRaw(`scoreboard players set ${loopVar} ${exports.LOWERING_OBJ} ${startVal.value}`);
1144
+ }
1145
+ else if (startVal.kind === 'var') {
1146
+ this.builder.emitRaw(`scoreboard players operation ${loopVar} ${exports.LOWERING_OBJ} = ${startVal.name} ${exports.LOWERING_OBJ}`);
1147
+ }
1148
+ // Call loop function
1149
+ this.builder.emitRaw(`function ${this.namespace}:${subFnName}`);
1150
+ // Generate loop sub-function
1151
+ const savedBuilder = this.builder;
1152
+ const savedVarMap = new Map(this.varMap);
1153
+ const savedContext = this.currentContext;
1154
+ const savedBlockPosVars = new Map(this.blockPosVars);
1155
+ this.builder = new LoweringBuilder();
1156
+ this.varMap = new Map(savedVarMap);
1157
+ this.currentContext = savedContext;
1158
+ this.blockPosVars = new Map(savedBlockPosVars);
1159
+ this.builder.startBlock('entry');
1160
+ // Body
1161
+ this.lowerBlock(stmt.body);
1162
+ // Increment
1163
+ this.builder.emitRaw(`scoreboard players add ${loopVar} ${exports.LOWERING_OBJ} 1`);
1164
+ // Loop condition: execute if score matches ..<end-1> run function
1165
+ const endVal = this.lowerExpr(stmt.end);
1166
+ const endNum = endVal.kind === 'const' ? endVal.value - 1 : '?';
1167
+ this.builder.emitRaw(`execute if score ${loopVar} ${exports.LOWERING_OBJ} matches ..${endNum} run function ${this.namespace}:${subFnName}`);
1168
+ if (!this.builder.isBlockSealed()) {
1169
+ this.builder.emitReturn();
1170
+ }
1171
+ const subFn = this.builder.build(subFnName, [], false);
1172
+ this.functions.push(subFn);
1173
+ // Restore
1174
+ this.builder = savedBuilder;
1175
+ this.varMap = savedVarMap;
1176
+ this.currentContext = savedContext;
1177
+ this.blockPosVars = savedBlockPosVars;
1178
+ }
1179
+ lowerForeachStmt(stmt) {
1180
+ if (stmt.iterable.kind !== 'selector') {
1181
+ this.lowerArrayForeachStmt(stmt);
1182
+ return;
1183
+ }
1184
+ // Extract body into a separate function
1185
+ const subFnName = `${this.currentFn}/foreach_${this.foreachCounter++}`;
1186
+ const selector = this.exprToString(stmt.iterable);
1187
+ // Emit execute as ... [context modifiers] run function ...
1188
+ const execContext = stmt.executeContext ? ` ${stmt.executeContext}` : '';
1189
+ this.builder.emitRaw(`execute as ${selector}${execContext} run function ${this.namespace}:${subFnName}`);
1190
+ // Create the sub-function
1191
+ const savedBuilder = this.builder;
1192
+ const savedVarMap = new Map(this.varMap);
1193
+ const savedContext = this.currentContext;
1194
+ const savedBlockPosVars = new Map(this.blockPosVars);
1195
+ this.builder = new LoweringBuilder();
1196
+ this.varMap = new Map(savedVarMap);
1197
+ this.currentContext = { binding: stmt.binding };
1198
+ this.blockPosVars = new Map(savedBlockPosVars);
1199
+ // In foreach body, the binding maps to @s
1200
+ this.varMap.set(stmt.binding, '@s');
1201
+ // Track entity context for type narrowing
1202
+ const selectorEntityType = (0, entity_hierarchy_1.getBaseSelectorType)(selector);
1203
+ if (selectorEntityType) {
1204
+ this.entityContextStack.push(selectorEntityType);
1205
+ }
1206
+ this.builder.startBlock('entry');
1207
+ this.lowerBlock(stmt.body);
1208
+ if (!this.builder.isBlockSealed()) {
1209
+ this.builder.emitReturn();
1210
+ }
1211
+ if (selectorEntityType) {
1212
+ this.entityContextStack.pop();
1213
+ }
1214
+ const subFn = this.builder.build(subFnName, [], false);
1215
+ this.functions.push(subFn);
1216
+ // Restore
1217
+ this.builder = savedBuilder;
1218
+ this.varMap = savedVarMap;
1219
+ this.currentContext = savedContext;
1220
+ this.blockPosVars = savedBlockPosVars;
1221
+ }
1222
+ lowerMatchStmt(stmt) {
1223
+ const subject = this.operandToVar(this.lowerExpr(stmt.expr));
1224
+ const matchedVar = this.builder.freshTemp();
1225
+ this.builder.emitAssign(matchedVar, { kind: 'const', value: 0 });
1226
+ let defaultArm = null;
1227
+ for (const arm of stmt.arms) {
1228
+ if (arm.pattern === null) {
1229
+ defaultArm = arm;
1230
+ continue;
1231
+ }
1232
+ // Handle range patterns specially
1233
+ let matchCondition;
1234
+ if (arm.pattern.kind === 'range_lit') {
1235
+ const range = arm.pattern.range;
1236
+ if (range.min !== undefined && range.max !== undefined) {
1237
+ matchCondition = `${range.min}..${range.max}`;
1238
+ }
1239
+ else if (range.min !== undefined) {
1240
+ matchCondition = `${range.min}..`;
1241
+ }
1242
+ else if (range.max !== undefined) {
1243
+ matchCondition = `..${range.max}`;
1244
+ }
1245
+ else {
1246
+ matchCondition = '0..'; // Match any
1247
+ }
1248
+ }
1249
+ else {
1250
+ const patternValue = this.lowerExpr(arm.pattern);
1251
+ if (patternValue.kind !== 'const') {
1252
+ throw new Error('Match patterns must lower to compile-time constants');
1253
+ }
1254
+ matchCondition = String(patternValue.value);
1255
+ }
1256
+ const subFnName = `${this.currentFn}/match_${this.foreachCounter++}`;
1257
+ this.builder.emitRaw(`execute if score ${matchedVar} ${exports.LOWERING_OBJ} matches ..0 if score ${subject} ${exports.LOWERING_OBJ} matches ${matchCondition} run function ${this.namespace}:${subFnName}`);
1258
+ this.emitMatchArmSubFunction(subFnName, matchedVar, arm.body, true);
1259
+ }
1260
+ if (defaultArm) {
1261
+ const subFnName = `${this.currentFn}/match_${this.foreachCounter++}`;
1262
+ this.builder.emitRaw(`execute if score ${matchedVar} ${exports.LOWERING_OBJ} matches ..0 run function ${this.namespace}:${subFnName}`);
1263
+ this.emitMatchArmSubFunction(subFnName, matchedVar, defaultArm.body, false);
1264
+ }
1265
+ }
1266
+ emitMatchArmSubFunction(name, matchedVar, body, setMatched) {
1267
+ const savedBuilder = this.builder;
1268
+ const savedVarMap = new Map(this.varMap);
1269
+ const savedContext = this.currentContext;
1270
+ const savedBlockPosVars = new Map(this.blockPosVars);
1271
+ this.builder = new LoweringBuilder();
1272
+ this.varMap = new Map(savedVarMap);
1273
+ this.currentContext = savedContext;
1274
+ this.blockPosVars = new Map(savedBlockPosVars);
1275
+ this.builder.startBlock('entry');
1276
+ if (setMatched) {
1277
+ this.builder.emitRaw(`scoreboard players set ${matchedVar} ${exports.LOWERING_OBJ} 1`);
1278
+ }
1279
+ this.lowerBlock(body);
1280
+ if (!this.builder.isBlockSealed()) {
1281
+ this.builder.emitReturn();
1282
+ }
1283
+ this.functions.push(this.builder.build(name, [], false));
1284
+ this.builder = savedBuilder;
1285
+ this.varMap = savedVarMap;
1286
+ this.currentContext = savedContext;
1287
+ this.blockPosVars = savedBlockPosVars;
1288
+ }
1289
+ lowerArrayForeachStmt(stmt) {
1290
+ const arrayName = this.getArrayStorageName(stmt.iterable);
1291
+ if (!arrayName) {
1292
+ this.builder.emitRaw('# Unsupported foreach iterable');
1293
+ return;
1294
+ }
1295
+ const arrayType = this.inferExprType(stmt.iterable);
1296
+ const bindingVar = this.fnVar(stmt.binding);
1297
+ const indexVar = this.builder.freshTemp();
1298
+ const lengthVar = this.builder.freshTemp();
1299
+ const condVar = this.builder.freshTemp();
1300
+ const oneVar = this.builder.freshTemp();
1301
+ const savedBinding = this.varMap.get(stmt.binding);
1302
+ const savedType = this.varTypes.get(stmt.binding);
1303
+ this.varMap.set(stmt.binding, bindingVar);
1304
+ if (arrayType?.kind === 'array') {
1305
+ this.varTypes.set(stmt.binding, arrayType.elem);
1306
+ }
1307
+ this.builder.emitAssign(indexVar, { kind: 'const', value: 0 });
1308
+ this.builder.emitAssign(oneVar, { kind: 'const', value: 1 });
1309
+ this.builder.emitRaw(`execute store result score ${lengthVar} ${exports.LOWERING_OBJ} run data get storage rs:heap ${arrayName}`);
1310
+ const checkLabel = this.builder.freshLabel('foreach_array_check');
1311
+ const bodyLabel = this.builder.freshLabel('foreach_array_body');
1312
+ const exitLabel = this.builder.freshLabel('foreach_array_exit');
1313
+ this.builder.emitJump(checkLabel);
1314
+ this.builder.startBlock(checkLabel);
1315
+ this.builder.emitCmp(condVar, { kind: 'var', name: indexVar }, '<', { kind: 'var', name: lengthVar });
1316
+ this.builder.emitJumpIf(condVar, bodyLabel, exitLabel);
1317
+ this.builder.startBlock(bodyLabel);
1318
+ const element = this.readArrayElement(arrayName, { kind: 'var', name: indexVar });
1319
+ this.builder.emitAssign(bindingVar, element);
1320
+ this.lowerBlock(stmt.body);
1321
+ if (!this.builder.isBlockSealed()) {
1322
+ this.builder.emitRaw(`scoreboard players operation ${indexVar} ${exports.LOWERING_OBJ} += ${oneVar} ${exports.LOWERING_OBJ}`);
1323
+ this.builder.emitJump(checkLabel);
1324
+ }
1325
+ this.builder.startBlock(exitLabel);
1326
+ if (savedBinding) {
1327
+ this.varMap.set(stmt.binding, savedBinding);
1328
+ }
1329
+ else {
1330
+ this.varMap.delete(stmt.binding);
1331
+ }
1332
+ if (savedType) {
1333
+ this.varTypes.set(stmt.binding, savedType);
1334
+ }
1335
+ else {
1336
+ this.varTypes.delete(stmt.binding);
1337
+ }
1338
+ }
1339
+ lowerAsBlockStmt(stmt) {
1340
+ const selector = this.selectorToString(stmt.selector);
1341
+ const subFnName = `${this.currentFn}/as_${this.foreachCounter++}`;
1342
+ // Check for impossible type assertions (W_IMPOSSIBLE_AS)
1343
+ const innerType = (0, entity_hierarchy_1.getBaseSelectorType)(selector);
1344
+ const outerType = this.currentEntityContext();
1345
+ if (innerType && outerType !== 'Entity' && innerType !== 'Entity' && !(0, entity_hierarchy_1.areCompatibleTypes)(outerType, innerType)) {
1346
+ this.warnings.push({
1347
+ message: `Impossible type assertion: @s is ${outerType} but as-block targets ${innerType}`,
1348
+ code: 'W_IMPOSSIBLE_AS',
1349
+ line: stmt.span?.line,
1350
+ col: stmt.span?.col,
1351
+ });
1352
+ }
1353
+ this.builder.emitRaw(`execute as ${selector} run function ${this.namespace}:${subFnName}`);
1354
+ // Create sub-function
1355
+ const savedBuilder = this.builder;
1356
+ const savedVarMap = new Map(this.varMap);
1357
+ const savedBlockPosVars = new Map(this.blockPosVars);
1358
+ this.builder = new LoweringBuilder();
1359
+ this.varMap = new Map(savedVarMap);
1360
+ this.blockPosVars = new Map(savedBlockPosVars);
1361
+ // Track entity context inside as-block
1362
+ if (innerType) {
1363
+ this.entityContextStack.push(innerType);
1364
+ }
1365
+ this.builder.startBlock('entry');
1366
+ this.lowerBlock(stmt.body);
1367
+ if (!this.builder.isBlockSealed()) {
1368
+ this.builder.emitReturn();
1369
+ }
1370
+ if (innerType) {
1371
+ this.entityContextStack.pop();
1372
+ }
1373
+ const subFn = this.builder.build(subFnName, [], false);
1374
+ this.functions.push(subFn);
1375
+ this.builder = savedBuilder;
1376
+ this.varMap = savedVarMap;
1377
+ this.blockPosVars = savedBlockPosVars;
1378
+ }
1379
+ lowerAtBlockStmt(stmt) {
1380
+ const selector = this.selectorToString(stmt.selector);
1381
+ const subFnName = `${this.currentFn}/at_${this.foreachCounter++}`;
1382
+ this.builder.emitRaw(`execute at ${selector} run function ${this.namespace}:${subFnName}`);
1383
+ // Create sub-function
1384
+ const savedBuilder = this.builder;
1385
+ const savedVarMap = new Map(this.varMap);
1386
+ const savedBlockPosVars = new Map(this.blockPosVars);
1387
+ this.builder = new LoweringBuilder();
1388
+ this.varMap = new Map(savedVarMap);
1389
+ this.blockPosVars = new Map(savedBlockPosVars);
1390
+ this.builder.startBlock('entry');
1391
+ this.lowerBlock(stmt.body);
1392
+ if (!this.builder.isBlockSealed()) {
1393
+ this.builder.emitReturn();
1394
+ }
1395
+ const subFn = this.builder.build(subFnName, [], false);
1396
+ this.functions.push(subFn);
1397
+ this.builder = savedBuilder;
1398
+ this.varMap = savedVarMap;
1399
+ this.blockPosVars = savedBlockPosVars;
1400
+ }
1401
+ lowerAsAtStmt(stmt) {
1402
+ const asSel = this.selectorToString(stmt.as_sel);
1403
+ const atSel = this.selectorToString(stmt.at_sel);
1404
+ const subFnName = `${this.currentFn}/as_at_${this.foreachCounter++}`;
1405
+ this.builder.emitRaw(`execute as ${asSel} at ${atSel} run function ${this.namespace}:${subFnName}`);
1406
+ // Create sub-function
1407
+ const savedBuilder = this.builder;
1408
+ const savedVarMap = new Map(this.varMap);
1409
+ const savedBlockPosVars = new Map(this.blockPosVars);
1410
+ this.builder = new LoweringBuilder();
1411
+ this.varMap = new Map(savedVarMap);
1412
+ this.blockPosVars = new Map(savedBlockPosVars);
1413
+ this.builder.startBlock('entry');
1414
+ this.lowerBlock(stmt.body);
1415
+ if (!this.builder.isBlockSealed()) {
1416
+ this.builder.emitReturn();
1417
+ }
1418
+ const subFn = this.builder.build(subFnName, [], false);
1419
+ this.functions.push(subFn);
1420
+ this.builder = savedBuilder;
1421
+ this.varMap = savedVarMap;
1422
+ this.blockPosVars = savedBlockPosVars;
1423
+ }
1424
+ lowerExecuteStmt(stmt) {
1425
+ // Build the execute prefix from subcommands
1426
+ const parts = ['execute'];
1427
+ for (const sub of stmt.subcommands) {
1428
+ switch (sub.kind) {
1429
+ // Context modifiers
1430
+ case 'as':
1431
+ parts.push(`as ${this.selectorToString(sub.selector)}`);
1432
+ break;
1433
+ case 'at':
1434
+ parts.push(`at ${this.selectorToString(sub.selector)}`);
1435
+ break;
1436
+ case 'positioned':
1437
+ parts.push(`positioned ${sub.x} ${sub.y} ${sub.z}`);
1438
+ break;
1439
+ case 'positioned_as':
1440
+ parts.push(`positioned as ${this.selectorToString(sub.selector)}`);
1441
+ break;
1442
+ case 'rotated':
1443
+ parts.push(`rotated ${sub.yaw} ${sub.pitch}`);
1444
+ break;
1445
+ case 'rotated_as':
1446
+ parts.push(`rotated as ${this.selectorToString(sub.selector)}`);
1447
+ break;
1448
+ case 'facing':
1449
+ parts.push(`facing ${sub.x} ${sub.y} ${sub.z}`);
1450
+ break;
1451
+ case 'facing_entity':
1452
+ parts.push(`facing entity ${this.selectorToString(sub.selector)} ${sub.anchor}`);
1453
+ break;
1454
+ case 'anchored':
1455
+ parts.push(`anchored ${sub.anchor}`);
1456
+ break;
1457
+ case 'align':
1458
+ parts.push(`align ${sub.axes}`);
1459
+ break;
1460
+ case 'in':
1461
+ parts.push(`in ${sub.dimension}`);
1462
+ break;
1463
+ case 'on':
1464
+ parts.push(`on ${sub.relation}`);
1465
+ break;
1466
+ case 'summon':
1467
+ parts.push(`summon ${sub.entity}`);
1468
+ break;
1469
+ // Conditions
1470
+ case 'if_entity':
1471
+ if (sub.selector) {
1472
+ parts.push(`if entity ${this.selectorToString(sub.selector)}`);
1473
+ }
1474
+ else if (sub.varName) {
1475
+ const sel = { kind: '@s', filters: sub.filters };
1476
+ parts.push(`if entity ${this.selectorToString(sel)}`);
1477
+ }
1478
+ break;
1479
+ case 'unless_entity':
1480
+ if (sub.selector) {
1481
+ parts.push(`unless entity ${this.selectorToString(sub.selector)}`);
1482
+ }
1483
+ else if (sub.varName) {
1484
+ const sel = { kind: '@s', filters: sub.filters };
1485
+ parts.push(`unless entity ${this.selectorToString(sel)}`);
1486
+ }
1487
+ break;
1488
+ case 'if_block':
1489
+ parts.push(`if block ${sub.pos[0]} ${sub.pos[1]} ${sub.pos[2]} ${sub.block}`);
1490
+ break;
1491
+ case 'unless_block':
1492
+ parts.push(`unless block ${sub.pos[0]} ${sub.pos[1]} ${sub.pos[2]} ${sub.block}`);
1493
+ break;
1494
+ case 'if_score':
1495
+ parts.push(`if score ${sub.target} ${sub.targetObj} ${sub.op} ${sub.source} ${sub.sourceObj}`);
1496
+ break;
1497
+ case 'unless_score':
1498
+ parts.push(`unless score ${sub.target} ${sub.targetObj} ${sub.op} ${sub.source} ${sub.sourceObj}`);
1499
+ break;
1500
+ case 'if_score_range':
1501
+ parts.push(`if score ${sub.target} ${sub.targetObj} matches ${sub.range}`);
1502
+ break;
1503
+ case 'unless_score_range':
1504
+ parts.push(`unless score ${sub.target} ${sub.targetObj} matches ${sub.range}`);
1505
+ break;
1506
+ // Store
1507
+ case 'store_result':
1508
+ parts.push(`store result score ${sub.target} ${sub.targetObj}`);
1509
+ break;
1510
+ case 'store_success':
1511
+ parts.push(`store success score ${sub.target} ${sub.targetObj}`);
1512
+ break;
1513
+ }
1514
+ }
1515
+ const subFnName = `${this.currentFn}/exec_${this.foreachCounter++}`;
1516
+ this.builder.emitRaw(`${parts.join(' ')} run function ${this.namespace}:${subFnName}`);
1517
+ // Create sub-function for the body
1518
+ const savedBuilder = this.builder;
1519
+ const savedVarMap = new Map(this.varMap);
1520
+ const savedBlockPosVars = new Map(this.blockPosVars);
1521
+ this.builder = new LoweringBuilder();
1522
+ this.varMap = new Map(savedVarMap);
1523
+ this.blockPosVars = new Map(savedBlockPosVars);
1524
+ this.builder.startBlock('entry');
1525
+ this.lowerBlock(stmt.body);
1526
+ if (!this.builder.isBlockSealed()) {
1527
+ this.builder.emitReturn();
1528
+ }
1529
+ const subFn = this.builder.build(subFnName, [], false);
1530
+ this.functions.push(subFn);
1531
+ this.builder = savedBuilder;
1532
+ this.varMap = savedVarMap;
1533
+ this.blockPosVars = savedBlockPosVars;
1534
+ }
1535
+ // -------------------------------------------------------------------------
1536
+ // Expression Lowering
1537
+ // -------------------------------------------------------------------------
1538
+ lowerExpr(expr) {
1539
+ switch (expr.kind) {
1540
+ case 'int_lit':
1541
+ return { kind: 'const', value: expr.value };
1542
+ case 'float_lit':
1543
+ // Float stored as fixed-point × 1000
1544
+ return { kind: 'const', value: Math.round(expr.value * 1000) };
1545
+ case 'byte_lit':
1546
+ return { kind: 'const', value: expr.value };
1547
+ case 'short_lit':
1548
+ return { kind: 'const', value: expr.value };
1549
+ case 'long_lit':
1550
+ return { kind: 'const', value: expr.value };
1551
+ case 'double_lit':
1552
+ return { kind: 'const', value: Math.round(expr.value * 1000) };
1553
+ case 'bool_lit':
1554
+ return { kind: 'const', value: expr.value ? 1 : 0 };
1555
+ case 'str_lit':
1556
+ // Strings are handled inline in builtins
1557
+ return { kind: 'const', value: 0 }; // Placeholder
1558
+ case 'mc_name':
1559
+ // MC names (#health, #red) treated as string constants
1560
+ return { kind: 'const', value: 0 }; // Handled inline in exprToString
1561
+ case 'str_interp':
1562
+ case 'f_string':
1563
+ // Interpolated strings are handled inline in message builtins.
1564
+ return { kind: 'const', value: 0 };
1565
+ case 'range_lit':
1566
+ // Ranges are handled in context (selectors, etc.)
1567
+ return { kind: 'const', value: 0 };
1568
+ case 'blockpos':
1569
+ return { kind: 'const', value: 0 };
1570
+ case 'ident': {
1571
+ const constValue = this.constValues.get(expr.name);
1572
+ if (constValue) {
1573
+ return this.lowerConstLiteral(constValue);
1574
+ }
1575
+ const mapped = this.varMap.get(expr.name);
1576
+ if (mapped) {
1577
+ // Check if it's a selector reference (like @s)
1578
+ if (mapped.startsWith('@')) {
1579
+ return { kind: 'var', name: mapped };
1580
+ }
1581
+ return { kind: 'var', name: mapped };
1582
+ }
1583
+ return { kind: 'var', name: `$${expr.name}` };
1584
+ }
1585
+ case 'member':
1586
+ if (expr.obj.kind === 'ident' && this.enumDefs.has(expr.obj.name)) {
1587
+ const variants = this.enumDefs.get(expr.obj.name);
1588
+ const value = variants.get(expr.field);
1589
+ if (value === undefined) {
1590
+ throw new Error(`Unknown enum variant ${expr.obj.name}.${expr.field}`);
1591
+ }
1592
+ return { kind: 'const', value };
1593
+ }
1594
+ return this.lowerMemberExpr(expr);
1595
+ case 'selector':
1596
+ // Selectors are handled inline in builtins
1597
+ return { kind: 'var', name: this.selectorToString(expr.sel) };
1598
+ case 'binary':
1599
+ return this.lowerBinaryExpr(expr);
1600
+ case 'is_check':
1601
+ throw new diagnostics_1.DiagnosticError('LoweringError', "'is' checks are only supported as if conditions", expr.span ?? { line: 0, col: 0 });
1602
+ case 'unary':
1603
+ return this.lowerUnaryExpr(expr);
1604
+ case 'assign':
1605
+ return this.lowerAssignExpr(expr);
1606
+ case 'call':
1607
+ return this.lowerCallExpr(expr);
1608
+ case 'static_call':
1609
+ return this.lowerStaticCallExpr(expr);
1610
+ case 'invoke':
1611
+ return this.lowerInvokeExpr(expr);
1612
+ case 'member_assign':
1613
+ return this.lowerMemberAssign(expr);
1614
+ case 'index':
1615
+ return this.lowerIndexExpr(expr);
1616
+ case 'struct_lit':
1617
+ // Struct literals should be handled in let statement
1618
+ return { kind: 'const', value: 0 };
1619
+ case 'array_lit':
1620
+ // Array literals should be handled in let statement
1621
+ return { kind: 'const', value: 0 };
1622
+ case 'lambda':
1623
+ throw new Error('Lambda expressions must be used in a function context');
1624
+ }
1625
+ throw new Error(`Unhandled expression kind: ${expr.kind}`);
1626
+ }
1627
+ lowerMemberExpr(expr) {
1628
+ // Check if this is a struct field access
1629
+ if (expr.obj.kind === 'ident') {
1630
+ const varType = this.varTypes.get(expr.obj.name);
1631
+ // Check for world object handle (entity selector)
1632
+ const mapped = this.varMap.get(expr.obj.name);
1633
+ if (mapped && mapped.startsWith('@e[tag=__rs_obj_')) {
1634
+ // World object field access → scoreboard get
1635
+ const dst = this.builder.freshTemp();
1636
+ this.builder.emitRaw(`scoreboard players operation ${dst} ${exports.LOWERING_OBJ} = ${mapped} ${exports.LOWERING_OBJ}`);
1637
+ return { kind: 'var', name: dst };
1638
+ }
1639
+ if (varType?.kind === 'struct') {
1640
+ const structName = varType.name.toLowerCase();
1641
+ const path = `rs:heap ${structName}_${expr.obj.name}.${expr.field}`;
1642
+ const dst = this.builder.freshTemp();
1643
+ // Read from NBT storage into scoreboard
1644
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage ${path}`);
1645
+ return { kind: 'var', name: dst };
1646
+ }
1647
+ // Array length property
1648
+ if (varType?.kind === 'array' && expr.field === 'len') {
1649
+ const dst = this.builder.freshTemp();
1650
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage rs:heap ${expr.obj.name}`);
1651
+ return { kind: 'var', name: dst };
1652
+ }
1653
+ }
1654
+ // Default behavior: simple member access
1655
+ return { kind: 'var', name: `$${expr.obj.name}_${expr.field}` };
1656
+ }
1657
+ lowerMemberAssign(expr) {
1658
+ if (expr.obj.kind === 'ident') {
1659
+ const varType = this.varTypes.get(expr.obj.name);
1660
+ // Check for world object handle
1661
+ const mapped = this.varMap.get(expr.obj.name);
1662
+ if (mapped && mapped.startsWith('@e[tag=__rs_obj_')) {
1663
+ const value = this.lowerExpr(expr.value);
1664
+ if (expr.op === '=') {
1665
+ if (value.kind === 'const') {
1666
+ this.builder.emitRaw(`scoreboard players set ${mapped} ${exports.LOWERING_OBJ} ${value.value}`);
1667
+ }
1668
+ else if (value.kind === 'var') {
1669
+ this.builder.emitRaw(`scoreboard players operation ${mapped} ${exports.LOWERING_OBJ} = ${value.name} ${exports.LOWERING_OBJ}`);
1670
+ }
1671
+ }
1672
+ else {
1673
+ // Compound assignment
1674
+ const binOp = expr.op.slice(0, -1);
1675
+ const opMap = { '+': '+=', '-': '-=', '*': '*=', '/': '/=', '%': '%=' };
1676
+ if (value.kind === 'const') {
1677
+ const constTemp = this.builder.freshTemp();
1678
+ this.builder.emitAssign(constTemp, value);
1679
+ this.builder.emitRaw(`scoreboard players operation ${mapped} ${exports.LOWERING_OBJ} ${opMap[binOp]} ${constTemp} ${exports.LOWERING_OBJ}`);
1680
+ }
1681
+ else if (value.kind === 'var') {
1682
+ this.builder.emitRaw(`scoreboard players operation ${mapped} ${exports.LOWERING_OBJ} ${opMap[binOp]} ${value.name} ${exports.LOWERING_OBJ}`);
1683
+ }
1684
+ }
1685
+ return { kind: 'const', value: 0 };
1686
+ }
1687
+ if (varType?.kind === 'struct') {
1688
+ const structName = varType.name.toLowerCase();
1689
+ const path = `rs:heap ${structName}_${expr.obj.name}.${expr.field}`;
1690
+ const value = this.lowerExpr(expr.value);
1691
+ if (expr.op === '=') {
1692
+ if (value.kind === 'const') {
1693
+ this.builder.emitRaw(`data modify storage ${path} set value ${value.value}`);
1694
+ }
1695
+ else if (value.kind === 'var') {
1696
+ this.builder.emitRaw(`execute store result storage ${path} int 1 run scoreboard players get ${value.name} ${exports.LOWERING_OBJ}`);
1697
+ }
1698
+ }
1699
+ else {
1700
+ // Compound assignment: read, modify, write back
1701
+ const dst = this.builder.freshTemp();
1702
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage ${path}`);
1703
+ const binOp = expr.op.slice(0, -1);
1704
+ this.builder.emitBinop(dst, { kind: 'var', name: dst }, binOp, value);
1705
+ this.builder.emitRaw(`execute store result storage ${path} int 1 run scoreboard players get ${dst} ${exports.LOWERING_OBJ}`);
1706
+ }
1707
+ return { kind: 'const', value: 0 };
1708
+ }
1709
+ }
1710
+ // Default: simple assignment
1711
+ const varName = `$${expr.obj.name}_${expr.field}`;
1712
+ const value = this.lowerExpr(expr.value);
1713
+ this.builder.emitAssign(varName, value);
1714
+ return { kind: 'var', name: varName };
1715
+ }
1716
+ lowerIndexExpr(expr) {
1717
+ const arrayName = this.getArrayStorageName(expr.obj);
1718
+ if (arrayName) {
1719
+ return this.readArrayElement(arrayName, this.lowerExpr(expr.index));
1720
+ }
1721
+ return { kind: 'const', value: 0 };
1722
+ }
1723
+ lowerBinaryExpr(expr) {
1724
+ const left = this.lowerExpr(expr.left);
1725
+ const right = this.lowerExpr(expr.right);
1726
+ const dst = this.builder.freshTemp();
1727
+ if (['&&', '||'].includes(expr.op)) {
1728
+ // Logical operators need special handling
1729
+ if (expr.op === '&&') {
1730
+ // Short-circuit AND
1731
+ this.builder.emitAssign(dst, left);
1732
+ const rightVar = this.operandToVar(right);
1733
+ // dst = dst && right → if dst != 0 then dst = right
1734
+ this.builder.emitRaw(`execute if score ${dst} ${exports.LOWERING_OBJ} matches 1.. run scoreboard players operation ${dst} ${exports.LOWERING_OBJ} = ${rightVar} ${exports.LOWERING_OBJ}`);
1735
+ }
1736
+ else {
1737
+ // Short-circuit OR
1738
+ this.builder.emitAssign(dst, left);
1739
+ const rightVar = this.operandToVar(right);
1740
+ // dst = dst || right → if dst == 0 then dst = right
1741
+ this.builder.emitRaw(`execute if score ${dst} ${exports.LOWERING_OBJ} matches ..0 run scoreboard players operation ${dst} ${exports.LOWERING_OBJ} = ${rightVar} ${exports.LOWERING_OBJ}`);
1742
+ }
1743
+ return { kind: 'var', name: dst };
1744
+ }
1745
+ if (['==', '!=', '<', '<=', '>', '>='].includes(expr.op)) {
1746
+ this.builder.emitCmp(dst, left, expr.op, right);
1747
+ }
1748
+ else {
1749
+ // Check if this is float arithmetic
1750
+ const isFloatOp = this.isFloatExpr(expr.left) || this.isFloatExpr(expr.right);
1751
+ if (isFloatOp && (expr.op === '*' || expr.op === '/')) {
1752
+ // Float multiplication: a * b / 1000
1753
+ // Float division: a * 1000 / b
1754
+ if (expr.op === '*') {
1755
+ this.builder.emitBinop(dst, left, '*', right);
1756
+ // Divide by 1000 to correct for double scaling
1757
+ const constDiv = this.builder.freshTemp();
1758
+ this.builder.emitAssign(constDiv, { kind: 'const', value: 1000 });
1759
+ this.builder.emitRaw(`scoreboard players operation ${dst} ${exports.LOWERING_OBJ} /= ${constDiv} ${exports.LOWERING_OBJ}`);
1760
+ }
1761
+ else {
1762
+ // Division: a * 1000 / b
1763
+ const constMul = this.builder.freshTemp();
1764
+ this.builder.emitAssign(constMul, { kind: 'const', value: 1000 });
1765
+ this.builder.emitAssign(dst, left);
1766
+ this.builder.emitRaw(`scoreboard players operation ${dst} ${exports.LOWERING_OBJ} *= ${constMul} ${exports.LOWERING_OBJ}`);
1767
+ const rightVar = this.operandToVar(right);
1768
+ this.builder.emitRaw(`scoreboard players operation ${dst} ${exports.LOWERING_OBJ} /= ${rightVar} ${exports.LOWERING_OBJ}`);
1769
+ }
1770
+ return { kind: 'var', name: dst };
1771
+ }
1772
+ this.builder.emitBinop(dst, left, expr.op, right);
1773
+ }
1774
+ return { kind: 'var', name: dst };
1775
+ }
1776
+ isFloatExpr(expr) {
1777
+ if (expr.kind === 'float_lit')
1778
+ return true;
1779
+ if (expr.kind === 'ident') {
1780
+ return this.floatVars.has(expr.name);
1781
+ }
1782
+ if (expr.kind === 'binary') {
1783
+ return this.isFloatExpr(expr.left) || this.isFloatExpr(expr.right);
1784
+ }
1785
+ return false;
1786
+ }
1787
+ lowerUnaryExpr(expr) {
1788
+ const operand = this.lowerExpr(expr.operand);
1789
+ const dst = this.builder.freshTemp();
1790
+ if (expr.op === '!') {
1791
+ // Logical NOT: dst = (operand == 0) ? 1 : 0
1792
+ this.builder.emitCmp(dst, operand, '==', { kind: 'const', value: 0 });
1793
+ }
1794
+ else if (expr.op === '-') {
1795
+ // Negation: dst = 0 - operand
1796
+ this.builder.emitBinop(dst, { kind: 'const', value: 0 }, '-', operand);
1797
+ }
1798
+ return { kind: 'var', name: dst };
1799
+ }
1800
+ lowerAssignExpr(expr) {
1801
+ // Check for const reassignment (both compile-time consts and immutable globals)
1802
+ if (this.constValues.has(expr.target)) {
1803
+ throw new diagnostics_1.DiagnosticError('LoweringError', `Cannot assign to constant '${expr.target}'`, getSpan(expr) ?? { line: 1, col: 1 });
1804
+ }
1805
+ const globalInfo = this.globalNames.get(expr.target);
1806
+ if (globalInfo && !globalInfo.mutable) {
1807
+ throw new diagnostics_1.DiagnosticError('LoweringError', `Cannot assign to constant '${expr.target}'`, getSpan(expr) ?? { line: 1, col: 1 });
1808
+ }
1809
+ const blockPosValue = this.resolveBlockPosExpr(expr.value);
1810
+ if (blockPosValue) {
1811
+ this.blockPosVars.set(expr.target, blockPosValue);
1812
+ return { kind: 'const', value: 0 };
1813
+ }
1814
+ this.blockPosVars.delete(expr.target);
1815
+ const targetType = this.varTypes.get(expr.target);
1816
+ if (targetType?.kind === 'named' && targetType.name === 'string' && this.storeStringValue(expr.target, expr.value)) {
1817
+ return { kind: 'const', value: 0 };
1818
+ }
1819
+ const varName = this.varMap.get(expr.target) ?? `$${expr.target}`;
1820
+ const value = this.lowerExpr(expr.value);
1821
+ if (expr.op === '=') {
1822
+ this.builder.emitAssign(varName, value);
1823
+ }
1824
+ else {
1825
+ // Compound assignment
1826
+ const binOp = expr.op.slice(0, -1); // Remove '='
1827
+ const dst = this.builder.freshTemp();
1828
+ this.builder.emitBinop(dst, { kind: 'var', name: varName }, binOp, value);
1829
+ this.builder.emitAssign(varName, { kind: 'var', name: dst });
1830
+ }
1831
+ return { kind: 'var', name: varName };
1832
+ }
1833
+ lowerCallExpr(expr) {
1834
+ if (expr.fn === 'str_len') {
1835
+ const storagePath = this.getStringStoragePath(expr.args[0]);
1836
+ if (storagePath) {
1837
+ const dst = this.builder.freshTemp();
1838
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage ${storagePath}`);
1839
+ return { kind: 'var', name: dst };
1840
+ }
1841
+ const staticString = this.resolveStaticString(expr.args[0]);
1842
+ if (staticString !== null) {
1843
+ return { kind: 'const', value: Array.from(staticString).length };
1844
+ }
1845
+ else {
1846
+ const dst = this.builder.freshTemp();
1847
+ this.builder.emitAssign(dst, { kind: 'const', value: 0 });
1848
+ return { kind: 'var', name: dst };
1849
+ }
1850
+ }
1851
+ // Check for builtin
1852
+ if (expr.fn in BUILTINS) {
1853
+ return this.lowerBuiltinCall(expr.fn, expr.args, getSpan(expr));
1854
+ }
1855
+ // Handle entity methods: __entity_tag, __entity_untag, __entity_has_tag
1856
+ if (expr.fn === '__entity_tag') {
1857
+ const entity = this.exprToString(expr.args[0]);
1858
+ const tagName = this.exprToString(expr.args[1]);
1859
+ this.builder.emitRaw(`tag ${entity} add ${tagName}`);
1860
+ return { kind: 'const', value: 0 };
1861
+ }
1862
+ if (expr.fn === '__entity_untag') {
1863
+ const entity = this.exprToString(expr.args[0]);
1864
+ const tagName = this.exprToString(expr.args[1]);
1865
+ this.builder.emitRaw(`tag ${entity} remove ${tagName}`);
1866
+ return { kind: 'const', value: 0 };
1867
+ }
1868
+ if (expr.fn === '__entity_has_tag') {
1869
+ const entity = this.exprToString(expr.args[0]);
1870
+ const tagName = this.exprToString(expr.args[1]);
1871
+ const dst = this.builder.freshTemp();
1872
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} if entity ${entity}[tag=${tagName}]`);
1873
+ return { kind: 'var', name: dst };
1874
+ }
1875
+ // Handle array push
1876
+ if (expr.fn === '__array_push') {
1877
+ const arrExpr = expr.args[0];
1878
+ const valueExpr = expr.args[1];
1879
+ const arrName = this.getArrayStorageName(arrExpr);
1880
+ if (arrName) {
1881
+ const value = this.lowerExpr(valueExpr);
1882
+ if (value.kind === 'const') {
1883
+ this.builder.emitRaw(`data modify storage rs:heap ${arrName} append value ${value.value}`);
1884
+ }
1885
+ else if (value.kind === 'var') {
1886
+ this.builder.emitRaw(`data modify storage rs:heap ${arrName} append value 0`);
1887
+ this.builder.emitRaw(`execute store result storage rs:heap ${arrName}[-1] int 1 run scoreboard players get ${value.name} ${exports.LOWERING_OBJ}`);
1888
+ }
1889
+ }
1890
+ return { kind: 'const', value: 0 };
1891
+ }
1892
+ if (expr.fn === '__array_pop') {
1893
+ const arrName = this.getArrayStorageName(expr.args[0]);
1894
+ const dst = this.builder.freshTemp();
1895
+ if (arrName) {
1896
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage rs:heap ${arrName}[-1]`);
1897
+ this.builder.emitRaw(`data remove storage rs:heap ${arrName}[-1]`);
1898
+ }
1899
+ else {
1900
+ this.builder.emitAssign(dst, { kind: 'const', value: 0 });
1901
+ }
1902
+ return { kind: 'var', name: dst };
1903
+ }
1904
+ // Handle spawn_object - creates world object (invisible armor stand)
1905
+ if (expr.fn === 'spawn_object') {
1906
+ const x = this.exprToString(expr.args[0]);
1907
+ const y = this.exprToString(expr.args[1]);
1908
+ const z = this.exprToString(expr.args[2]);
1909
+ const tag = `__rs_obj_${this.worldObjCounter++}`;
1910
+ this.builder.emitRaw(`summon minecraft:armor_stand ${x} ${y} ${z} {Invisible:1b,Marker:1b,NoGravity:1b,Tags:["${tag}"]}`);
1911
+ // Return a selector pointing to this entity
1912
+ const selector = `@e[tag=${tag},limit=1]`;
1913
+ return { kind: 'var', name: selector };
1914
+ }
1915
+ // Handle kill for world objects
1916
+ if (expr.fn === 'kill' && expr.args.length === 1 && expr.args[0].kind === 'ident') {
1917
+ const mapped = this.varMap.get(expr.args[0].name);
1918
+ if (mapped && mapped.startsWith('@e[tag=__rs_obj_')) {
1919
+ this.builder.emitRaw(`kill ${mapped}`);
1920
+ return { kind: 'const', value: 0 };
1921
+ }
1922
+ }
1923
+ const callbackTarget = this.resolveFunctionRefByName(expr.fn);
1924
+ if (callbackTarget) {
1925
+ return this.emitDirectFunctionCall(callbackTarget, expr.args);
1926
+ }
1927
+ const implMethod = this.resolveInstanceMethod(expr);
1928
+ if (implMethod) {
1929
+ // Copy struct fields from instance to 'self' storage before calling
1930
+ const receiver = expr.args[0];
1931
+ if (receiver?.kind === 'ident') {
1932
+ const receiverType = this.inferExprType(receiver);
1933
+ if (receiverType?.kind === 'struct') {
1934
+ const structDecl = this.structDecls.get(receiverType.name);
1935
+ const structName = receiverType.name.toLowerCase();
1936
+ if (structDecl) {
1937
+ for (const field of structDecl.fields) {
1938
+ const srcPath = `rs:heap ${structName}_${receiver.name}.${field.name}`;
1939
+ const dstPath = `rs:heap ${structName}_self.${field.name}`;
1940
+ this.builder.emitRaw(`data modify storage ${dstPath} set from storage ${srcPath}`);
1941
+ }
1942
+ }
1943
+ }
1944
+ }
1945
+ return this.emitMethodCall(implMethod.loweredName, implMethod.fn, expr.args);
1946
+ }
1947
+ // Regular function call
1948
+ const fnDecl = this.fnDecls.get(expr.fn);
1949
+ const defaultArgs = this.functionDefaults.get(expr.fn) ?? [];
1950
+ const fullArgs = [...expr.args];
1951
+ for (let i = fullArgs.length; i < defaultArgs.length; i++) {
1952
+ const defaultExpr = defaultArgs[i];
1953
+ if (!defaultExpr) {
1954
+ break;
1955
+ }
1956
+ fullArgs.push(defaultExpr);
1957
+ }
1958
+ if (fnDecl) {
1959
+ const callbackBindings = new Map();
1960
+ const runtimeArgs = [];
1961
+ for (let i = 0; i < fullArgs.length; i++) {
1962
+ const param = fnDecl.params[i];
1963
+ if (param && this.normalizeType(param.type).kind === 'function_type') {
1964
+ const functionRef = this.resolveFunctionRefExpr(fullArgs[i]);
1965
+ if (!functionRef) {
1966
+ throw new Error(`Cannot lower callback argument for parameter '${param.name}'`);
1967
+ }
1968
+ callbackBindings.set(param.name, functionRef);
1969
+ continue;
1970
+ }
1971
+ runtimeArgs.push(fullArgs[i]);
1972
+ }
1973
+ const stdlibCallSite = this.getStdlibCallSiteContext(fnDecl, getSpan(expr));
1974
+ const targetFn = callbackBindings.size > 0 || stdlibCallSite
1975
+ ? this.ensureSpecializedFunctionWithContext(fnDecl, callbackBindings, stdlibCallSite)
1976
+ : expr.fn;
1977
+ // Check if this is a call to a known macro function
1978
+ const macroParams = this.macroFunctionInfo.get(targetFn);
1979
+ if (macroParams && macroParams.length > 0) {
1980
+ return this.emitMacroFunctionCall(targetFn, runtimeArgs, macroParams, fnDecl);
1981
+ }
1982
+ return this.emitDirectFunctionCall(targetFn, runtimeArgs);
1983
+ }
1984
+ // Check for macro function (forward-declared or external)
1985
+ const macroParamsForUnknown = this.macroFunctionInfo.get(expr.fn);
1986
+ if (macroParamsForUnknown && macroParamsForUnknown.length > 0) {
1987
+ return this.emitMacroFunctionCall(expr.fn, fullArgs, macroParamsForUnknown, undefined);
1988
+ }
1989
+ return this.emitDirectFunctionCall(expr.fn, fullArgs);
1990
+ }
1991
+ lowerStaticCallExpr(expr) {
1992
+ const method = this.implMethods.get(expr.type)?.get(expr.method);
1993
+ const targetFn = method?.loweredName ?? `${expr.type}_${expr.method}`;
1994
+ return this.emitMethodCall(targetFn, method?.fn, expr.args);
1995
+ }
1996
+ lowerInvokeExpr(expr) {
1997
+ if (expr.callee.kind === 'lambda') {
1998
+ if (!Array.isArray(expr.callee.body)) {
1999
+ return this.inlineLambdaInvoke(expr.callee, expr.args);
2000
+ }
2001
+ const lambdaName = this.lowerLambdaExpr(expr.callee);
2002
+ return this.emitDirectFunctionCall(lambdaName, expr.args);
2003
+ }
2004
+ const functionRef = this.resolveFunctionRefExpr(expr.callee);
2005
+ if (!functionRef) {
2006
+ throw new Error('Cannot invoke a non-function value');
2007
+ }
2008
+ return this.emitDirectFunctionCall(functionRef, expr.args);
2009
+ }
2010
+ inlineLambdaInvoke(expr, args) {
2011
+ const savedVarMap = new Map(this.varMap);
2012
+ const savedVarTypes = new Map(this.varTypes);
2013
+ const savedLambdaBindings = new Map(this.lambdaBindings);
2014
+ const savedBlockPosVars = new Map(this.blockPosVars);
2015
+ for (let i = 0; i < expr.params.length; i++) {
2016
+ const param = expr.params[i];
2017
+ const temp = this.builder.freshTemp();
2018
+ const arg = args[i];
2019
+ this.builder.emitAssign(temp, arg ? this.lowerExpr(arg) : { kind: 'const', value: 0 });
2020
+ this.varMap.set(param.name, temp);
2021
+ if (param.type) {
2022
+ this.varTypes.set(param.name, this.normalizeType(param.type));
2023
+ }
2024
+ this.lambdaBindings.delete(param.name);
2025
+ this.blockPosVars.delete(param.name);
2026
+ }
2027
+ const result = this.lowerExpr(expr.body);
2028
+ this.varMap = savedVarMap;
2029
+ this.varTypes = savedVarTypes;
2030
+ this.lambdaBindings = savedLambdaBindings;
2031
+ this.blockPosVars = savedBlockPosVars;
2032
+ return result;
2033
+ }
2034
+ emitDirectFunctionCall(fn, args) {
2035
+ const loweredArgs = args.map(arg => this.lowerExpr(arg));
2036
+ const dst = this.builder.freshTemp();
2037
+ this.builder.emitCall(fn, loweredArgs, dst);
2038
+ return { kind: 'var', name: dst };
2039
+ }
2040
+ emitMethodCall(fn, fnDecl, args) {
2041
+ const defaultArgs = this.functionDefaults.get(fn) ?? fnDecl?.params.map(param => param.default) ?? [];
2042
+ const fullArgs = [...args];
2043
+ for (let i = fullArgs.length; i < defaultArgs.length; i++) {
2044
+ const defaultExpr = defaultArgs[i];
2045
+ if (!defaultExpr) {
2046
+ break;
2047
+ }
2048
+ fullArgs.push(defaultExpr);
2049
+ }
2050
+ return this.emitDirectFunctionCall(fn, fullArgs);
2051
+ }
2052
+ resolveFunctionRefExpr(expr) {
2053
+ if (expr.kind === 'lambda') {
2054
+ return this.lowerLambdaExpr(expr);
2055
+ }
2056
+ if (expr.kind === 'ident') {
2057
+ return this.resolveFunctionRefByName(expr.name) ?? (this.fnDecls.has(expr.name) ? expr.name : null);
2058
+ }
2059
+ return null;
2060
+ }
2061
+ resolveFunctionRefByName(name) {
2062
+ return this.lambdaBindings.get(name) ?? this.currentCallbackBindings.get(name) ?? null;
2063
+ }
2064
+ ensureSpecializedFunction(fn, callbackBindings) {
2065
+ return this.ensureSpecializedFunctionWithContext(fn, callbackBindings);
2066
+ }
2067
+ ensureSpecializedFunctionWithContext(fn, callbackBindings, stdlibCallSite) {
2068
+ const parts = [...callbackBindings.entries()]
2069
+ .sort(([left], [right]) => left.localeCompare(right))
2070
+ .map(([param, target]) => `${param}_${target.replace(/[^a-zA-Z0-9_]/g, '_')}`);
2071
+ const callSiteHash = stdlibCallSite ? this.shortHash(this.serializeCallSite(stdlibCallSite)) : null;
2072
+ if (callSiteHash) {
2073
+ parts.push(`callsite_${callSiteHash}`);
2074
+ }
2075
+ const key = `${fn.name}::${parts.join('::')}`;
2076
+ const cached = this.specializedFunctions.get(key);
2077
+ if (cached) {
2078
+ return cached;
2079
+ }
2080
+ const specializedName = `${fn.name}__${parts.join('__')}`;
2081
+ this.specializedFunctions.set(key, specializedName);
2082
+ this.withSavedFunctionState(() => {
2083
+ this.lowerFn(fn, { name: specializedName, callbackBindings, stdlibCallSite });
2084
+ });
2085
+ return specializedName;
2086
+ }
2087
+ lowerLambdaExpr(expr) {
2088
+ const lambdaName = `__lambda_${this.lambdaCounter++}`;
2089
+ const lambdaFn = {
2090
+ name: lambdaName,
2091
+ params: expr.params.map(param => ({
2092
+ name: param.name,
2093
+ type: param.type ?? { kind: 'named', name: 'int' },
2094
+ })),
2095
+ returnType: expr.returnType ?? this.inferLambdaReturnType(expr),
2096
+ decorators: [],
2097
+ body: Array.isArray(expr.body) ? expr.body : [{ kind: 'return', value: expr.body }],
2098
+ };
2099
+ this.withSavedFunctionState(() => {
2100
+ this.lowerFn(lambdaFn);
2101
+ });
2102
+ return lambdaName;
2103
+ }
2104
+ withSavedFunctionState(callback) {
2105
+ const savedCurrentFn = this.currentFn;
2106
+ const savedStdlibCallSite = this.currentStdlibCallSite;
2107
+ const savedForeachCounter = this.foreachCounter;
2108
+ const savedBuilder = this.builder;
2109
+ const savedVarMap = new Map(this.varMap);
2110
+ const savedLambdaBindings = new Map(this.lambdaBindings);
2111
+ const savedIntervalBindings = new Map(this.intervalBindings);
2112
+ const savedCallbackBindings = new Map(this.currentCallbackBindings);
2113
+ const savedContext = this.currentContext;
2114
+ const savedBlockPosVars = new Map(this.blockPosVars);
2115
+ const savedStringValues = new Map(this.stringValues);
2116
+ const savedVarTypes = new Map(this.varTypes);
2117
+ // Macro tracking state
2118
+ const savedCurrentFnParamNames = new Set(this.currentFnParamNames);
2119
+ const savedCurrentFnMacroParams = new Set(this.currentFnMacroParams);
2120
+ try {
2121
+ return callback();
2122
+ }
2123
+ finally {
2124
+ this.currentFn = savedCurrentFn;
2125
+ this.currentStdlibCallSite = savedStdlibCallSite;
2126
+ this.foreachCounter = savedForeachCounter;
2127
+ this.builder = savedBuilder;
2128
+ this.varMap = savedVarMap;
2129
+ this.lambdaBindings = savedLambdaBindings;
2130
+ this.intervalBindings = savedIntervalBindings;
2131
+ this.currentCallbackBindings = savedCallbackBindings;
2132
+ this.currentContext = savedContext;
2133
+ this.blockPosVars = savedBlockPosVars;
2134
+ this.stringValues = savedStringValues;
2135
+ this.varTypes = savedVarTypes;
2136
+ this.currentFnParamNames = savedCurrentFnParamNames;
2137
+ this.currentFnMacroParams = savedCurrentFnMacroParams;
2138
+ }
2139
+ }
2140
+ lowerBuiltinCall(name, args, callSpan) {
2141
+ const richTextCommand = this.lowerRichTextBuiltin(name, args);
2142
+ if (richTextCommand) {
2143
+ this.builder.emitRaw(richTextCommand);
2144
+ return { kind: 'const', value: 0 };
2145
+ }
2146
+ if (name === 'setTimeout') {
2147
+ return this.lowerSetTimeout(args);
2148
+ }
2149
+ if (name === 'setInterval') {
2150
+ return this.lowerSetInterval(args);
2151
+ }
2152
+ if (name === 'clearInterval') {
2153
+ return this.lowerClearInterval(args, callSpan);
2154
+ }
2155
+ // Special case: random - legacy scoreboard RNG for pre-1.20.3 compatibility
2156
+ if (name === 'random') {
2157
+ const dst = this.builder.freshTemp();
2158
+ const min = args[0] ? this.exprToLiteral(args[0]) : '0';
2159
+ const max = args[1] ? this.exprToLiteral(args[1]) : '100';
2160
+ this.builder.emitRaw(`scoreboard players random ${dst} ${exports.LOWERING_OBJ} ${min} ${max}`);
2161
+ return { kind: 'var', name: dst };
2162
+ }
2163
+ // Special case: random_native - /random value (MC 1.20.3+)
2164
+ if (name === 'random_native') {
2165
+ const dst = this.builder.freshTemp();
2166
+ const min = args[0] ? this.exprToLiteral(args[0]) : '0';
2167
+ const max = args[1] ? this.exprToLiteral(args[1]) : '100';
2168
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run random value ${min} ${max}`);
2169
+ return { kind: 'var', name: dst };
2170
+ }
2171
+ // Special case: random_sequence - /random reset (MC 1.20.3+)
2172
+ if (name === 'random_sequence') {
2173
+ const sequence = this.exprToString(args[0]);
2174
+ const seed = args[1] ? this.exprToLiteral(args[1]) : '0';
2175
+ this.builder.emitRaw(`random reset ${sequence} ${seed}`);
2176
+ return { kind: 'const', value: 0 };
2177
+ }
2178
+ // Special case: scoreboard_get / score — read from vanilla MC scoreboard
2179
+ if (name === 'scoreboard_get' || name === 'score') {
2180
+ const dst = this.builder.freshTemp();
2181
+ const player = this.exprToTargetString(args[0]);
2182
+ const objective = this.resolveScoreboardObjective(args[0], args[1], callSpan);
2183
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run scoreboard players get ${player} ${objective}`);
2184
+ return { kind: 'var', name: dst };
2185
+ }
2186
+ // Special case: scoreboard_set — write to vanilla MC scoreboard
2187
+ if (name === 'scoreboard_set') {
2188
+ const player = this.exprToTargetString(args[0]);
2189
+ const objective = this.resolveScoreboardObjective(args[0], args[1], callSpan);
2190
+ const value = this.lowerExpr(args[2]);
2191
+ if (value.kind === 'const') {
2192
+ this.builder.emitRaw(`scoreboard players set ${player} ${objective} ${value.value}`);
2193
+ }
2194
+ else if (value.kind === 'var') {
2195
+ // Read directly from the computed scoreboard temp. Routing through a fresh
2196
+ // temp here breaks once optimization removes the apparently-dead assign.
2197
+ this.builder.emitRaw(`execute store result score ${player} ${objective} run scoreboard players get ${value.name} ${exports.LOWERING_OBJ}`);
2198
+ }
2199
+ return { kind: 'const', value: 0 };
2200
+ }
2201
+ if (name === 'scoreboard_display') {
2202
+ const slot = this.exprToString(args[0]);
2203
+ const objective = this.resolveScoreboardObjective(undefined, args[1], callSpan);
2204
+ this.builder.emitRaw(`scoreboard objectives setdisplay ${slot} ${objective}`);
2205
+ return { kind: 'const', value: 0 };
2206
+ }
2207
+ if (name === 'scoreboard_hide') {
2208
+ const slot = this.exprToString(args[0]);
2209
+ this.builder.emitRaw(`scoreboard objectives setdisplay ${slot}`);
2210
+ return { kind: 'const', value: 0 };
2211
+ }
2212
+ if (name === 'scoreboard_add_objective') {
2213
+ const objective = this.resolveScoreboardObjective(undefined, args[0], callSpan);
2214
+ const criteria = this.exprToString(args[1]);
2215
+ const displayName = args[2] ? ` ${this.exprToQuotedString(args[2])}` : '';
2216
+ this.builder.emitRaw(`scoreboard objectives add ${objective} ${criteria}${displayName}`);
2217
+ return { kind: 'const', value: 0 };
2218
+ }
2219
+ if (name === 'scoreboard_remove_objective') {
2220
+ const objective = this.resolveScoreboardObjective(undefined, args[0], callSpan);
2221
+ this.builder.emitRaw(`scoreboard objectives remove ${objective}`);
2222
+ return { kind: 'const', value: 0 };
2223
+ }
2224
+ if (name === 'bossbar_add') {
2225
+ const id = this.exprToString(args[0]);
2226
+ const title = this.exprToTextComponent(args[1]);
2227
+ this.builder.emitRaw(`bossbar add ${id} ${title}`);
2228
+ return { kind: 'const', value: 0 };
2229
+ }
2230
+ if (name === 'bossbar_set_value') {
2231
+ this.builder.emitRaw(`bossbar set ${this.exprToString(args[0])} value ${this.exprToString(args[1])}`);
2232
+ return { kind: 'const', value: 0 };
2233
+ }
2234
+ if (name === 'bossbar_set_max') {
2235
+ this.builder.emitRaw(`bossbar set ${this.exprToString(args[0])} max ${this.exprToString(args[1])}`);
2236
+ return { kind: 'const', value: 0 };
2237
+ }
2238
+ if (name === 'bossbar_set_color') {
2239
+ this.builder.emitRaw(`bossbar set ${this.exprToString(args[0])} color ${this.exprToString(args[1])}`);
2240
+ return { kind: 'const', value: 0 };
2241
+ }
2242
+ if (name === 'bossbar_set_style') {
2243
+ this.builder.emitRaw(`bossbar set ${this.exprToString(args[0])} style ${this.exprToString(args[1])}`);
2244
+ return { kind: 'const', value: 0 };
2245
+ }
2246
+ if (name === 'bossbar_set_visible') {
2247
+ this.builder.emitRaw(`bossbar set ${this.exprToString(args[0])} visible ${this.exprToBoolString(args[1])}`);
2248
+ return { kind: 'const', value: 0 };
2249
+ }
2250
+ if (name === 'bossbar_set_players') {
2251
+ this.builder.emitRaw(`bossbar set ${this.exprToString(args[0])} players ${this.exprToTargetString(args[1])}`);
2252
+ return { kind: 'const', value: 0 };
2253
+ }
2254
+ if (name === 'bossbar_remove') {
2255
+ this.builder.emitRaw(`bossbar remove ${this.exprToString(args[0])}`);
2256
+ return { kind: 'const', value: 0 };
2257
+ }
2258
+ if (name === 'bossbar_get_value') {
2259
+ const dst = this.builder.freshTemp();
2260
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run bossbar get ${this.exprToString(args[0])} value`);
2261
+ return { kind: 'var', name: dst };
2262
+ }
2263
+ if (name === 'team_add') {
2264
+ const team = this.exprToString(args[0]);
2265
+ const displayName = args[1] ? ` ${this.exprToTextComponent(args[1])}` : '';
2266
+ this.builder.emitRaw(`team add ${team}${displayName}`);
2267
+ return { kind: 'const', value: 0 };
2268
+ }
2269
+ if (name === 'team_remove') {
2270
+ this.builder.emitRaw(`team remove ${this.exprToString(args[0])}`);
2271
+ return { kind: 'const', value: 0 };
2272
+ }
2273
+ if (name === 'team_join') {
2274
+ this.builder.emitRaw(`team join ${this.exprToString(args[0])} ${this.exprToTargetString(args[1])}`);
2275
+ return { kind: 'const', value: 0 };
2276
+ }
2277
+ if (name === 'team_leave') {
2278
+ this.builder.emitRaw(`team leave ${this.exprToTargetString(args[0])}`);
2279
+ return { kind: 'const', value: 0 };
2280
+ }
2281
+ if (name === 'team_option') {
2282
+ const team = this.exprToString(args[0]);
2283
+ const option = this.exprToString(args[1]);
2284
+ const value = this.isTeamTextOption(option)
2285
+ ? this.exprToTextComponent(args[2])
2286
+ : this.exprToString(args[2]);
2287
+ this.builder.emitRaw(`team modify ${team} ${option} ${value}`);
2288
+ return { kind: 'const', value: 0 };
2289
+ }
2290
+ // Special case: data_get — read NBT data into a variable
2291
+ // data_get(target_type, target, path, scale?)
2292
+ // target_type: "entity", "block", "storage"
2293
+ if (name === 'data_get') {
2294
+ const dst = this.builder.freshTemp();
2295
+ const targetType = this.exprToString(args[0]);
2296
+ const target = targetType === 'entity'
2297
+ ? this.exprToTargetString(args[1])
2298
+ : this.exprToString(args[1]);
2299
+ const path = this.exprToString(args[2]);
2300
+ const scale = args[3] ? this.exprToString(args[3]) : '1';
2301
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get ${targetType} ${target} ${path} ${scale}`);
2302
+ return { kind: 'var', name: dst };
2303
+ }
2304
+ // storage_get_int(storage_ns, array_key, index) -> int
2305
+ // Reads one element from an NBT int-array stored in data storage.
2306
+ // storage_ns : e.g. "math:tables"
2307
+ // array_key : e.g. "sin"
2308
+ // index : integer index (const or runtime)
2309
+ //
2310
+ // Const index: execute store result score $dst ${LOWERING_OBJ} run data get storage math:tables sin[N] 1
2311
+ // Runtime index: macro sub-function via rs:heap, mirrors readArrayElement.
2312
+ if (name === 'storage_get_int') {
2313
+ const storageNs = this.exprToString(args[0]); // "math:tables"
2314
+ const arrayKey = this.exprToString(args[1]); // "sin"
2315
+ const indexOperand = this.lowerExpr(args[2]);
2316
+ const dst = this.builder.freshTemp();
2317
+ if (indexOperand.kind === 'const') {
2318
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage ${storageNs} ${arrayKey}[${indexOperand.value}] 1`);
2319
+ }
2320
+ else {
2321
+ // Runtime index: store the index into rs:heap under a unique key,
2322
+ // then call a macro sub-function that uses $(key) to index the array.
2323
+ const macroKey = `__sgi_${this.foreachCounter++}`;
2324
+ const subFnName = `${this.currentFn}/__sgi_${this.foreachCounter++}`;
2325
+ const indexVar = indexOperand.kind === 'var'
2326
+ ? indexOperand.name
2327
+ : this.operandToVar(indexOperand);
2328
+ this.builder.emitRaw(`execute store result storage rs:heap ${macroKey} int 1 run scoreboard players get ${indexVar} ${exports.LOWERING_OBJ}`);
2329
+ this.builder.emitRaw(`function ${this.namespace}:${subFnName} with storage rs:heap`);
2330
+ // Prefix \x01 is a sentinel for the MC macro '$' line-start marker.
2331
+ // We avoid using literal '$execute' here so the pre-alloc pass
2332
+ // doesn't mistakenly register 'execute' as a scoreboard variable.
2333
+ // Codegen replaces \x01 → '$' when emitting the mc function file.
2334
+ this.emitRawSubFunction(subFnName, `\x01execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage ${storageNs} ${arrayKey}[$(${macroKey})] 1`);
2335
+ }
2336
+ return { kind: 'var', name: dst };
2337
+ }
2338
+ // storage_set_array(storage_ns, array_key, nbt_array_literal)
2339
+ // Writes a literal NBT int array to data storage (used in @load for tables).
2340
+ // storage_set_array("math:tables", "sin", "[0, 17, 35, ...]")
2341
+ if (name === 'storage_set_array') {
2342
+ const storageNs = this.exprToString(args[0]);
2343
+ const arrayKey = this.exprToString(args[1]);
2344
+ const nbtLiteral = this.exprToString(args[2]);
2345
+ this.builder.emitRaw(`data modify storage ${storageNs} ${arrayKey} set value ${nbtLiteral}`);
2346
+ return { kind: 'const', value: 0 };
2347
+ }
2348
+ // storage_set_int(storage_ns, array_key, index, value) -> void
2349
+ // Writes one integer element into an NBT int-array stored in data storage.
2350
+ // storage_ns : e.g. "rs:bigint"
2351
+ // array_key : e.g. "a"
2352
+ // index : element index (const or runtime)
2353
+ // value : integer value to write (const or runtime)
2354
+ //
2355
+ // Const index + const value:
2356
+ // execute store result storage <ns> <key>[N] int 1 run scoreboard players set $const_V ${LOWERING_OBJ} V
2357
+ // Runtime index or value: macro sub-function via rs:heap
2358
+ if (name === 'storage_set_int') {
2359
+ const storageNs = this.exprToString(args[0]);
2360
+ const arrayKey = this.exprToString(args[1]);
2361
+ const indexOperand = this.lowerExpr(args[2]);
2362
+ const valueOperand = this.lowerExpr(args[3]);
2363
+ if (indexOperand.kind === 'const') {
2364
+ // Static index — use execute store result to write to the fixed slot
2365
+ const valVar = valueOperand.kind === 'var'
2366
+ ? valueOperand.name
2367
+ : this.operandToVar(valueOperand);
2368
+ this.builder.emitRaw(`execute store result storage ${storageNs} ${arrayKey}[${indexOperand.value}] int 1 run scoreboard players get ${valVar} ${exports.LOWERING_OBJ}`);
2369
+ }
2370
+ else {
2371
+ // Runtime index: we need a macro sub-function.
2372
+ // Store index + value into rs:heap, call macro that does:
2373
+ // $data modify storage <ns> <key>[$(idx_key)] set value $(val_key)
2374
+ const macroIdxKey = `__ssi_i_${this.foreachCounter++}`;
2375
+ const macroValKey = `__ssi_v_${this.foreachCounter++}`; // kept to pin valVar in optimizer
2376
+ const subFnName = `${this.currentFn}/__ssi_${this.foreachCounter++}`;
2377
+ const indexVar = indexOperand.kind === 'var'
2378
+ ? indexOperand.name
2379
+ : this.operandToVar(indexOperand);
2380
+ const valVar = valueOperand.kind === 'var'
2381
+ ? valueOperand.name
2382
+ : this.operandToVar(valueOperand);
2383
+ this.builder.emitRaw(`execute store result storage rs:heap ${macroIdxKey} int 1 run scoreboard players get ${indexVar} ${exports.LOWERING_OBJ}`);
2384
+ // Pin valVar in the optimizer's read-set so the assignment is not dead-code-eliminated.
2385
+ // The value is stored to rs:heap but NOT used by the macro (the macro reads the scoreboard
2386
+ // slot directly to avoid the MC 'data modify set value $(n)' macro substitution bug).
2387
+ this.builder.emitRaw(`execute store result storage rs:heap ${macroValKey} int 1 run scoreboard players get ${valVar} ${exports.LOWERING_OBJ}`);
2388
+ this.builder.emitRaw(`function ${this.namespace}:${subFnName} with storage rs:heap`);
2389
+ // Use execute store result (not 'data modify set value $(val)') to avoid MC macro
2390
+ // substitution bugs with numeric values. The scoreboard slot ${valVar} is hardcoded
2391
+ // into the macro sub-function at compile time — only the array index is macro-substituted.
2392
+ this.emitRawSubFunction(subFnName, `\x01execute store result storage ${storageNs} ${arrayKey}[$(${macroIdxKey})] int 1 run scoreboard players get ${valVar} ${exports.LOWERING_OBJ}`);
2393
+ }
2394
+ return { kind: 'const', value: 0 };
2395
+ }
2396
+ // data_merge(target, nbt) — merge NBT into entity/block/storage
2397
+ // data_merge(@s, { Invisible: 1b, Silent: 1b })
2398
+ if (name === 'data_merge') {
2399
+ const target = args[0];
2400
+ const nbt = args[1];
2401
+ const nbtStr = this.exprToSnbt ? this.exprToSnbt(nbt) : this.exprToString(nbt);
2402
+ // Check if target is a selector (entity) or string (block/storage)
2403
+ if (target.kind === 'selector') {
2404
+ const sel = this.exprToTargetString(target);
2405
+ this.builder.emitRaw(`data merge entity ${sel} ${nbtStr}`);
2406
+ }
2407
+ else {
2408
+ // Assume block position or storage
2409
+ const targetStr = this.exprToString(target);
2410
+ // If it looks like coordinates, use block; otherwise storage
2411
+ if (targetStr.match(/^~|^\d|^\^/)) {
2412
+ this.builder.emitRaw(`data merge block ${targetStr} ${nbtStr}`);
2413
+ }
2414
+ else {
2415
+ this.builder.emitRaw(`data merge storage ${targetStr} ${nbtStr}`);
2416
+ }
2417
+ }
2418
+ return { kind: 'const', value: 0 };
2419
+ }
2420
+ // Set data structure operations — unique collections via NBT storage
2421
+ // set_new is primarily handled in lowerLetStmt for proper string tracking.
2422
+ // This fallback handles standalone set_new() calls without assignment.
2423
+ if (name === 'set_new') {
2424
+ const setId = `__set_${this.foreachCounter++}`;
2425
+ this.builder.emitRaw(`data modify storage rs:sets ${setId} set value []`);
2426
+ return { kind: 'const', value: 0 };
2427
+ }
2428
+ if (name === 'set_add') {
2429
+ const setId = this.exprToString(args[0]);
2430
+ const value = this.exprToString(args[1]);
2431
+ this.builder.emitRaw(`execute unless data storage rs:sets ${setId}[{value:${value}}] run data modify storage rs:sets ${setId} append value {value:${value}}`);
2432
+ return { kind: 'const', value: 0 };
2433
+ }
2434
+ if (name === 'set_contains') {
2435
+ const dst = this.builder.freshTemp();
2436
+ const setId = this.exprToString(args[0]);
2437
+ const value = this.exprToString(args[1]);
2438
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} if data storage rs:sets ${setId}[{value:${value}}]`);
2439
+ return { kind: 'var', name: dst };
2440
+ }
2441
+ if (name === 'set_remove') {
2442
+ const setId = this.exprToString(args[0]);
2443
+ const value = this.exprToString(args[1]);
2444
+ this.builder.emitRaw(`data remove storage rs:sets ${setId}[{value:${value}}]`);
2445
+ return { kind: 'const', value: 0 };
2446
+ }
2447
+ if (name === 'set_clear') {
2448
+ const setId = this.exprToString(args[0]);
2449
+ this.builder.emitRaw(`data modify storage rs:sets ${setId} set value []`);
2450
+ return { kind: 'const', value: 0 };
2451
+ }
2452
+ const coordCommand = this.lowerCoordinateBuiltin(name, args);
2453
+ if (coordCommand) {
2454
+ this.builder.emitRaw(coordCommand);
2455
+ return { kind: 'const', value: 0 };
2456
+ }
2457
+ if (name === 'tp_to') {
2458
+ this.warnings.push({
2459
+ message: 'tp_to is deprecated; use tp instead',
2460
+ code: 'W_DEPRECATED',
2461
+ ...(callSpan ? { line: callSpan.line, col: callSpan.col } : {}),
2462
+ });
2463
+ const tpResult = this.lowerTpCommandMacroAware(args);
2464
+ if (tpResult) {
2465
+ this.builder.emitRaw(tpResult.cmd);
2466
+ }
2467
+ return { kind: 'const', value: 0 };
2468
+ }
2469
+ if (name === 'tp') {
2470
+ const tpResult = this.lowerTpCommandMacroAware(args);
2471
+ if (tpResult) {
2472
+ this.builder.emitRaw(tpResult.cmd);
2473
+ }
2474
+ return { kind: 'const', value: 0 };
2475
+ }
2476
+ // All builtins support macro params - check if any arg is a param needing macro treatment
2477
+ const argResults = args.map(arg => this.exprToBuiltinArg(arg));
2478
+ const hasMacroArg = argResults.some(r => r.macroParam !== undefined);
2479
+ if (hasMacroArg) {
2480
+ argResults.forEach(r => { if (r.macroParam)
2481
+ this.currentFnMacroParams.add(r.macroParam); });
2482
+ }
2483
+ const strArgs = argResults.map(r => r.str);
2484
+ const cmd = BUILTINS[name]?.(strArgs);
2485
+ if (cmd) {
2486
+ // Use \x01 sentinel (not literal '$') so resolveRaw doesn't treat the
2487
+ // MC macro prefix as a variable reference and allocate a fresh temp for it.
2488
+ this.builder.emitRaw(hasMacroArg ? `\x01${cmd}` : cmd);
2489
+ }
2490
+ return { kind: 'const', value: 0 };
2491
+ }
2492
+ lowerSetTimeout(args) {
2493
+ const delay = this.exprToLiteral(args[0]);
2494
+ const callback = args[1];
2495
+ if (!callback || callback.kind !== 'lambda') {
2496
+ throw new diagnostics_1.DiagnosticError('LoweringError', 'setTimeout requires a lambda callback', getSpan(callback) ?? { line: 1, col: 1 });
2497
+ }
2498
+ const fnName = `__timeout_${this.timeoutCounter++}`;
2499
+ this.lowerNamedLambdaFunction(fnName, callback);
2500
+ this.builder.emitRaw(`schedule function ${this.namespace}:${fnName} ${delay}t`);
2501
+ return { kind: 'const', value: 0 };
2502
+ }
2503
+ lowerSetInterval(args) {
2504
+ const delay = this.exprToLiteral(args[0]);
2505
+ const callback = args[1];
2506
+ if (!callback || callback.kind !== 'lambda') {
2507
+ throw new diagnostics_1.DiagnosticError('LoweringError', 'setInterval requires a lambda callback', getSpan(callback) ?? { line: 1, col: 1 });
2508
+ }
2509
+ const id = this.intervalCounter++;
2510
+ const bodyName = `__interval_body_${id}`;
2511
+ const fnName = `__interval_${id}`;
2512
+ this.lowerNamedLambdaFunction(bodyName, callback);
2513
+ this.lowerIntervalWrapperFunction(fnName, bodyName, delay);
2514
+ this.intervalFunctions.set(id, fnName);
2515
+ this.builder.emitRaw(`schedule function ${this.namespace}:${fnName} ${delay}t`);
2516
+ return { kind: 'const', value: id };
2517
+ }
2518
+ lowerClearInterval(args, callSpan) {
2519
+ const fnName = this.resolveIntervalFunctionName(args[0]);
2520
+ if (!fnName) {
2521
+ throw new diagnostics_1.DiagnosticError('LoweringError', 'clearInterval requires an interval ID returned from setInterval', callSpan ?? getSpan(args[0]) ?? { line: 1, col: 1 });
2522
+ }
2523
+ this.builder.emitRaw(`schedule clear ${this.namespace}:${fnName}`);
2524
+ return { kind: 'const', value: 0 };
2525
+ }
2526
+ lowerNamedLambdaFunction(name, expr) {
2527
+ const lambdaFn = {
2528
+ name,
2529
+ params: expr.params.map(param => ({
2530
+ name: param.name,
2531
+ type: param.type ?? { kind: 'named', name: 'int' },
2532
+ })),
2533
+ returnType: expr.returnType ?? this.inferLambdaReturnType(expr),
2534
+ decorators: [],
2535
+ body: Array.isArray(expr.body) ? expr.body : [{ kind: 'return', value: expr.body }],
2536
+ };
2537
+ this.withSavedFunctionState(() => {
2538
+ this.lowerFn(lambdaFn);
2539
+ });
2540
+ }
2541
+ lowerIntervalWrapperFunction(name, bodyName, delay) {
2542
+ const intervalFn = {
2543
+ name,
2544
+ params: [],
2545
+ returnType: { kind: 'named', name: 'void' },
2546
+ decorators: [],
2547
+ body: [
2548
+ { kind: 'raw', cmd: `function ${this.namespace}:${bodyName}` },
2549
+ { kind: 'raw', cmd: `schedule function ${this.namespace}:${name} ${delay}t` },
2550
+ ],
2551
+ };
2552
+ this.withSavedFunctionState(() => {
2553
+ this.lowerFn(intervalFn);
2554
+ });
2555
+ }
2556
+ resolveIntervalFunctionName(expr) {
2557
+ if (!expr) {
2558
+ return null;
2559
+ }
2560
+ if (expr.kind === 'ident') {
2561
+ const boundInterval = this.intervalBindings.get(expr.name);
2562
+ if (boundInterval) {
2563
+ return boundInterval;
2564
+ }
2565
+ const constValue = this.constValues.get(expr.name);
2566
+ if (constValue?.kind === 'int_lit') {
2567
+ return this.intervalFunctions.get(constValue.value) ?? null;
2568
+ }
2569
+ return null;
2570
+ }
2571
+ if (expr.kind === 'int_lit') {
2572
+ return this.intervalFunctions.get(expr.value) ?? null;
2573
+ }
2574
+ return null;
2575
+ }
2576
+ lowerRichTextBuiltin(name, args) {
2577
+ const messageArgIndex = this.getRichTextArgIndex(name);
2578
+ if (messageArgIndex === null) {
2579
+ return null;
2580
+ }
2581
+ const messageExpr = args[messageArgIndex];
2582
+ if (!messageExpr || (messageExpr.kind !== 'str_interp' && messageExpr.kind !== 'f_string')) {
2583
+ return null;
2584
+ }
2585
+ const json = this.buildRichTextJson(messageExpr);
2586
+ switch (name) {
2587
+ case 'say':
2588
+ case 'announce':
2589
+ return `tellraw @a ${json}`;
2590
+ case 'tell':
2591
+ case 'tellraw':
2592
+ return `tellraw ${this.exprToString(args[0])} ${json}`;
2593
+ case 'title':
2594
+ return `title ${this.exprToString(args[0])} title ${json}`;
2595
+ case 'actionbar':
2596
+ return `title ${this.exprToString(args[0])} actionbar ${json}`;
2597
+ case 'subtitle':
2598
+ return `title ${this.exprToString(args[0])} subtitle ${json}`;
2599
+ default:
2600
+ return null;
2601
+ }
2602
+ }
2603
+ getRichTextArgIndex(name) {
2604
+ switch (name) {
2605
+ case 'say':
2606
+ case 'announce':
2607
+ return 0;
2608
+ case 'tell':
2609
+ case 'tellraw':
2610
+ case 'title':
2611
+ case 'actionbar':
2612
+ case 'subtitle':
2613
+ return 1;
2614
+ default:
2615
+ return null;
2616
+ }
2617
+ }
2618
+ buildRichTextJson(expr) {
2619
+ const components = [''];
2620
+ if (expr.kind === 'f_string') {
2621
+ for (const part of expr.parts) {
2622
+ if (part.kind === 'text') {
2623
+ if (part.value.length > 0) {
2624
+ components.push({ text: part.value });
2625
+ }
2626
+ continue;
2627
+ }
2628
+ this.appendRichTextExpr(components, part.expr);
2629
+ }
2630
+ return JSON.stringify(components);
2631
+ }
2632
+ for (const part of expr.parts) {
2633
+ if (typeof part === 'string') {
2634
+ if (part.length > 0) {
2635
+ components.push({ text: part });
2636
+ }
2637
+ continue;
2638
+ }
2639
+ this.appendRichTextExpr(components, part);
2640
+ }
2641
+ return JSON.stringify(components);
2642
+ }
2643
+ appendRichTextExpr(components, expr) {
2644
+ if (expr.kind === 'ident') {
2645
+ const constValue = this.constValues.get(expr.name);
2646
+ if (constValue) {
2647
+ this.appendRichTextExpr(components, constValue);
2648
+ return;
2649
+ }
2650
+ const stringValue = this.stringValues.get(expr.name);
2651
+ if (stringValue !== undefined) {
2652
+ components.push({ text: stringValue });
2653
+ return;
2654
+ }
2655
+ }
2656
+ if (expr.kind === 'str_lit') {
2657
+ if (expr.value.length > 0) {
2658
+ components.push({ text: expr.value });
2659
+ }
2660
+ return;
2661
+ }
2662
+ if (expr.kind === 'str_interp') {
2663
+ for (const part of expr.parts) {
2664
+ if (typeof part === 'string') {
2665
+ if (part.length > 0) {
2666
+ components.push({ text: part });
2667
+ }
2668
+ }
2669
+ else {
2670
+ this.appendRichTextExpr(components, part);
2671
+ }
2672
+ }
2673
+ return;
2674
+ }
2675
+ if (expr.kind === 'f_string') {
2676
+ for (const part of expr.parts) {
2677
+ if (part.kind === 'text') {
2678
+ if (part.value.length > 0) {
2679
+ components.push({ text: part.value });
2680
+ }
2681
+ }
2682
+ else {
2683
+ this.appendRichTextExpr(components, part.expr);
2684
+ }
2685
+ }
2686
+ return;
2687
+ }
2688
+ if (expr.kind === 'bool_lit') {
2689
+ components.push({ text: expr.value ? 'true' : 'false' });
2690
+ return;
2691
+ }
2692
+ if (expr.kind === 'int_lit') {
2693
+ components.push({ text: expr.value.toString() });
2694
+ return;
2695
+ }
2696
+ if (expr.kind === 'float_lit') {
2697
+ components.push({ text: expr.value.toString() });
2698
+ return;
2699
+ }
2700
+ const operand = this.lowerExpr(expr);
2701
+ if (operand.kind === 'const') {
2702
+ components.push({ text: operand.value.toString() });
2703
+ return;
2704
+ }
2705
+ components.push({ score: { name: this.operandToVar(operand), objective: exports.LOWERING_OBJ } });
2706
+ }
2707
+ exprToString(expr) {
2708
+ switch (expr.kind) {
2709
+ case 'int_lit':
2710
+ return expr.value.toString();
2711
+ case 'float_lit':
2712
+ return Math.trunc(expr.value).toString();
2713
+ case 'byte_lit':
2714
+ return `${expr.value}b`;
2715
+ case 'short_lit':
2716
+ return `${expr.value}s`;
2717
+ case 'long_lit':
2718
+ return `${expr.value}L`;
2719
+ case 'double_lit':
2720
+ return `${expr.value}d`;
2721
+ case 'rel_coord':
2722
+ return expr.value; // ~ or ~5 or ~-3 - output as-is for MC commands
2723
+ case 'local_coord':
2724
+ return expr.value; // ^ or ^5 or ^-3 - output as-is for MC commands
2725
+ case 'bool_lit':
2726
+ return expr.value ? '1' : '0';
2727
+ case 'str_lit':
2728
+ return expr.value;
2729
+ case 'mc_name':
2730
+ return expr.value; // #health → "health" (no quotes, used as bare MC name)
2731
+ case 'str_interp':
2732
+ case 'f_string':
2733
+ return this.buildRichTextJson(expr);
2734
+ case 'blockpos':
2735
+ return emitBlockPos(expr);
2736
+ case 'ident': {
2737
+ const constValue = this.constValues.get(expr.name);
2738
+ if (constValue) {
2739
+ return this.exprToString(constValue);
2740
+ }
2741
+ const stringValue = this.stringValues.get(expr.name);
2742
+ if (stringValue !== undefined) {
2743
+ return stringValue;
2744
+ }
2745
+ const mapped = this.varMap.get(expr.name);
2746
+ return mapped ?? `$${expr.name}`;
2747
+ }
2748
+ case 'selector':
2749
+ return this.selectorToString(expr.sel);
2750
+ case 'unary':
2751
+ // Handle unary minus on literals directly
2752
+ if (expr.op === '-' && expr.operand.kind === 'int_lit') {
2753
+ return (-expr.operand.value).toString();
2754
+ }
2755
+ if (expr.op === '-' && expr.operand.kind === 'float_lit') {
2756
+ return Math.trunc(-expr.operand.value).toString();
2757
+ }
2758
+ // Fall through to default for complex cases
2759
+ const unaryOp = this.lowerExpr(expr);
2760
+ return this.operandToVar(unaryOp);
2761
+ default:
2762
+ // Complex expression - lower and return var name
2763
+ const op = this.lowerExpr(expr);
2764
+ return this.operandToVar(op);
2765
+ }
2766
+ }
2767
+ exprToEntitySelector(expr) {
2768
+ if (expr.kind === 'selector') {
2769
+ return this.selectorToString(expr.sel);
2770
+ }
2771
+ if (expr.kind === 'ident') {
2772
+ const constValue = this.constValues.get(expr.name);
2773
+ if (constValue) {
2774
+ return this.exprToEntitySelector(constValue);
2775
+ }
2776
+ const mapped = this.varMap.get(expr.name);
2777
+ if (mapped?.startsWith('@')) {
2778
+ return mapped;
2779
+ }
2780
+ }
2781
+ return null;
2782
+ }
2783
+ appendTypeFilter(selector, mcType) {
2784
+ if (selector.endsWith(']')) {
2785
+ return `${selector.slice(0, -1)},type=${mcType}]`;
2786
+ }
2787
+ return `${selector}[type=${mcType}]`;
2788
+ }
2789
+ exprToSnbt(expr) {
2790
+ switch (expr.kind) {
2791
+ case 'struct_lit': {
2792
+ const entries = expr.fields.map(f => `${f.name}:${this.exprToSnbt(f.value)}`);
2793
+ return `{${entries.join(',')}}`;
2794
+ }
2795
+ case 'array_lit': {
2796
+ const items = expr.elements.map(e => this.exprToSnbt(e));
2797
+ return `[${items.join(',')}]`;
2798
+ }
2799
+ case 'str_lit':
2800
+ return `"${expr.value}"`;
2801
+ case 'int_lit':
2802
+ return String(expr.value);
2803
+ case 'float_lit':
2804
+ return String(expr.value);
2805
+ case 'byte_lit':
2806
+ return `${expr.value}b`;
2807
+ case 'short_lit':
2808
+ return `${expr.value}s`;
2809
+ case 'long_lit':
2810
+ return `${expr.value}L`;
2811
+ case 'double_lit':
2812
+ return `${expr.value}d`;
2813
+ case 'bool_lit':
2814
+ return expr.value ? '1b' : '0b';
2815
+ default:
2816
+ return this.exprToString(expr);
2817
+ }
2818
+ }
2819
+ exprToTargetString(expr) {
2820
+ if (expr.kind === 'selector') {
2821
+ return this.selectorToString(expr.sel);
2822
+ }
2823
+ if (expr.kind === 'str_lit' && expr.value.startsWith('@')) {
2824
+ const span = getSpan(expr);
2825
+ this.warnings.push({
2826
+ message: `Quoted selector "${expr.value}" is deprecated; pass ${expr.value} without quotes`,
2827
+ code: 'W_QUOTED_SELECTOR',
2828
+ ...(span ? { line: span.line, col: span.col } : {}),
2829
+ });
2830
+ return expr.value;
2831
+ }
2832
+ return this.exprToString(expr);
2833
+ }
2834
+ exprToLiteral(expr) {
2835
+ if (expr.kind === 'int_lit')
2836
+ return expr.value.toString();
2837
+ if (expr.kind === 'float_lit')
2838
+ return Math.trunc(expr.value).toString();
2839
+ return '0';
2840
+ }
2841
+ exprToQuotedString(expr) {
2842
+ return JSON.stringify(this.exprToString(expr));
2843
+ }
2844
+ exprToTextComponent(expr) {
2845
+ return JSON.stringify({ text: this.exprToString(expr) });
2846
+ }
2847
+ exprToBoolString(expr) {
2848
+ if (expr.kind === 'bool_lit') {
2849
+ return expr.value ? 'true' : 'false';
2850
+ }
2851
+ return this.exprToString(expr);
2852
+ }
2853
+ isTeamTextOption(option) {
2854
+ return option === 'displayName' || option === 'prefix' || option === 'suffix';
2855
+ }
2856
+ exprToScoreboardObjective(expr, span) {
2857
+ if (expr.kind === 'mc_name') {
2858
+ // 'rs' is the canonical token for the current RS scoreboard objective.
2859
+ // Resolve to LOWERING_OBJ so it respects --scoreboard / namespace default.
2860
+ return expr.value === 'rs' ? exports.LOWERING_OBJ : expr.value;
2861
+ }
2862
+ const objective = this.exprToString(expr);
2863
+ if (objective.startsWith('#') || objective.includes('.')) {
2864
+ if (objective.startsWith('#')) {
2865
+ const name = objective.slice(1);
2866
+ // '#rs' is the canonical way to reference the current RS scoreboard objective.
2867
+ // Resolve to LOWERING_OBJ so it tracks the --scoreboard option.
2868
+ return name === 'rs' ? exports.LOWERING_OBJ : name;
2869
+ }
2870
+ return objective;
2871
+ }
2872
+ return `${this.getObjectiveNamespace(span)}.${objective}`;
2873
+ }
2874
+ resolveScoreboardObjective(playerExpr, objectiveExpr, span) {
2875
+ const stdlibInternalObjective = this.tryGetStdlibInternalObjective(playerExpr, objectiveExpr, span);
2876
+ if (stdlibInternalObjective) {
2877
+ return stdlibInternalObjective;
2878
+ }
2879
+ return this.exprToScoreboardObjective(objectiveExpr, span);
2880
+ }
2881
+ getObjectiveNamespace(span) {
2882
+ const filePath = this.filePathForSpan(span);
2883
+ if (!filePath) {
2884
+ return this.namespace;
2885
+ }
2886
+ return this.isStdlibFile(filePath) ? exports.LOWERING_OBJ : this.namespace;
2887
+ }
2888
+ tryGetStdlibInternalObjective(playerExpr, objectiveExpr, span) {
2889
+ if (!span || !this.currentStdlibCallSite || objectiveExpr.kind !== 'mc_name' || objectiveExpr.value !== 'rs') {
2890
+ return null;
2891
+ }
2892
+ const filePath = this.filePathForSpan(span);
2893
+ if (!filePath || !this.isStdlibFile(filePath)) {
2894
+ return null;
2895
+ }
2896
+ const resourceBase = this.getStdlibInternalResourceBase(playerExpr);
2897
+ if (!resourceBase) {
2898
+ return null;
2899
+ }
2900
+ const hash = this.shortHash(this.serializeCallSite(this.currentStdlibCallSite));
2901
+ return `${exports.LOWERING_OBJ}._${resourceBase}_${hash}`;
2902
+ }
2903
+ getStdlibInternalResourceBase(playerExpr) {
2904
+ if (!playerExpr || playerExpr.kind !== 'str_lit') {
2905
+ return null;
2906
+ }
2907
+ const match = playerExpr.value.match(/^([a-z0-9]+)_/);
2908
+ return match?.[1] ?? null;
2909
+ }
2910
+ getStdlibCallSiteContext(fn, exprSpan) {
2911
+ const fnFilePath = this.filePathForSpan(getSpan(fn));
2912
+ if (!fnFilePath || !this.isStdlibFile(fnFilePath)) {
2913
+ return undefined;
2914
+ }
2915
+ if (this.currentStdlibCallSite) {
2916
+ return this.currentStdlibCallSite;
2917
+ }
2918
+ if (!exprSpan) {
2919
+ return undefined;
2920
+ }
2921
+ return {
2922
+ filePath: this.filePathForSpan(exprSpan),
2923
+ line: exprSpan.line,
2924
+ col: exprSpan.col,
2925
+ };
2926
+ }
2927
+ serializeCallSite(callSite) {
2928
+ return `${callSite.filePath ?? '<memory>'}:${callSite.line}:${callSite.col}`;
2929
+ }
2930
+ shortHash(input) {
2931
+ let hash = 2166136261;
2932
+ for (let i = 0; i < input.length; i++) {
2933
+ hash ^= input.charCodeAt(i);
2934
+ hash = Math.imul(hash, 16777619);
2935
+ }
2936
+ return (hash >>> 0).toString(16).padStart(8, '0').slice(0, 4);
2937
+ }
2938
+ isStdlibFile(filePath) {
2939
+ const normalized = path.normalize(filePath);
2940
+ const stdlibSegment = `${path.sep}src${path.sep}stdlib${path.sep}`;
2941
+ return normalized.includes(stdlibSegment);
2942
+ }
2943
+ filePathForSpan(span) {
2944
+ if (!span) {
2945
+ return undefined;
2946
+ }
2947
+ const line = span.line;
2948
+ return this.sourceRanges.find(range => line >= range.startLine && line <= range.endLine)?.filePath;
2949
+ }
2950
+ lowerCoordinateBuiltin(name, args) {
2951
+ const pos0 = args[0] ? this.resolveBlockPosExpr(args[0]) : null;
2952
+ const pos1 = args[1] ? this.resolveBlockPosExpr(args[1]) : null;
2953
+ const pos2 = args[2] ? this.resolveBlockPosExpr(args[2]) : null;
2954
+ if (name === 'setblock') {
2955
+ if (args.length === 2 && pos0) {
2956
+ return `setblock ${emitBlockPos(pos0)} ${this.exprToString(args[1])}`;
2957
+ }
2958
+ return null;
2959
+ }
2960
+ if (name === 'fill') {
2961
+ if (args.length === 3 && pos0 && pos1) {
2962
+ return `fill ${emitBlockPos(pos0)} ${emitBlockPos(pos1)} ${this.exprToString(args[2])}`;
2963
+ }
2964
+ return null;
2965
+ }
2966
+ if (name === 'clone') {
2967
+ if (args.length === 3 && pos0 && pos1 && pos2) {
2968
+ return `clone ${emitBlockPos(pos0)} ${emitBlockPos(pos1)} ${emitBlockPos(pos2)}`;
2969
+ }
2970
+ return null;
2971
+ }
2972
+ if (name === 'summon') {
2973
+ if (args.length >= 2 && pos1) {
2974
+ const nbt = args[2] ? ` ${this.exprToString(args[2])}` : '';
2975
+ return `summon ${this.exprToString(args[0])} ${emitBlockPos(pos1)}${nbt}`;
2976
+ }
2977
+ return null;
2978
+ }
2979
+ return null;
2980
+ }
2981
+ lowerTpCommand(args) {
2982
+ const pos0 = args[0] ? this.resolveBlockPosExpr(args[0]) : null;
2983
+ const pos1 = args[1] ? this.resolveBlockPosExpr(args[1]) : null;
2984
+ if (args.length === 1 && pos0) {
2985
+ return `tp ${emitBlockPos(pos0)}`;
2986
+ }
2987
+ if (args.length === 2) {
2988
+ if (pos1) {
2989
+ return `tp ${this.exprToString(args[0])} ${emitBlockPos(pos1)}`;
2990
+ }
2991
+ return `tp ${this.exprToString(args[0])} ${this.exprToString(args[1])}`;
2992
+ }
2993
+ if (args.length === 4) {
2994
+ return `tp ${this.exprToString(args[0])} ${this.exprToString(args[1])} ${this.exprToString(args[2])} ${this.exprToString(args[3])}`;
2995
+ }
2996
+ return null;
2997
+ }
2998
+ lowerTpCommandMacroAware(args) {
2999
+ const pos0 = args[0] ? this.resolveBlockPosExpr(args[0]) : null;
3000
+ const pos1 = args[1] ? this.resolveBlockPosExpr(args[1]) : null;
3001
+ // If blockpos args are used, no macro needed (coords are already resolved)
3002
+ if (args.length === 1 && pos0) {
3003
+ return { cmd: `tp ${emitBlockPos(pos0)}` };
3004
+ }
3005
+ if (args.length === 2 && pos1) {
3006
+ return { cmd: `tp ${this.exprToString(args[0])} ${emitBlockPos(pos1)}` };
3007
+ }
3008
+ // Check for macro args (int params used as coordinates)
3009
+ if (args.length >= 2) {
3010
+ const argResults = args.map(a => this.exprToBuiltinArg(a));
3011
+ const hasMacro = argResults.some(r => r.macroParam !== undefined);
3012
+ if (hasMacro) {
3013
+ argResults.forEach(r => { if (r.macroParam)
3014
+ this.currentFnMacroParams.add(r.macroParam); });
3015
+ const strs = argResults.map(r => r.str);
3016
+ if (args.length === 2) {
3017
+ return { cmd: `\x01tp ${strs[0]} ${strs[1]}` };
3018
+ }
3019
+ if (args.length === 4) {
3020
+ return { cmd: `\x01tp ${strs[0]} ${strs[1]} ${strs[2]} ${strs[3]}` };
3021
+ }
3022
+ }
3023
+ }
3024
+ // Fallback to non-macro
3025
+ const plain = this.lowerTpCommand(args);
3026
+ return plain ? { cmd: plain } : null;
3027
+ }
3028
+ resolveBlockPosExpr(expr) {
3029
+ if (expr.kind === 'blockpos') {
3030
+ return expr;
3031
+ }
3032
+ if (expr.kind === 'ident') {
3033
+ return this.blockPosVars.get(expr.name) ?? null;
3034
+ }
3035
+ return null;
3036
+ }
3037
+ getArrayStorageName(expr) {
3038
+ if (expr.kind === 'ident') {
3039
+ return expr.name;
3040
+ }
3041
+ return null;
3042
+ }
3043
+ inferLambdaReturnType(expr) {
3044
+ if (expr.returnType) {
3045
+ return this.normalizeType(expr.returnType);
3046
+ }
3047
+ if (Array.isArray(expr.body)) {
3048
+ return { kind: 'named', name: 'void' };
3049
+ }
3050
+ return this.inferExprType(expr.body) ?? { kind: 'named', name: 'void' };
3051
+ }
3052
+ inferExprType(expr) {
3053
+ if (expr.kind === 'int_lit')
3054
+ return { kind: 'named', name: 'int' };
3055
+ if (expr.kind === 'float_lit')
3056
+ return { kind: 'named', name: 'float' };
3057
+ if (expr.kind === 'bool_lit')
3058
+ return { kind: 'named', name: 'bool' };
3059
+ if (expr.kind === 'str_lit' || expr.kind === 'str_interp')
3060
+ return { kind: 'named', name: 'string' };
3061
+ if (expr.kind === 'f_string')
3062
+ return { kind: 'named', name: 'format_string' };
3063
+ if (expr.kind === 'blockpos')
3064
+ return { kind: 'named', name: 'BlockPos' };
3065
+ if (expr.kind === 'ident') {
3066
+ const constValue = this.constValues.get(expr.name);
3067
+ if (constValue) {
3068
+ switch (constValue.kind) {
3069
+ case 'int_lit':
3070
+ return { kind: 'named', name: 'int' };
3071
+ case 'float_lit':
3072
+ return { kind: 'named', name: 'float' };
3073
+ case 'bool_lit':
3074
+ return { kind: 'named', name: 'bool' };
3075
+ case 'str_lit':
3076
+ return { kind: 'named', name: 'string' };
3077
+ }
3078
+ }
3079
+ return this.varTypes.get(expr.name);
3080
+ }
3081
+ if (expr.kind === 'lambda') {
3082
+ return {
3083
+ kind: 'function_type',
3084
+ params: expr.params.map(param => this.normalizeType(param.type ?? { kind: 'named', name: 'int' })),
3085
+ return: this.inferLambdaReturnType(expr),
3086
+ };
3087
+ }
3088
+ if (expr.kind === 'call') {
3089
+ const resolved = this.resolveFunctionRefByName(expr.fn) ?? this.resolveInstanceMethod(expr)?.loweredName ?? expr.fn;
3090
+ return this.fnDecls.get(resolved)?.returnType;
3091
+ }
3092
+ if (expr.kind === 'static_call') {
3093
+ return this.implMethods.get(expr.type)?.get(expr.method)?.fn.returnType;
3094
+ }
3095
+ if (expr.kind === 'invoke') {
3096
+ const calleeType = this.inferExprType(expr.callee);
3097
+ if (calleeType?.kind === 'function_type') {
3098
+ return calleeType.return;
3099
+ }
3100
+ }
3101
+ if (expr.kind === 'binary') {
3102
+ if (['==', '!=', '<', '<=', '>', '>=', '&&', '||'].includes(expr.op)) {
3103
+ return { kind: 'named', name: 'bool' };
3104
+ }
3105
+ return this.inferExprType(expr.left);
3106
+ }
3107
+ if (expr.kind === 'unary') {
3108
+ return expr.op === '!' ? { kind: 'named', name: 'bool' } : this.inferExprType(expr.operand);
3109
+ }
3110
+ if (expr.kind === 'array_lit') {
3111
+ return {
3112
+ kind: 'array',
3113
+ elem: expr.elements[0] ? (this.inferExprType(expr.elements[0]) ?? { kind: 'named', name: 'int' }) : { kind: 'named', name: 'int' },
3114
+ };
3115
+ }
3116
+ if (expr.kind === 'member' && expr.obj.kind === 'ident' && this.enumDefs.has(expr.obj.name)) {
3117
+ return { kind: 'enum', name: expr.obj.name };
3118
+ }
3119
+ return undefined;
3120
+ }
3121
+ /**
3122
+ * Checks a raw() command string for `${...}` interpolation containing runtime variables.
3123
+ * - If the interpolated expression is a numeric literal → OK (MC macro syntax).
3124
+ * - If the interpolated name is a compile-time constant (in constValues) → OK.
3125
+ * - If the interpolated name is a known runtime variable (in varMap) → DiagnosticError.
3126
+ * - Unknown names → OK (could be MC macro params or external constants).
3127
+ *
3128
+ * This catches the common mistake of writing raw("say ${score}") expecting interpolation,
3129
+ * which would silently emit a literal `${score}` in the MC command.
3130
+ */
3131
+ checkRawCommandInterpolation(cmd, span) {
3132
+ const interpRe = /\$\{([^}]+)\}/g;
3133
+ let match;
3134
+ while ((match = interpRe.exec(cmd)) !== null) {
3135
+ const name = match[1].trim();
3136
+ // Numeric/boolean literals are fine (intentional MC macro syntax)
3137
+ if (/^\d+(\.\d+)?$/.test(name) || name === 'true' || name === 'false') {
3138
+ continue;
3139
+ }
3140
+ // Compile-time constants are fine
3141
+ if (this.constValues.has(name)) {
3142
+ continue;
3143
+ }
3144
+ // Only error if it's a known runtime variable (in varMap or function params)
3145
+ // Unknown identifiers are left alone (could be MC macro params the user intends)
3146
+ if (this.varMap.has(name) || this.currentFnParamNames.has(name)) {
3147
+ const loc = span ?? { line: 1, col: 1 };
3148
+ throw new diagnostics_1.DiagnosticError('LoweringError', `raw() command contains runtime variable interpolation '\${${name}}'. ` +
3149
+ `Variables cannot be interpolated into raw commands at compile time. ` +
3150
+ `Use f-string messages (say/tell/announce) or MC macro syntax '$(${name})' for MC 1.20.2+ commands.`, loc);
3151
+ }
3152
+ }
3153
+ }
3154
+ resolveInstanceMethod(expr) {
3155
+ const receiver = expr.args[0];
3156
+ if (!receiver) {
3157
+ return null;
3158
+ }
3159
+ const receiverType = this.inferExprType(receiver);
3160
+ if (receiverType?.kind !== 'struct') {
3161
+ return null;
3162
+ }
3163
+ const method = this.implMethods.get(receiverType.name)?.get(expr.fn);
3164
+ if (!method || method.fn.params[0]?.name !== 'self') {
3165
+ return null;
3166
+ }
3167
+ return method;
3168
+ }
3169
+ normalizeType(type) {
3170
+ if (type.kind === 'array') {
3171
+ return { kind: 'array', elem: this.normalizeType(type.elem) };
3172
+ }
3173
+ if (type.kind === 'function_type') {
3174
+ return {
3175
+ kind: 'function_type',
3176
+ params: type.params.map(param => this.normalizeType(param)),
3177
+ return: this.normalizeType(type.return),
3178
+ };
3179
+ }
3180
+ if ((type.kind === 'struct' || type.kind === 'enum') && this.enumDefs.has(type.name)) {
3181
+ return { kind: 'enum', name: type.name };
3182
+ }
3183
+ return type;
3184
+ }
3185
+ readArrayElement(arrayName, index) {
3186
+ const dst = this.builder.freshTemp();
3187
+ if (index.kind === 'const') {
3188
+ this.builder.emitRaw(`execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage rs:heap ${arrayName}[${index.value}]`);
3189
+ return { kind: 'var', name: dst };
3190
+ }
3191
+ const macroKey = `__rs_index_${this.foreachCounter++}`;
3192
+ const subFnName = `${this.currentFn}/array_get_${this.foreachCounter++}`;
3193
+ const indexVar = index.kind === 'var' ? index.name : this.operandToVar(index);
3194
+ this.builder.emitRaw(`execute store result storage rs:heap ${macroKey} int 1 run scoreboard players get ${indexVar} ${exports.LOWERING_OBJ}`);
3195
+ this.builder.emitRaw(`function ${this.namespace}:${subFnName} with storage rs:heap`);
3196
+ this.emitRawSubFunction(subFnName, `\x01execute store result score ${dst} ${exports.LOWERING_OBJ} run data get storage rs:heap ${arrayName}[$(${macroKey})]`);
3197
+ return { kind: 'var', name: dst };
3198
+ }
3199
+ emitRawSubFunction(name, ...commands) {
3200
+ const builder = new LoweringBuilder();
3201
+ builder.startBlock('entry');
3202
+ for (const cmd of commands) {
3203
+ builder.emitRaw(cmd);
3204
+ }
3205
+ builder.emitReturn();
3206
+ this.functions.push(builder.build(name, [], false));
3207
+ }
3208
+ // -------------------------------------------------------------------------
3209
+ // Helpers
3210
+ // -------------------------------------------------------------------------
3211
+ storeStringValue(name, expr) {
3212
+ const value = this.resolveStaticString(expr);
3213
+ if (value === null) {
3214
+ this.stringValues.delete(name);
3215
+ return false;
3216
+ }
3217
+ this.stringValues.set(name, value);
3218
+ this.builder.emitRaw(`data modify storage rs:strings ${name} set value ${JSON.stringify(value)}`);
3219
+ return true;
3220
+ }
3221
+ resolveStaticString(expr) {
3222
+ if (!expr) {
3223
+ return null;
3224
+ }
3225
+ if (expr.kind === 'str_lit') {
3226
+ return expr.value;
3227
+ }
3228
+ if (expr.kind === 'ident') {
3229
+ const constValue = this.constValues.get(expr.name);
3230
+ if (constValue?.kind === 'str_lit') {
3231
+ return constValue.value;
3232
+ }
3233
+ return this.stringValues.get(expr.name) ?? null;
3234
+ }
3235
+ return null;
3236
+ }
3237
+ getStringStoragePath(expr) {
3238
+ if (!expr || expr.kind !== 'ident') {
3239
+ return null;
3240
+ }
3241
+ if (this.stringValues.has(expr.name)) {
3242
+ return `rs:strings ${expr.name}`;
3243
+ }
3244
+ return null;
3245
+ }
3246
+ lowerConstLiteral(expr) {
3247
+ switch (expr.kind) {
3248
+ case 'int_lit':
3249
+ return { kind: 'const', value: expr.value };
3250
+ case 'float_lit':
3251
+ return { kind: 'const', value: Math.round(expr.value * 1000) };
3252
+ case 'bool_lit':
3253
+ return { kind: 'const', value: expr.value ? 1 : 0 };
3254
+ case 'str_lit':
3255
+ return { kind: 'const', value: 0 };
3256
+ }
3257
+ }
3258
+ operandToVar(op) {
3259
+ if (op.kind === 'var')
3260
+ return op.name;
3261
+ // Constant needs to be stored in a temp
3262
+ const dst = this.builder.freshTemp();
3263
+ this.builder.emitAssign(dst, op);
3264
+ return dst;
3265
+ }
3266
+ selectorToString(sel) {
3267
+ const { kind, filters } = sel;
3268
+ if (!filters)
3269
+ return this.finalizeSelector(kind);
3270
+ const parts = [];
3271
+ if (filters.type)
3272
+ parts.push(`type=${filters.type}`);
3273
+ if (filters.distance)
3274
+ parts.push(`distance=${this.rangeToString(filters.distance)}`);
3275
+ if (filters.tag)
3276
+ filters.tag.forEach(t => parts.push(`tag=${t}`));
3277
+ if (filters.notTag)
3278
+ filters.notTag.forEach(t => parts.push(`tag=!${t}`));
3279
+ if (filters.limit !== undefined)
3280
+ parts.push(`limit=${filters.limit}`);
3281
+ if (filters.sort)
3282
+ parts.push(`sort=${filters.sort}`);
3283
+ if (filters.scores) {
3284
+ const scoreStr = Object.entries(filters.scores)
3285
+ .map(([k, v]) => `${k}=${this.rangeToString(v)}`).join(',');
3286
+ parts.push(`scores={${scoreStr}}`);
3287
+ }
3288
+ if (filters.nbt)
3289
+ parts.push(`nbt=${filters.nbt}`);
3290
+ if (filters.gamemode)
3291
+ parts.push(`gamemode=${filters.gamemode}`);
3292
+ // Position filters
3293
+ if (filters.x)
3294
+ parts.push(`x=${this.rangeToString(filters.x)}`);
3295
+ if (filters.y)
3296
+ parts.push(`y=${this.rangeToString(filters.y)}`);
3297
+ if (filters.z)
3298
+ parts.push(`z=${this.rangeToString(filters.z)}`);
3299
+ // Rotation filters
3300
+ if (filters.x_rotation)
3301
+ parts.push(`x_rotation=${this.rangeToString(filters.x_rotation)}`);
3302
+ if (filters.y_rotation)
3303
+ parts.push(`y_rotation=${this.rangeToString(filters.y_rotation)}`);
3304
+ return this.finalizeSelector(parts.length ? `${kind}[${parts.join(',')}]` : kind);
3305
+ }
3306
+ finalizeSelector(selector) {
3307
+ return normalizeSelector(selector, this.warnings);
3308
+ }
3309
+ rangeToString(r) {
3310
+ if (r.min !== undefined && r.max !== undefined) {
3311
+ if (r.min === r.max)
3312
+ return `${r.min}`;
3313
+ return `${r.min}..${r.max}`;
3314
+ }
3315
+ if (r.min !== undefined)
3316
+ return `${r.min}..`;
3317
+ if (r.max !== undefined)
3318
+ return `..${r.max}`;
3319
+ return '..';
3320
+ }
3321
+ }
3322
+ exports.Lowering = Lowering;
3323
+ // ---------------------------------------------------------------------------
3324
+ // LoweringBuilder - Wrapper around IR construction
3325
+ // ---------------------------------------------------------------------------
3326
+ class LoweringBuilder {
3327
+ constructor() {
3328
+ this.labelCount = 0;
3329
+ this.blocks = [];
3330
+ this.currentBlock = null;
3331
+ this.locals = new Set();
3332
+ }
3333
+ /** Reset the global temp counter (call between compilations). */
3334
+ static resetTempCounter() {
3335
+ LoweringBuilder.globalTempId = 0;
3336
+ }
3337
+ freshTemp() {
3338
+ const name = `$_${LoweringBuilder.globalTempId++}`;
3339
+ this.locals.add(name);
3340
+ return name;
3341
+ }
3342
+ freshLabel(hint = 'L') {
3343
+ return `${hint}_${this.labelCount++}`;
3344
+ }
3345
+ startBlock(label) {
3346
+ this.currentBlock = { label, instrs: [], term: null };
3347
+ }
3348
+ isBlockSealed() {
3349
+ return this.currentBlock === null || this.currentBlock.term !== null;
3350
+ }
3351
+ sealBlock(term) {
3352
+ if (this.currentBlock) {
3353
+ this.currentBlock.term = term;
3354
+ this.blocks.push(this.currentBlock);
3355
+ this.currentBlock = null;
3356
+ }
3357
+ }
3358
+ emitAssign(dst, src) {
3359
+ if (!dst.startsWith('$') && !dst.startsWith('@')) {
3360
+ dst = '$' + dst;
3361
+ }
3362
+ this.locals.add(dst);
3363
+ this.currentBlock?.instrs.push({ op: 'assign', dst, src });
3364
+ }
3365
+ emitBinop(dst, lhs, bop, rhs) {
3366
+ this.locals.add(dst);
3367
+ this.currentBlock?.instrs.push({ op: 'binop', dst, lhs, bop, rhs });
3368
+ }
3369
+ emitCmp(dst, lhs, cop, rhs) {
3370
+ this.locals.add(dst);
3371
+ this.currentBlock?.instrs.push({ op: 'cmp', dst, lhs, cop, rhs });
3372
+ }
3373
+ emitCall(fn, args, dst) {
3374
+ if (dst)
3375
+ this.locals.add(dst);
3376
+ this.currentBlock?.instrs.push({ op: 'call', fn, args, dst });
3377
+ }
3378
+ emitRaw(cmd) {
3379
+ this.currentBlock?.instrs.push({ op: 'raw', cmd });
3380
+ }
3381
+ emitJump(target) {
3382
+ this.sealBlock({ op: 'jump', target });
3383
+ }
3384
+ emitJumpIf(cond, then, else_) {
3385
+ this.sealBlock({ op: 'jump_if', cond, then, else_ });
3386
+ }
3387
+ emitReturn(value) {
3388
+ this.sealBlock({ op: 'return', value });
3389
+ }
3390
+ build(name, params, isTickLoop = false) {
3391
+ // Ensure current block is sealed
3392
+ if (this.currentBlock && !this.currentBlock.term) {
3393
+ this.sealBlock({ op: 'return' });
3394
+ }
3395
+ return {
3396
+ name,
3397
+ params,
3398
+ locals: Array.from(this.locals),
3399
+ blocks: this.blocks,
3400
+ isTickLoop,
3401
+ };
3402
+ }
3403
+ }
3404
+ LoweringBuilder.globalTempId = 0;
3405
+ //# sourceMappingURL=index.js.map