redscript-mc 1.2.30 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/.claude/commands/build-test.md +10 -0
  2. package/.claude/commands/deploy-demo.md +12 -0
  3. package/.claude/commands/stage-status.md +13 -0
  4. package/.claude/settings.json +12 -0
  5. package/.github/workflows/ci.yml +1 -0
  6. package/CLAUDE.md +231 -0
  7. package/demo.gif +0 -0
  8. package/dist/cli.js +2 -554
  9. package/dist/compile.js +2 -266
  10. package/dist/index.js +2 -159
  11. package/dist/lowering/index.js +5 -3
  12. package/dist/src/__tests__/cli.test.d.ts +1 -0
  13. package/dist/src/__tests__/cli.test.js +104 -0
  14. package/dist/src/__tests__/codegen.test.d.ts +1 -0
  15. package/dist/src/__tests__/codegen.test.js +152 -0
  16. package/dist/src/__tests__/compile-all.test.d.ts +10 -0
  17. package/dist/src/__tests__/compile-all.test.js +108 -0
  18. package/dist/src/__tests__/dce.test.d.ts +1 -0
  19. package/dist/src/__tests__/dce.test.js +102 -0
  20. package/dist/src/__tests__/diagnostics.test.d.ts +4 -0
  21. package/dist/src/__tests__/diagnostics.test.js +177 -0
  22. package/dist/src/__tests__/e2e.test.d.ts +6 -0
  23. package/dist/src/__tests__/e2e.test.js +1789 -0
  24. package/dist/src/__tests__/entity-types.test.d.ts +1 -0
  25. package/dist/src/__tests__/entity-types.test.js +203 -0
  26. package/dist/src/__tests__/formatter.test.d.ts +1 -0
  27. package/dist/src/__tests__/formatter.test.js +40 -0
  28. package/dist/src/__tests__/lexer.test.d.ts +1 -0
  29. package/dist/src/__tests__/lexer.test.js +343 -0
  30. package/dist/src/__tests__/lowering.test.d.ts +1 -0
  31. package/dist/src/__tests__/lowering.test.js +1015 -0
  32. package/dist/src/__tests__/macro.test.d.ts +8 -0
  33. package/dist/src/__tests__/macro.test.js +306 -0
  34. package/dist/src/__tests__/mc-integration.test.d.ts +12 -0
  35. package/dist/src/__tests__/mc-integration.test.js +817 -0
  36. package/dist/src/__tests__/mc-syntax.test.d.ts +1 -0
  37. package/dist/src/__tests__/mc-syntax.test.js +124 -0
  38. package/dist/src/__tests__/nbt.test.d.ts +1 -0
  39. package/dist/src/__tests__/nbt.test.js +82 -0
  40. package/dist/src/__tests__/optimizer-advanced.test.d.ts +1 -0
  41. package/dist/src/__tests__/optimizer-advanced.test.js +124 -0
  42. package/dist/src/__tests__/optimizer.test.d.ts +1 -0
  43. package/dist/src/__tests__/optimizer.test.js +149 -0
  44. package/dist/src/__tests__/parser.test.d.ts +1 -0
  45. package/dist/src/__tests__/parser.test.js +807 -0
  46. package/dist/src/__tests__/repl.test.d.ts +1 -0
  47. package/dist/src/__tests__/repl.test.js +27 -0
  48. package/dist/src/__tests__/runtime.test.d.ts +1 -0
  49. package/dist/src/__tests__/runtime.test.js +289 -0
  50. package/dist/src/__tests__/stdlib-advanced.test.d.ts +4 -0
  51. package/dist/src/__tests__/stdlib-advanced.test.js +374 -0
  52. package/dist/src/__tests__/stdlib-bigint.test.d.ts +7 -0
  53. package/dist/src/__tests__/stdlib-bigint.test.js +426 -0
  54. package/dist/src/__tests__/stdlib-math.test.d.ts +7 -0
  55. package/dist/src/__tests__/stdlib-math.test.js +351 -0
  56. package/dist/src/__tests__/stdlib-vec.test.d.ts +4 -0
  57. package/dist/src/__tests__/stdlib-vec.test.js +263 -0
  58. package/dist/src/__tests__/structure-optimizer.test.d.ts +1 -0
  59. package/dist/src/__tests__/structure-optimizer.test.js +33 -0
  60. package/dist/src/__tests__/typechecker.test.d.ts +1 -0
  61. package/dist/src/__tests__/typechecker.test.js +552 -0
  62. package/dist/src/__tests__/var-allocator.test.d.ts +1 -0
  63. package/dist/src/__tests__/var-allocator.test.js +69 -0
  64. package/dist/src/ast/types.d.ts +515 -0
  65. package/dist/src/ast/types.js +9 -0
  66. package/dist/src/builtins/metadata.d.ts +36 -0
  67. package/dist/src/builtins/metadata.js +1014 -0
  68. package/dist/src/cli.d.ts +11 -0
  69. package/dist/src/cli.js +443 -0
  70. package/dist/src/codegen/cmdblock/index.d.ts +26 -0
  71. package/dist/src/codegen/cmdblock/index.js +45 -0
  72. package/dist/src/codegen/mcfunction/index.d.ts +40 -0
  73. package/dist/src/codegen/mcfunction/index.js +606 -0
  74. package/dist/src/codegen/structure/index.d.ts +24 -0
  75. package/dist/src/codegen/structure/index.js +279 -0
  76. package/dist/src/codegen/var-allocator.d.ts +45 -0
  77. package/dist/src/codegen/var-allocator.js +104 -0
  78. package/dist/src/compile.d.ts +37 -0
  79. package/dist/src/compile.js +165 -0
  80. package/dist/src/diagnostics/index.d.ts +44 -0
  81. package/dist/src/diagnostics/index.js +140 -0
  82. package/dist/src/events/types.d.ts +35 -0
  83. package/dist/src/events/types.js +59 -0
  84. package/dist/src/formatter/index.d.ts +1 -0
  85. package/dist/src/formatter/index.js +26 -0
  86. package/dist/src/index.d.ts +22 -0
  87. package/dist/src/index.js +45 -0
  88. package/dist/src/ir/builder.d.ts +33 -0
  89. package/dist/src/ir/builder.js +99 -0
  90. package/dist/src/ir/types.d.ts +132 -0
  91. package/dist/src/ir/types.js +15 -0
  92. package/dist/src/lexer/index.d.ts +37 -0
  93. package/dist/src/lexer/index.js +569 -0
  94. package/dist/src/lowering/index.d.ts +188 -0
  95. package/dist/src/lowering/index.js +3405 -0
  96. package/dist/src/mc-test/client.d.ts +128 -0
  97. package/dist/src/mc-test/client.js +174 -0
  98. package/dist/src/mc-test/runner.d.ts +28 -0
  99. package/dist/src/mc-test/runner.js +151 -0
  100. package/dist/src/mc-test/setup.d.ts +11 -0
  101. package/dist/src/mc-test/setup.js +98 -0
  102. package/dist/src/mc-validator/index.d.ts +17 -0
  103. package/dist/src/mc-validator/index.js +322 -0
  104. package/dist/src/nbt/index.d.ts +86 -0
  105. package/dist/src/nbt/index.js +250 -0
  106. package/dist/src/optimizer/commands.d.ts +38 -0
  107. package/dist/src/optimizer/commands.js +451 -0
  108. package/dist/src/optimizer/dce.d.ts +34 -0
  109. package/dist/src/optimizer/dce.js +639 -0
  110. package/dist/src/optimizer/passes.d.ts +34 -0
  111. package/dist/src/optimizer/passes.js +243 -0
  112. package/dist/src/optimizer/structure.d.ts +9 -0
  113. package/dist/src/optimizer/structure.js +356 -0
  114. package/dist/src/parser/index.d.ts +93 -0
  115. package/dist/src/parser/index.js +1687 -0
  116. package/dist/src/repl.d.ts +16 -0
  117. package/dist/src/repl.js +165 -0
  118. package/dist/src/runtime/index.d.ts +107 -0
  119. package/dist/src/runtime/index.js +1409 -0
  120. package/dist/src/typechecker/index.d.ts +61 -0
  121. package/dist/src/typechecker/index.js +1034 -0
  122. package/dist/src/types/entity-hierarchy.d.ts +29 -0
  123. package/dist/src/types/entity-hierarchy.js +107 -0
  124. package/dist/src2/__tests__/e2e/basic.test.d.ts +8 -0
  125. package/dist/src2/__tests__/e2e/basic.test.js +140 -0
  126. package/dist/src2/__tests__/e2e/macros.test.d.ts +9 -0
  127. package/dist/src2/__tests__/e2e/macros.test.js +182 -0
  128. package/dist/src2/__tests__/e2e/migrate.test.d.ts +13 -0
  129. package/dist/src2/__tests__/e2e/migrate.test.js +2739 -0
  130. package/dist/src2/__tests__/hir/desugar.test.d.ts +1 -0
  131. package/dist/src2/__tests__/hir/desugar.test.js +234 -0
  132. package/dist/src2/__tests__/lir/lower.test.d.ts +1 -0
  133. package/dist/src2/__tests__/lir/lower.test.js +559 -0
  134. package/dist/src2/__tests__/lir/types.test.d.ts +1 -0
  135. package/dist/src2/__tests__/lir/types.test.js +185 -0
  136. package/dist/src2/__tests__/lir/verify.test.d.ts +1 -0
  137. package/dist/src2/__tests__/lir/verify.test.js +221 -0
  138. package/dist/src2/__tests__/mir/arithmetic.test.d.ts +1 -0
  139. package/dist/src2/__tests__/mir/arithmetic.test.js +130 -0
  140. package/dist/src2/__tests__/mir/control-flow.test.d.ts +1 -0
  141. package/dist/src2/__tests__/mir/control-flow.test.js +205 -0
  142. package/dist/src2/__tests__/mir/verify.test.d.ts +1 -0
  143. package/dist/src2/__tests__/mir/verify.test.js +223 -0
  144. package/dist/src2/__tests__/optimizer/block_merge.test.d.ts +1 -0
  145. package/dist/src2/__tests__/optimizer/block_merge.test.js +78 -0
  146. package/dist/src2/__tests__/optimizer/branch_simplify.test.d.ts +1 -0
  147. package/dist/src2/__tests__/optimizer/branch_simplify.test.js +58 -0
  148. package/dist/src2/__tests__/optimizer/constant_fold.test.d.ts +1 -0
  149. package/dist/src2/__tests__/optimizer/constant_fold.test.js +131 -0
  150. package/dist/src2/__tests__/optimizer/copy_prop.test.d.ts +1 -0
  151. package/dist/src2/__tests__/optimizer/copy_prop.test.js +91 -0
  152. package/dist/src2/__tests__/optimizer/dce.test.d.ts +1 -0
  153. package/dist/src2/__tests__/optimizer/dce.test.js +76 -0
  154. package/dist/src2/__tests__/optimizer/pipeline.test.d.ts +1 -0
  155. package/dist/src2/__tests__/optimizer/pipeline.test.js +102 -0
  156. package/dist/src2/emit/compile.d.ts +19 -0
  157. package/dist/src2/emit/compile.js +80 -0
  158. package/dist/src2/emit/index.d.ts +17 -0
  159. package/dist/src2/emit/index.js +172 -0
  160. package/dist/src2/hir/lower.d.ts +15 -0
  161. package/dist/src2/hir/lower.js +378 -0
  162. package/dist/src2/hir/types.d.ts +373 -0
  163. package/dist/src2/hir/types.js +16 -0
  164. package/dist/src2/lir/lower.d.ts +15 -0
  165. package/dist/src2/lir/lower.js +453 -0
  166. package/dist/src2/lir/types.d.ts +136 -0
  167. package/dist/src2/lir/types.js +11 -0
  168. package/dist/src2/lir/verify.d.ts +14 -0
  169. package/dist/src2/lir/verify.js +113 -0
  170. package/dist/src2/mir/lower.d.ts +9 -0
  171. package/dist/src2/mir/lower.js +1030 -0
  172. package/dist/src2/mir/macro.d.ts +22 -0
  173. package/dist/src2/mir/macro.js +168 -0
  174. package/dist/src2/mir/types.d.ts +183 -0
  175. package/dist/src2/mir/types.js +11 -0
  176. package/dist/src2/mir/verify.d.ts +16 -0
  177. package/dist/src2/mir/verify.js +216 -0
  178. package/dist/src2/optimizer/block_merge.d.ts +12 -0
  179. package/dist/src2/optimizer/block_merge.js +84 -0
  180. package/dist/src2/optimizer/branch_simplify.d.ts +9 -0
  181. package/dist/src2/optimizer/branch_simplify.js +28 -0
  182. package/dist/src2/optimizer/constant_fold.d.ts +10 -0
  183. package/dist/src2/optimizer/constant_fold.js +85 -0
  184. package/dist/src2/optimizer/copy_prop.d.ts +9 -0
  185. package/dist/src2/optimizer/copy_prop.js +113 -0
  186. package/dist/src2/optimizer/dce.d.ts +8 -0
  187. package/dist/src2/optimizer/dce.js +155 -0
  188. package/dist/src2/optimizer/pipeline.d.ts +10 -0
  189. package/dist/src2/optimizer/pipeline.js +42 -0
  190. package/dist/tsconfig.tsbuildinfo +1 -0
  191. package/docs/compiler-pipeline-redesign.md +2243 -0
  192. package/docs/optimization-ideas.md +1076 -0
  193. package/editors/vscode/package-lock.json +3 -3
  194. package/editors/vscode/package.json +1 -1
  195. package/jest.config.js +1 -1
  196. package/package.json +6 -5
  197. package/scripts/postbuild.js +15 -0
  198. package/src/__tests__/cli.test.ts +8 -220
  199. package/src/__tests__/dce.test.ts +11 -56
  200. package/src/__tests__/diagnostics.test.ts +59 -38
  201. package/src/__tests__/mc-integration.test.ts +1 -2
  202. package/src/ast/types.ts +6 -1
  203. package/src/cli.ts +29 -156
  204. package/src/compile.ts +6 -162
  205. package/src/index.ts +14 -178
  206. package/src/mc-test/runner.ts +4 -3
  207. package/src/parser/index.ts +1 -1
  208. package/src/repl.ts +1 -1
  209. package/src/runtime/index.ts +1 -1
  210. package/src2/__tests__/e2e/basic.test.ts +154 -0
  211. package/src2/__tests__/e2e/macros.test.ts +199 -0
  212. package/src2/__tests__/e2e/migrate.test.ts +3008 -0
  213. package/src2/__tests__/hir/desugar.test.ts +263 -0
  214. package/src2/__tests__/lir/lower.test.ts +619 -0
  215. package/src2/__tests__/lir/types.test.ts +207 -0
  216. package/src2/__tests__/lir/verify.test.ts +249 -0
  217. package/src2/__tests__/mir/arithmetic.test.ts +156 -0
  218. package/src2/__tests__/mir/control-flow.test.ts +242 -0
  219. package/src2/__tests__/mir/verify.test.ts +254 -0
  220. package/src2/__tests__/optimizer/block_merge.test.ts +84 -0
  221. package/src2/__tests__/optimizer/branch_simplify.test.ts +64 -0
  222. package/src2/__tests__/optimizer/constant_fold.test.ts +145 -0
  223. package/src2/__tests__/optimizer/copy_prop.test.ts +99 -0
  224. package/src2/__tests__/optimizer/dce.test.ts +83 -0
  225. package/src2/__tests__/optimizer/pipeline.test.ts +116 -0
  226. package/src2/emit/compile.ts +99 -0
  227. package/src2/emit/index.ts +222 -0
  228. package/src2/hir/lower.ts +428 -0
  229. package/src2/hir/types.ts +216 -0
  230. package/src2/lir/lower.ts +556 -0
  231. package/src2/lir/types.ts +109 -0
  232. package/src2/lir/verify.ts +129 -0
  233. package/src2/mir/lower.ts +1160 -0
  234. package/src2/mir/macro.ts +167 -0
  235. package/src2/mir/types.ts +106 -0
  236. package/src2/mir/verify.ts +218 -0
  237. package/src2/optimizer/block_merge.ts +93 -0
  238. package/src2/optimizer/branch_simplify.ts +27 -0
  239. package/src2/optimizer/constant_fold.ts +88 -0
  240. package/src2/optimizer/copy_prop.ts +106 -0
  241. package/src2/optimizer/dce.ts +133 -0
  242. package/src2/optimizer/pipeline.ts +44 -0
  243. package/tsconfig.json +2 -2
  244. package/src/__tests__/codegen.test.ts +0 -161
  245. package/src/__tests__/e2e.test.ts +0 -2039
  246. package/src/__tests__/entity-types.test.ts +0 -236
  247. package/src/__tests__/lowering.test.ts +0 -1185
  248. package/src/__tests__/macro.test.ts +0 -343
  249. package/src/__tests__/nbt.test.ts +0 -58
  250. package/src/__tests__/optimizer-advanced.test.ts +0 -144
  251. package/src/__tests__/optimizer.test.ts +0 -162
  252. package/src/__tests__/runtime.test.ts +0 -305
  253. package/src/__tests__/stdlib-advanced.test.ts +0 -379
  254. package/src/__tests__/stdlib-bigint.test.ts +0 -427
  255. package/src/__tests__/stdlib-math.test.ts +0 -374
  256. package/src/__tests__/stdlib-vec.test.ts +0 -259
  257. package/src/__tests__/structure-optimizer.test.ts +0 -38
  258. package/src/__tests__/var-allocator.test.ts +0 -75
  259. package/src/codegen/cmdblock/index.ts +0 -63
  260. package/src/codegen/mcfunction/index.ts +0 -662
  261. package/src/codegen/structure/index.ts +0 -346
  262. package/src/codegen/var-allocator.ts +0 -104
  263. package/src/ir/builder.ts +0 -116
  264. package/src/ir/types.ts +0 -134
  265. package/src/lowering/index.ts +0 -3876
  266. package/src/optimizer/commands.ts +0 -534
  267. package/src/optimizer/dce.ts +0 -679
  268. package/src/optimizer/passes.ts +0 -250
  269. package/src/optimizer/structure.ts +0 -450
@@ -0,0 +1,515 @@
1
+ /**
2
+ * RedScript AST Types
3
+ *
4
+ * This module defines the Abstract Syntax Tree structure for RedScript.
5
+ * The AST is produced by the parser and consumed by the lowering pass.
6
+ */
7
+ export type BinOp = '+' | '-' | '*' | '/' | '%';
8
+ export type CmpOp = '==' | '!=' | '<' | '<=' | '>' | '>=';
9
+ export interface Span {
10
+ line: number;
11
+ col: number;
12
+ endLine?: number;
13
+ endCol?: number;
14
+ }
15
+ export type PrimitiveType = 'int' | 'bool' | 'float' | 'string' | 'void' | 'BlockPos' | 'byte' | 'short' | 'long' | 'double' | 'format_string';
16
+ export type EntityTypeName = 'entity' | 'Player' | 'Mob' | 'HostileMob' | 'PassiveMob' | 'Zombie' | 'Skeleton' | 'Creeper' | 'Spider' | 'Enderman' | 'Blaze' | 'Witch' | 'Slime' | 'ZombieVillager' | 'Husk' | 'Drowned' | 'Stray' | 'WitherSkeleton' | 'CaveSpider' | 'Pig' | 'Cow' | 'Sheep' | 'Chicken' | 'Villager' | 'WanderingTrader' | 'ArmorStand' | 'Item' | 'Arrow';
17
+ export type TypeNode = {
18
+ kind: 'named';
19
+ name: PrimitiveType;
20
+ } | {
21
+ kind: 'array';
22
+ elem: TypeNode;
23
+ } | {
24
+ kind: 'struct';
25
+ name: string;
26
+ } | {
27
+ kind: 'enum';
28
+ name: string;
29
+ } | {
30
+ kind: 'function_type';
31
+ params: TypeNode[];
32
+ return: TypeNode;
33
+ } | {
34
+ kind: 'entity';
35
+ entityType: EntityTypeName;
36
+ } | {
37
+ kind: 'selector';
38
+ entityType?: string;
39
+ };
40
+ export interface LambdaParam {
41
+ name: string;
42
+ type?: TypeNode;
43
+ }
44
+ export interface LambdaExpr {
45
+ kind: 'lambda';
46
+ params: LambdaParam[];
47
+ returnType?: TypeNode;
48
+ body: Expr | Block;
49
+ }
50
+ export type FStringPart = {
51
+ kind: 'text';
52
+ value: string;
53
+ } | {
54
+ kind: 'expr';
55
+ expr: Expr;
56
+ };
57
+ export interface FStringExpr {
58
+ kind: 'f_string';
59
+ parts: FStringPart[];
60
+ span?: Span;
61
+ }
62
+ export interface RangeExpr {
63
+ min?: number;
64
+ max?: number;
65
+ }
66
+ export type SelectorKind = '@a' | '@e' | '@s' | '@p' | '@r' | '@n';
67
+ export interface SelectorFilter {
68
+ type?: string;
69
+ distance?: RangeExpr;
70
+ tag?: string[];
71
+ notTag?: string[];
72
+ scores?: Record<string, RangeExpr>;
73
+ limit?: number;
74
+ sort?: 'nearest' | 'furthest' | 'random' | 'arbitrary';
75
+ nbt?: string;
76
+ gamemode?: string;
77
+ x?: RangeExpr;
78
+ y?: RangeExpr;
79
+ z?: RangeExpr;
80
+ x_rotation?: RangeExpr;
81
+ y_rotation?: RangeExpr;
82
+ }
83
+ export interface EntitySelector {
84
+ kind: SelectorKind;
85
+ filters?: SelectorFilter;
86
+ }
87
+ export type CoordComponent = {
88
+ kind: 'absolute';
89
+ value: number;
90
+ } | {
91
+ kind: 'relative';
92
+ offset: number;
93
+ } | {
94
+ kind: 'local';
95
+ offset: number;
96
+ };
97
+ export interface BlockPosExpr {
98
+ kind: 'blockpos';
99
+ x: CoordComponent;
100
+ y: CoordComponent;
101
+ z: CoordComponent;
102
+ }
103
+ export type AssignOp = '=' | '+=' | '-=' | '*=' | '/=' | '%=';
104
+ export type Expr = {
105
+ kind: 'int_lit';
106
+ value: number;
107
+ span?: Span;
108
+ } | {
109
+ kind: 'float_lit';
110
+ value: number;
111
+ span?: Span;
112
+ } | {
113
+ kind: 'byte_lit';
114
+ value: number;
115
+ span?: Span;
116
+ } | {
117
+ kind: 'short_lit';
118
+ value: number;
119
+ span?: Span;
120
+ } | {
121
+ kind: 'long_lit';
122
+ value: number;
123
+ span?: Span;
124
+ } | {
125
+ kind: 'double_lit';
126
+ value: number;
127
+ span?: Span;
128
+ } | {
129
+ kind: 'rel_coord';
130
+ value: string;
131
+ span?: Span;
132
+ } | {
133
+ kind: 'local_coord';
134
+ value: string;
135
+ span?: Span;
136
+ } | {
137
+ kind: 'bool_lit';
138
+ value: boolean;
139
+ span?: Span;
140
+ } | {
141
+ kind: 'str_lit';
142
+ value: string;
143
+ span?: Span;
144
+ } | {
145
+ kind: 'mc_name';
146
+ value: string;
147
+ span?: Span;
148
+ } | {
149
+ kind: 'str_interp';
150
+ parts: Array<string | Expr>;
151
+ span?: Span;
152
+ } | FStringExpr | {
153
+ kind: 'range_lit';
154
+ range: RangeExpr;
155
+ span?: Span;
156
+ } | (BlockPosExpr & {
157
+ span?: Span;
158
+ }) | {
159
+ kind: 'ident';
160
+ name: string;
161
+ span?: Span;
162
+ } | {
163
+ kind: 'selector';
164
+ raw: string;
165
+ isSingle: boolean;
166
+ sel: EntitySelector;
167
+ span?: Span;
168
+ } | {
169
+ kind: 'binary';
170
+ op: BinOp | CmpOp | '&&' | '||';
171
+ left: Expr;
172
+ right: Expr;
173
+ span?: Span;
174
+ } | {
175
+ kind: 'is_check';
176
+ expr: Expr;
177
+ entityType: EntityTypeName;
178
+ span?: Span;
179
+ } | {
180
+ kind: 'unary';
181
+ op: '!' | '-';
182
+ operand: Expr;
183
+ span?: Span;
184
+ } | {
185
+ kind: 'assign';
186
+ target: string;
187
+ op: AssignOp;
188
+ value: Expr;
189
+ span?: Span;
190
+ } | {
191
+ kind: 'call';
192
+ fn: string;
193
+ args: Expr[];
194
+ span?: Span;
195
+ } | {
196
+ kind: 'invoke';
197
+ callee: Expr;
198
+ args: Expr[];
199
+ span?: Span;
200
+ } | {
201
+ kind: 'member';
202
+ obj: Expr;
203
+ field: string;
204
+ span?: Span;
205
+ } | {
206
+ kind: 'struct_lit';
207
+ fields: {
208
+ name: string;
209
+ value: Expr;
210
+ }[];
211
+ span?: Span;
212
+ } | {
213
+ kind: 'member_assign';
214
+ obj: Expr;
215
+ field: string;
216
+ op: AssignOp;
217
+ value: Expr;
218
+ span?: Span;
219
+ } | {
220
+ kind: 'index';
221
+ obj: Expr;
222
+ index: Expr;
223
+ span?: Span;
224
+ } | {
225
+ kind: 'array_lit';
226
+ elements: Expr[];
227
+ span?: Span;
228
+ } | {
229
+ kind: 'static_call';
230
+ type: string;
231
+ method: string;
232
+ args: Expr[];
233
+ span?: Span;
234
+ } | (LambdaExpr & {
235
+ span?: Span;
236
+ });
237
+ export type LiteralExpr = Extract<Expr, {
238
+ kind: 'int_lit';
239
+ }> | Extract<Expr, {
240
+ kind: 'float_lit';
241
+ }> | Extract<Expr, {
242
+ kind: 'bool_lit';
243
+ }> | Extract<Expr, {
244
+ kind: 'str_lit';
245
+ }>;
246
+ export type ExecuteSubcommand = {
247
+ kind: 'as';
248
+ selector: EntitySelector;
249
+ } | {
250
+ kind: 'at';
251
+ selector: EntitySelector;
252
+ } | {
253
+ kind: 'positioned';
254
+ x: string;
255
+ y: string;
256
+ z: string;
257
+ } | {
258
+ kind: 'positioned_as';
259
+ selector: EntitySelector;
260
+ } | {
261
+ kind: 'rotated';
262
+ yaw: string;
263
+ pitch: string;
264
+ } | {
265
+ kind: 'rotated_as';
266
+ selector: EntitySelector;
267
+ } | {
268
+ kind: 'facing';
269
+ x: string;
270
+ y: string;
271
+ z: string;
272
+ } | {
273
+ kind: 'facing_entity';
274
+ selector: EntitySelector;
275
+ anchor: 'eyes' | 'feet';
276
+ } | {
277
+ kind: 'anchored';
278
+ anchor: 'eyes' | 'feet';
279
+ } | {
280
+ kind: 'align';
281
+ axes: string;
282
+ } | {
283
+ kind: 'in';
284
+ dimension: string;
285
+ } | {
286
+ kind: 'on';
287
+ relation: string;
288
+ } | {
289
+ kind: 'summon';
290
+ entity: string;
291
+ } | {
292
+ kind: 'if_entity';
293
+ selector?: EntitySelector;
294
+ varName?: string;
295
+ filters?: SelectorFilter;
296
+ } | {
297
+ kind: 'unless_entity';
298
+ selector?: EntitySelector;
299
+ varName?: string;
300
+ filters?: SelectorFilter;
301
+ } | {
302
+ kind: 'if_block';
303
+ pos: [string, string, string];
304
+ block: string;
305
+ } | {
306
+ kind: 'unless_block';
307
+ pos: [string, string, string];
308
+ block: string;
309
+ } | {
310
+ kind: 'if_score';
311
+ target: string;
312
+ targetObj: string;
313
+ op: string;
314
+ source: string;
315
+ sourceObj: string;
316
+ } | {
317
+ kind: 'unless_score';
318
+ target: string;
319
+ targetObj: string;
320
+ op: string;
321
+ source: string;
322
+ sourceObj: string;
323
+ } | {
324
+ kind: 'if_score_range';
325
+ target: string;
326
+ targetObj: string;
327
+ range: string;
328
+ } | {
329
+ kind: 'unless_score_range';
330
+ target: string;
331
+ targetObj: string;
332
+ range: string;
333
+ } | {
334
+ kind: 'store_result';
335
+ target: string;
336
+ targetObj: string;
337
+ } | {
338
+ kind: 'store_success';
339
+ target: string;
340
+ targetObj: string;
341
+ };
342
+ export type Stmt = {
343
+ kind: 'let';
344
+ name: string;
345
+ type?: TypeNode;
346
+ init: Expr;
347
+ span?: Span;
348
+ } | {
349
+ kind: 'expr';
350
+ expr: Expr;
351
+ span?: Span;
352
+ } | {
353
+ kind: 'return';
354
+ value?: Expr;
355
+ span?: Span;
356
+ } | {
357
+ kind: 'break';
358
+ span?: Span;
359
+ } | {
360
+ kind: 'continue';
361
+ span?: Span;
362
+ } | {
363
+ kind: 'if';
364
+ cond: Expr;
365
+ then: Block;
366
+ else_?: Block;
367
+ span?: Span;
368
+ } | {
369
+ kind: 'while';
370
+ cond: Expr;
371
+ body: Block;
372
+ span?: Span;
373
+ } | {
374
+ kind: 'for';
375
+ init?: Stmt;
376
+ cond: Expr;
377
+ step: Expr;
378
+ body: Block;
379
+ span?: Span;
380
+ } | {
381
+ kind: 'foreach';
382
+ binding: string;
383
+ iterable: Expr;
384
+ body: Block;
385
+ executeContext?: string;
386
+ span?: Span;
387
+ } | {
388
+ kind: 'for_range';
389
+ varName: string;
390
+ start: Expr;
391
+ end: Expr;
392
+ body: Block;
393
+ span?: Span;
394
+ } | {
395
+ kind: 'match';
396
+ expr: Expr;
397
+ arms: {
398
+ pattern: Expr | null;
399
+ body: Block;
400
+ }[];
401
+ span?: Span;
402
+ } | {
403
+ kind: 'as_block';
404
+ selector: EntitySelector;
405
+ body: Block;
406
+ span?: Span;
407
+ } | {
408
+ kind: 'at_block';
409
+ selector: EntitySelector;
410
+ body: Block;
411
+ span?: Span;
412
+ } | {
413
+ kind: 'as_at';
414
+ as_sel: EntitySelector;
415
+ at_sel: EntitySelector;
416
+ body: Block;
417
+ span?: Span;
418
+ } | {
419
+ kind: 'execute';
420
+ subcommands: ExecuteSubcommand[];
421
+ body: Block;
422
+ span?: Span;
423
+ } | {
424
+ kind: 'raw';
425
+ cmd: string;
426
+ span?: Span;
427
+ };
428
+ export type Block = Stmt[];
429
+ export interface Decorator {
430
+ name: 'tick' | 'load' | 'on' | 'on_trigger' | 'on_advancement' | 'on_craft' | 'on_death' | 'on_login' | 'on_join_team' | 'keep' | 'require_on_load';
431
+ args?: {
432
+ rate?: number;
433
+ eventType?: string;
434
+ trigger?: string;
435
+ advancement?: string;
436
+ item?: string;
437
+ team?: string;
438
+ };
439
+ /** Raw positional arguments (used by @requires and future generic decorators). */
440
+ rawArgs?: Array<{
441
+ kind: 'string';
442
+ value: string;
443
+ } | {
444
+ kind: 'number';
445
+ value: number;
446
+ }>;
447
+ }
448
+ export interface Param {
449
+ name: string;
450
+ type: TypeNode;
451
+ default?: Expr;
452
+ }
453
+ export interface FnDecl {
454
+ /** Set when this function was parsed from a `module library;` source.
455
+ * Library functions are NOT MC entry points — DCE only keeps them if they
456
+ * are reachable from a non-library (user) entry point. */
457
+ isLibraryFn?: boolean;
458
+ name: string;
459
+ params: Param[];
460
+ returnType: TypeNode;
461
+ decorators: Decorator[];
462
+ body: Block;
463
+ span?: Span;
464
+ }
465
+ export interface StructField {
466
+ name: string;
467
+ type: TypeNode;
468
+ }
469
+ export interface StructDecl {
470
+ name: string;
471
+ fields: StructField[];
472
+ span?: Span;
473
+ }
474
+ export interface ImplBlock {
475
+ kind: 'impl_block';
476
+ typeName: string;
477
+ methods: FnDecl[];
478
+ span?: Span;
479
+ }
480
+ export interface EnumVariant {
481
+ name: string;
482
+ value?: number;
483
+ }
484
+ export interface EnumDecl {
485
+ name: string;
486
+ variants: EnumVariant[];
487
+ span?: Span;
488
+ }
489
+ export interface ConstDecl {
490
+ name: string;
491
+ type: TypeNode;
492
+ value: LiteralExpr;
493
+ span?: Span;
494
+ }
495
+ export interface GlobalDecl {
496
+ kind: 'global';
497
+ name: string;
498
+ type: TypeNode;
499
+ init: Expr;
500
+ mutable: boolean;
501
+ span?: Span;
502
+ }
503
+ export interface Program {
504
+ namespace: string;
505
+ globals: GlobalDecl[];
506
+ declarations: FnDecl[];
507
+ structs: StructDecl[];
508
+ implBlocks: ImplBlock[];
509
+ enums: EnumDecl[];
510
+ consts: ConstDecl[];
511
+ /** True when the source file declares `module library;`.
512
+ * Library-mode: all functions are DCE-eligible by default — none are treated
513
+ * as MC entry points unless they carry @tick / @load / @on / @keep etc. */
514
+ isLibrary?: boolean;
515
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * RedScript AST Types
4
+ *
5
+ * This module defines the Abstract Syntax Tree structure for RedScript.
6
+ * The AST is produced by the parser and consumed by the lowering pass.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * RedScript Builtin Metadata
3
+ *
4
+ * Comprehensive metadata for all builtin functions, used by:
5
+ * - generate-dts CLI command (produces builtins.d.mcrs)
6
+ * - VSCode extension hover docs
7
+ * - Type checker documentation
8
+ */
9
+ export type BuiltinParamType = 'int' | 'float' | 'string' | 'bool' | 'coord' | 'selector' | 'nbt' | 'block' | 'item' | 'entity' | 'effect' | 'sound' | 'dimension' | 'BlockPos' | 'T[]' | 'T';
10
+ export interface BuiltinParam {
11
+ name: string;
12
+ type: BuiltinParamType | string;
13
+ required: boolean;
14
+ default?: string;
15
+ doc: string;
16
+ docZh: string;
17
+ }
18
+ export interface BuiltinDef {
19
+ name: string;
20
+ params: BuiltinParam[];
21
+ returns: 'void' | 'int' | 'bool' | 'string';
22
+ doc: string;
23
+ docZh: string;
24
+ examples: string[];
25
+ compilesTo?: string;
26
+ category: string;
27
+ }
28
+ export declare const BUILTIN_METADATA: Record<string, BuiltinDef>;
29
+ /**
30
+ * Returns the .d.mcrs declaration file signature for a builtin function.
31
+ */
32
+ export declare function builtinToDeclaration(def: BuiltinDef): string;
33
+ /**
34
+ * Generates the full builtins.d.mcrs content.
35
+ */
36
+ export declare function generateDts(): string;