mt-lang 0.3.9 → 0.3.10

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 (200) hide show
  1. checksums.yaml +4 -4
  2. data/lib/milk_tea/base.rb +1 -2
  3. data/lib/milk_tea/bindings/bindgen/ast_parser.rb +0 -2
  4. data/lib/milk_tea/bindings/bindgen/declaration.rb +0 -2
  5. data/lib/milk_tea/bindings/bindgen/emitter.rb +0 -2
  6. data/lib/milk_tea/bindings/bindgen/overrides.rb +0 -2
  7. data/lib/milk_tea/bindings/bindgen/type_mapper.rb +51 -53
  8. data/lib/milk_tea/bindings/imported_bindings/generator.rb +7 -9
  9. data/lib/milk_tea/bindings/imported_bindings/method_source.rb +0 -2
  10. data/lib/milk_tea/bindings/imported_bindings/naming.rb +6 -8
  11. data/lib/milk_tea/bindings/imported_bindings.rb +0 -2
  12. data/lib/milk_tea/bindings/opengl_registry.rb +3 -7
  13. data/lib/milk_tea/bindings/steamworks.rb +12 -16
  14. data/lib/milk_tea/bindings/upstream_sources.rb +10 -14
  15. data/lib/milk_tea/bindings/vendored_box2d.rb +10 -12
  16. data/lib/milk_tea/bindings/vendored_cjson.rb +6 -8
  17. data/lib/milk_tea/bindings/vendored_flecs.rb +10 -12
  18. data/lib/milk_tea/bindings/vendored_glfw.rb +11 -13
  19. data/lib/milk_tea/bindings/vendored_libuv.rb +11 -13
  20. data/lib/milk_tea/bindings/vendored_pcre2.rb +11 -13
  21. data/lib/milk_tea/bindings/vendored_raylib.rb +6 -10
  22. data/lib/milk_tea/bindings/vendored_sdl3.rb +11 -13
  23. data/lib/milk_tea/bindings/vendored_steamworks.rb +1 -5
  24. data/lib/milk_tea/core/ast.rb +103 -45
  25. data/lib/milk_tea/core/async_runtime_installer.rb +0 -2
  26. data/lib/milk_tea/core/bindings/attribute_binding.rb +1 -3
  27. data/lib/milk_tea/core/c_backend/aggregate_utils.rb +147 -84
  28. data/lib/milk_tea/core/c_backend/control_flow_emission.rb +394 -396
  29. data/lib/milk_tea/core/c_backend/expressions.rb +489 -476
  30. data/lib/milk_tea/core/c_backend/feature_detection.rb +446 -437
  31. data/lib/milk_tea/core/c_backend/format_helpers.rb +0 -2
  32. data/lib/milk_tea/core/c_backend/reachability.rb +339 -341
  33. data/lib/milk_tea/core/c_backend/reinterpret.rb +231 -217
  34. data/lib/milk_tea/core/c_backend/runtime_helpers.rb +531 -526
  35. data/lib/milk_tea/core/c_backend/statements.rb +528 -530
  36. data/lib/milk_tea/core/c_backend/type_collectors.rb +1344 -1346
  37. data/lib/milk_tea/core/c_backend/type_declaration.rb +215 -213
  38. data/lib/milk_tea/core/c_backend/type_system.rb +347 -349
  39. data/lib/milk_tea/core/c_backend.rb +17 -9
  40. data/lib/milk_tea/core/compatibility_helpers.rb +0 -2
  41. data/lib/milk_tea/core/compile_time/const_eval.rb +7 -12
  42. data/lib/milk_tea/core/compile_time.rb +32 -38
  43. data/lib/milk_tea/core/control_flow/builder.rb +3 -5
  44. data/lib/milk_tea/core/control_flow/constant_propagation.rb +14 -17
  45. data/lib/milk_tea/core/control_flow/definite_assignment.rb +0 -1
  46. data/lib/milk_tea/core/ir.rb +10 -10
  47. data/lib/milk_tea/core/lexer/character_classes.rb +5 -7
  48. data/lib/milk_tea/core/lexer/format_strings.rb +7 -9
  49. data/lib/milk_tea/core/lexer/heredocs.rb +22 -22
  50. data/lib/milk_tea/core/lexer/indentation.rb +0 -2
  51. data/lib/milk_tea/core/lexer/numbers.rb +0 -2
  52. data/lib/milk_tea/core/lexer/recovery.rb +0 -2
  53. data/lib/milk_tea/core/lexer/strings.rb +0 -2
  54. data/lib/milk_tea/core/lexer/symbols.rb +0 -2
  55. data/lib/milk_tea/core/lexer/trivia.rb +0 -2
  56. data/lib/milk_tea/core/lexer.rb +0 -2
  57. data/lib/milk_tea/core/lowering/async/analysis.rb +0 -2
  58. data/lib/milk_tea/core/lowering/async/lowering.rb +1264 -1265
  59. data/lib/milk_tea/core/lowering/async/normalization.rb +0 -2
  60. data/lib/milk_tea/core/lowering/async.rb +627 -630
  61. data/lib/milk_tea/core/lowering/block.rb +413 -416
  62. data/lib/milk_tea/core/lowering/calls.rb +1381 -1384
  63. data/lib/milk_tea/core/lowering/declarations.rb +180 -183
  64. data/lib/milk_tea/core/lowering/dyn.rb +48 -50
  65. data/lib/milk_tea/core/lowering/events.rb +983 -985
  66. data/lib/milk_tea/core/lowering/expressions.rb +1513 -1518
  67. data/lib/milk_tea/core/lowering/foreign_cstr.rb +181 -184
  68. data/lib/milk_tea/core/lowering/functions.rb +185 -188
  69. data/lib/milk_tea/core/lowering/loops.rb +1028 -1031
  70. data/lib/milk_tea/core/lowering/proc.rb +363 -366
  71. data/lib/milk_tea/core/lowering/resolve.rb +2133 -2135
  72. data/lib/milk_tea/core/lowering/scans.rb +179 -181
  73. data/lib/milk_tea/core/lowering/str_buffer.rb +102 -105
  74. data/lib/milk_tea/core/lowering/utils.rb +1040 -1044
  75. data/lib/milk_tea/core/lowering.rb +5 -7
  76. data/lib/milk_tea/core/module_binder.rb +0 -2
  77. data/lib/milk_tea/core/module_loader/errors.rb +4 -2
  78. data/lib/milk_tea/core/module_loader.rb +113 -20
  79. data/lib/milk_tea/core/module_path_resolver.rb +0 -2
  80. data/lib/milk_tea/core/module_roots.rb +6 -8
  81. data/lib/milk_tea/core/parser/attributes.rb +0 -2
  82. data/lib/milk_tea/core/parser/blocks.rb +0 -2
  83. data/lib/milk_tea/core/parser/declarations.rb +0 -2
  84. data/lib/milk_tea/core/parser/expressions.rb +8 -9
  85. data/lib/milk_tea/core/parser/recovery.rb +0 -2
  86. data/lib/milk_tea/core/parser/statements.rb +0 -2
  87. data/lib/milk_tea/core/parser/types.rb +8 -10
  88. data/lib/milk_tea/core/parser.rb +0 -2
  89. data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +31 -33
  90. data/lib/milk_tea/core/pretty_printer/base_formatter.rb +0 -2
  91. data/lib/milk_tea/core/pretty_printer/ir_formatter.rb +0 -2
  92. data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +0 -2
  93. data/lib/milk_tea/core/semantic_analyzer/attributes.rb +14 -16
  94. data/lib/milk_tea/core/semantic_analyzer/calls.rb +0 -2
  95. data/lib/milk_tea/core/semantic_analyzer/expressions.rb +1 -14
  96. data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +18 -21
  97. data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +0 -3
  98. data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +12 -15
  99. data/lib/milk_tea/core/semantic_analyzer/generics.rb +57 -59
  100. data/lib/milk_tea/core/semantic_analyzer/interface_conformance.rb +0 -2
  101. data/lib/milk_tea/core/semantic_analyzer/name_resolution.rb +5 -9
  102. data/lib/milk_tea/core/semantic_analyzer/nullability.rb +0 -3
  103. data/lib/milk_tea/core/semantic_analyzer/statements.rb +35 -40
  104. data/lib/milk_tea/core/semantic_analyzer/top_level.rb +10 -12
  105. data/lib/milk_tea/core/semantic_analyzer/type_compatibility.rb +0 -6
  106. data/lib/milk_tea/core/semantic_analyzer/type_declaration.rb +102 -105
  107. data/lib/milk_tea/core/semantic_analyzer.rb +17 -8
  108. data/lib/milk_tea/core/types/layout.rb +21 -22
  109. data/lib/milk_tea/core/types/predicates.rb +0 -2
  110. data/lib/milk_tea/core/types/registry.rb +16 -18
  111. data/lib/milk_tea/core/types/visitor.rb +0 -4
  112. data/lib/milk_tea/dap/backends/lldb_dap.rb +0 -2
  113. data/lib/milk_tea/dap/protocol.rb +1 -1
  114. data/lib/milk_tea/dap/server/breakpoints.rb +0 -2
  115. data/lib/milk_tea/dap/server/debug_map.rb +0 -2
  116. data/lib/milk_tea/dap/server/handlers.rb +0 -2
  117. data/lib/milk_tea/dap/server/launch.rb +0 -2
  118. data/lib/milk_tea/dap/server/lldb_backend.rb +8 -10
  119. data/lib/milk_tea/dap/server/pause_diagnostics.rb +14 -16
  120. data/lib/milk_tea/dap/server/utilities.rb +0 -2
  121. data/lib/milk_tea/dap/server/wire.rb +0 -2
  122. data/lib/milk_tea/dap/server.rb +0 -2
  123. data/lib/milk_tea/lsp/diagnostics.rb +16 -16
  124. data/lib/milk_tea/lsp/server/call_hierarchy.rb +11 -12
  125. data/lib/milk_tea/lsp/server/code_actions.rb +355 -357
  126. data/lib/milk_tea/lsp/server/code_lens.rb +23 -25
  127. data/lib/milk_tea/lsp/server/completion.rb +873 -875
  128. data/lib/milk_tea/lsp/server/configuration.rb +129 -131
  129. data/lib/milk_tea/lsp/server/debug_info.rb +0 -2
  130. data/lib/milk_tea/lsp/server/definition.rb +564 -565
  131. data/lib/milk_tea/lsp/server/diagnostics_scheduling.rb +191 -193
  132. data/lib/milk_tea/lsp/server/execute_command.rb +0 -2
  133. data/lib/milk_tea/lsp/server/folding_range.rb +0 -4
  134. data/lib/milk_tea/lsp/server/formatting.rb +478 -480
  135. data/lib/milk_tea/lsp/server/hover.rb +1282 -1284
  136. data/lib/milk_tea/lsp/server/inlay_hints.rb +179 -181
  137. data/lib/milk_tea/lsp/server/lifecycle.rb +192 -194
  138. data/lib/milk_tea/lsp/server/linked_editing_range.rb +0 -2
  139. data/lib/milk_tea/lsp/server/on_type_formatting.rb +0 -2
  140. data/lib/milk_tea/lsp/server/progress.rb +0 -2
  141. data/lib/milk_tea/lsp/server/references.rb +316 -318
  142. data/lib/milk_tea/lsp/server/rename.rb +445 -447
  143. data/lib/milk_tea/lsp/server/selection_range.rb +0 -4
  144. data/lib/milk_tea/lsp/server/semantic_tokens.rb +1318 -1320
  145. data/lib/milk_tea/lsp/server/signature_help.rb +146 -148
  146. data/lib/milk_tea/lsp/server/text_documents.rb +99 -101
  147. data/lib/milk_tea/lsp/server/type_hierarchy.rb +2 -4
  148. data/lib/milk_tea/lsp/server/utilities.rb +397 -399
  149. data/lib/milk_tea/lsp/server.rb +0 -3
  150. data/lib/milk_tea/lsp/workspace/analysis.rb +40 -42
  151. data/lib/milk_tea/lsp/workspace/dependency_graph.rb +4 -10
  152. data/lib/milk_tea/lsp/workspace/utilities.rb +19 -19
  153. data/lib/milk_tea/packages/atomic_write.rb +4 -5
  154. data/lib/milk_tea/packages/dependency_solver.rb +15 -15
  155. data/lib/milk_tea/packages/lock.rb +4 -4
  156. data/lib/milk_tea/packages/manager_cli.rb +1 -1
  157. data/lib/milk_tea/packages/manifest.rb +3 -3
  158. data/lib/milk_tea/packages/registry_store.rb +4 -6
  159. data/lib/milk_tea/packages/services.rb +16 -16
  160. data/lib/milk_tea/packages/source_cache.rb +4 -6
  161. data/lib/milk_tea/packages/source_resolver.rb +44 -44
  162. data/lib/milk_tea/packages/version.rb +8 -8
  163. data/lib/milk_tea/tooling/build.rb +3 -7
  164. data/lib/milk_tea/tooling/build_cache.rb +0 -2
  165. data/lib/milk_tea/tooling/debug_info_formatter.rb +31 -33
  166. data/lib/milk_tea/tooling/debug_map.rb +8 -10
  167. data/lib/milk_tea/tooling/docs_app.rb +0 -2
  168. data/lib/milk_tea/tooling/linter/doc_tags.rb +25 -27
  169. data/lib/milk_tea/tooling/linter/fix_engine.rb +87 -24
  170. data/lib/milk_tea/tooling/linter/flow_rules.rb +44 -46
  171. data/lib/milk_tea/tooling/linter/imports_platform.rb +14 -16
  172. data/lib/milk_tea/tooling/linter/release_rules.rb +3 -5
  173. data/lib/milk_tea/tooling/linter/reserved_names.rb +23 -25
  174. data/lib/milk_tea/tooling/linter/rules.rb +87 -89
  175. data/lib/milk_tea/tooling/linter/source_helpers.rb +40 -42
  176. data/lib/milk_tea/tooling/linter/trailing_comma.rb +17 -19
  177. data/lib/milk_tea/tooling/linter/visitors.rb +112 -54
  178. data/lib/milk_tea/tooling/linter.rb +0 -2
  179. data/lib/milk_tea/tooling/project_scaffold.rb +0 -2
  180. data/lib/milk_tea/tooling/run.rb +0 -2
  181. data/lib/milk_tea/tooling/toolchain_cli.rb +0 -2
  182. data/std/cli.mt +13 -32
  183. data/std/color.mt +28 -28
  184. data/std/encoding.mt +4 -4
  185. data/std/graph.mt +1 -2
  186. data/std/hash.mt +14 -14
  187. data/std/http/server.mt +3 -3
  188. data/std/input.mt +1 -1
  189. data/std/json.mt +1 -1
  190. data/std/linear_algebra.mt +6 -6
  191. data/std/net/mux.mt +1 -1
  192. data/std/noise.mt +23 -23
  193. data/std/parse.mt +2 -2
  194. data/std/process.mt +3 -4
  195. data/std/sparse_set.mt +1 -1
  196. data/std/steering.mt +5 -5
  197. data/std/str.mt +1 -1
  198. data/std/tween.mt +4 -4
  199. data/std/utility.mt +3 -3
  200. metadata +2 -2
@@ -14,14 +14,12 @@ module MilkTea
14
14
  -DGLFW_BUILD_DOCS=OFF
15
15
  ].freeze
16
16
 
17
- module_function
18
-
19
- def source(root: MilkTea.root)
17
+ def self.source(root: MilkTea.root)
20
18
  UpstreamSources.default_sources(root:).find { |entry| entry.name == SOURCE_NAME } ||
21
19
  raise(Error, "missing upstream source definition for #{SOURCE_NAME}")
22
20
  end
23
21
 
24
- def library(root: MilkTea.root)
22
+ def self.library(root: MilkTea.root)
25
23
  resolved_root = Pathname.new(File.expand_path(root.to_s))
26
24
  @libraries ||= {}
27
25
  @libraries[resolved_root.to_s] ||= VendoredCLibrary::CMake.new(
@@ -37,39 +35,39 @@ module MilkTea
37
35
  )
38
36
  end
39
37
 
40
- def source_root(root: MilkTea.root)
38
+ def self.source_root(root: MilkTea.root)
41
39
  source(root:).checkout_root
42
40
  end
43
41
 
44
- def include_root(root: MilkTea.root)
42
+ def self.include_root(root: MilkTea.root)
45
43
  source_root(root:).join("include")
46
44
  end
47
45
 
48
- def header_root(root: MilkTea.root)
46
+ def self.header_root(root: MilkTea.root)
49
47
  include_root(root:).join("GLFW")
50
48
  end
51
49
 
52
- def build_root(root: MilkTea.root)
50
+ def self.build_root(root: MilkTea.root)
53
51
  MilkTea.writable_root_for(root).join("tmp/vendored-glfw")
54
52
  end
55
53
 
56
- def install_root(root: MilkTea.root)
54
+ def self.install_root(root: MilkTea.root)
57
55
  MilkTea.writable_root_for(root).join("tmp/vendored-glfw-prefix")
58
56
  end
59
57
 
60
- def archive_path(root: MilkTea.root)
58
+ def self.archive_path(root: MilkTea.root)
61
59
  install_root(root:).join("lib/libglfw3.a")
62
60
  end
63
61
 
64
- def include_flags(root: MilkTea.root)
62
+ def self.include_flags(root: MilkTea.root)
65
63
  library(root:).include_flags
66
64
  end
67
65
 
68
- def link_flags(root: MilkTea.root)
66
+ def self.link_flags(root: MilkTea.root)
69
67
  library(root:).link_flags
70
68
  end
71
69
 
72
- def prepare!(root: MilkTea.root, **kwargs)
70
+ def self.prepare!(root: MilkTea.root, **kwargs)
73
71
  source(root:).bootstrap!
74
72
  library(root:).prepare!(**kwargs)
75
73
  end
@@ -12,14 +12,12 @@ module MilkTea
12
12
  -DBUILD_TESTING=OFF
13
13
  ].freeze
14
14
 
15
- module_function
16
-
17
- def source(root: MilkTea.root)
15
+ def self.source(root: MilkTea.root)
18
16
  UpstreamSources.default_sources(root:).find { |entry| entry.name == SOURCE_NAME } ||
19
17
  raise(Error, "missing upstream source definition for #{SOURCE_NAME}")
20
18
  end
21
19
 
22
- def library(root: MilkTea.root)
20
+ def self.library(root: MilkTea.root)
23
21
  resolved_root = Pathname.new(File.expand_path(root.to_s))
24
22
  @libraries ||= {}
25
23
  @libraries[resolved_root.to_s] ||= VendoredCLibrary::CMake.new(
@@ -35,39 +33,39 @@ module MilkTea
35
33
  )
36
34
  end
37
35
 
38
- def source_root(root: MilkTea.root)
36
+ def self.source_root(root: MilkTea.root)
39
37
  source(root:).checkout_root
40
38
  end
41
39
 
42
- def include_root(root: MilkTea.root)
40
+ def self.include_root(root: MilkTea.root)
43
41
  source_root(root:).join("include")
44
42
  end
45
43
 
46
- def header_path(root: MilkTea.root)
44
+ def self.header_path(root: MilkTea.root)
47
45
  include_root(root:).join("uv.h")
48
46
  end
49
47
 
50
- def build_root(root: MilkTea.root)
48
+ def self.build_root(root: MilkTea.root)
51
49
  MilkTea.writable_root_for(root).join("tmp/vendored-libuv")
52
50
  end
53
51
 
54
- def install_root(root: MilkTea.root)
52
+ def self.install_root(root: MilkTea.root)
55
53
  MilkTea.writable_root_for(root).join("tmp/vendored-libuv-prefix")
56
54
  end
57
55
 
58
- def archive_path(root: MilkTea.root)
56
+ def self.archive_path(root: MilkTea.root)
59
57
  install_root(root:).join("lib/libuv.a")
60
58
  end
61
59
 
62
- def include_flags(root: MilkTea.root)
60
+ def self.include_flags(root: MilkTea.root)
63
61
  library(root:).include_flags
64
62
  end
65
63
 
66
- def link_flags(root: MilkTea.root)
64
+ def self.link_flags(root: MilkTea.root)
67
65
  library(root:).link_flags
68
66
  end
69
67
 
70
- def prepare!(root: MilkTea.root, **kwargs)
68
+ def self.prepare!(root: MilkTea.root, **kwargs)
71
69
  source(root:).bootstrap!
72
70
  library(root:).prepare!(**kwargs)
73
71
  end
@@ -21,14 +21,12 @@ module MilkTea
21
21
  -lm
22
22
  ].freeze
23
23
 
24
- module_function
25
-
26
- def source(root: MilkTea.root)
24
+ def self.source(root: MilkTea.root)
27
25
  UpstreamSources.default_sources(root:).find { |entry| entry.name == SOURCE_NAME } ||
28
26
  raise(Error, "missing upstream source definition for #{SOURCE_NAME}")
29
27
  end
30
28
 
31
- def library(root: MilkTea.root)
29
+ def self.library(root: MilkTea.root)
32
30
  resolved_root = Pathname.new(File.expand_path(root.to_s))
33
31
  @libraries ||= {}
34
32
  @libraries[resolved_root.to_s] ||= VendoredCLibrary::CMake.new(
@@ -44,39 +42,39 @@ module MilkTea
44
42
  )
45
43
  end
46
44
 
47
- def source_root(root: MilkTea.root)
45
+ def self.source_root(root: MilkTea.root)
48
46
  source(root:).checkout_root
49
47
  end
50
48
 
51
- def include_root(root: MilkTea.root)
49
+ def self.include_root(root: MilkTea.root)
52
50
  install_root(root:).join("include")
53
51
  end
54
52
 
55
- def header_path(root: MilkTea.root)
53
+ def self.header_path(root: MilkTea.root)
56
54
  include_root(root:).join("pcre2.h")
57
55
  end
58
56
 
59
- def build_root(root: MilkTea.root)
57
+ def self.build_root(root: MilkTea.root)
60
58
  MilkTea.writable_root_for(root).join("tmp/vendored-pcre2")
61
59
  end
62
60
 
63
- def install_root(root: MilkTea.root)
61
+ def self.install_root(root: MilkTea.root)
64
62
  MilkTea.writable_root_for(root).join("tmp/vendored-pcre2-prefix")
65
63
  end
66
64
 
67
- def archive_path(root: MilkTea.root)
65
+ def self.archive_path(root: MilkTea.root)
68
66
  install_root(root:).join("lib/libpcre2-8.a")
69
67
  end
70
68
 
71
- def include_flags(root: MilkTea.root)
69
+ def self.include_flags(root: MilkTea.root)
72
70
  library(root:).include_flags
73
71
  end
74
72
 
75
- def link_flags(root: MilkTea.root)
73
+ def self.link_flags(root: MilkTea.root)
76
74
  library(root:).link_flags
77
75
  end
78
76
 
79
- def prepare!(root: MilkTea.root, **kwargs)
77
+ def self.prepare!(root: MilkTea.root, **kwargs)
80
78
  source(root:).bootstrap!
81
79
  library(root:).prepare!(**kwargs)
82
80
  end
@@ -92,39 +92,35 @@ module MilkTea
92
92
  archive_for(platform).prepare!(env:, cc:, platform:)
93
93
  end
94
94
 
95
- private
96
-
97
95
  def archive_for(platform)
98
96
  platform == :wasm ? @wasm_archive : @desktop_archive
99
97
  end
100
98
  end
101
99
 
102
- module_function
103
-
104
- def library(root: MilkTea.root)
100
+ def self.library(root: MilkTea.root)
105
101
  resolved_root = Pathname.new(File.expand_path(root.to_s))
106
102
  @libraries ||= {}
107
103
  @libraries[resolved_root.to_s] ||= AdaptiveArchive.new(root: resolved_root)
108
104
  end
109
105
 
110
- def source_root(root: MilkTea.root)
106
+ def self.source_root(root: MilkTea.root)
111
107
  MilkTea.writable_root_for(root).join("third_party/raylib-upstream/src")
112
108
  end
113
109
 
114
- def build_root(root: MilkTea.root, platform: nil)
110
+ def self.build_root(root: MilkTea.root, platform: nil)
115
111
  suffix = platform == :wasm ? "tmp/vendored-raylib-web" : "tmp/vendored-raylib-opengl43"
116
112
  MilkTea.writable_root_for(root).join(suffix)
117
113
  end
118
114
 
119
- def archive_path(root: MilkTea.root, platform: nil)
115
+ def self.archive_path(root: MilkTea.root, platform: nil)
120
116
  build_root(root:, platform:).join("libraylib.a")
121
117
  end
122
118
 
123
- def link_flags(root: MilkTea.root, platform: nil)
119
+ def self.link_flags(root: MilkTea.root, platform: nil)
124
120
  library(root:).link_flags(platform:)
125
121
  end
126
122
 
127
- def prepare!(root: MilkTea.root, platform: nil, **kwargs)
123
+ def self.prepare!(root: MilkTea.root, platform: nil, **kwargs)
128
124
  library(root:).prepare!(platform:, **kwargs)
129
125
  end
130
126
  end
@@ -15,14 +15,12 @@ module MilkTea
15
15
  -DSDL_EXAMPLES=OFF
16
16
  ].freeze
17
17
 
18
- module_function
19
-
20
- def source(root: MilkTea.root)
18
+ def self.source(root: MilkTea.root)
21
19
  UpstreamSources.default_sources(root:).find { |entry| entry.name == SOURCE_NAME } ||
22
20
  raise(Error, "missing upstream source definition for #{SOURCE_NAME}")
23
21
  end
24
22
 
25
- def library(root: MilkTea.root)
23
+ def self.library(root: MilkTea.root)
26
24
  resolved_root = Pathname.new(File.expand_path(root.to_s))
27
25
  @libraries ||= {}
28
26
  @libraries[resolved_root.to_s] ||= VendoredCLibrary::CMake.new(
@@ -38,39 +36,39 @@ module MilkTea
38
36
  )
39
37
  end
40
38
 
41
- def source_root(root: MilkTea.root)
39
+ def self.source_root(root: MilkTea.root)
42
40
  source(root:).checkout_root
43
41
  end
44
42
 
45
- def include_root(root: MilkTea.root)
43
+ def self.include_root(root: MilkTea.root)
46
44
  source_root(root:).join("include")
47
45
  end
48
46
 
49
- def header_root(root: MilkTea.root)
47
+ def self.header_root(root: MilkTea.root)
50
48
  include_root(root:).join("SDL3")
51
49
  end
52
50
 
53
- def build_root(root: MilkTea.root)
51
+ def self.build_root(root: MilkTea.root)
54
52
  MilkTea.writable_root_for(root).join("tmp/vendored-sdl3")
55
53
  end
56
54
 
57
- def install_root(root: MilkTea.root)
55
+ def self.install_root(root: MilkTea.root)
58
56
  MilkTea.writable_root_for(root).join("tmp/vendored-sdl3-prefix")
59
57
  end
60
58
 
61
- def archive_path(root: MilkTea.root)
59
+ def self.archive_path(root: MilkTea.root)
62
60
  install_root(root:).join("lib/libSDL3.a")
63
61
  end
64
62
 
65
- def include_flags(root: MilkTea.root)
63
+ def self.include_flags(root: MilkTea.root)
66
64
  library(root:).include_flags
67
65
  end
68
66
 
69
- def link_flags(root: MilkTea.root)
67
+ def self.link_flags(root: MilkTea.root)
70
68
  library(root:).link_flags
71
69
  end
72
70
 
73
- def prepare!(root: MilkTea.root, **kwargs)
71
+ def self.prepare!(root: MilkTea.root, **kwargs)
74
72
  source(root:).bootstrap!
75
73
  library(root:).prepare!(**kwargs)
76
74
  end
@@ -6,9 +6,7 @@ module MilkTea
6
6
  module VendoredSteamworks
7
7
  Error = VendoredCLibrary::Error
8
8
 
9
- module_function
10
-
11
- def library(root: MilkTea.root)
9
+ def self.library(root: MilkTea.root)
12
10
  resolved_root = Pathname.new(File.expand_path(root.to_s))
13
11
  @libraries ||= {}
14
12
  @libraries[resolved_root.to_s] ||= Library.new(root: resolved_root)
@@ -51,8 +49,6 @@ module MilkTea
51
49
  raise tool_not_found(e)
52
50
  end
53
51
 
54
- private
55
-
56
52
  def copy_if_present(path)
57
53
  return unless path && File.file?(path)
58
54
 
@@ -9,8 +9,8 @@ module MilkTea
9
9
  end
10
10
  end
11
11
 
12
- TypeParamConstraint = Data.define(:kind, :interface_ref) do
13
- def initialize(kind:, interface_ref: nil) = super
12
+ TypeParamConstraint = Data.define(:kind, :interface_ref, :line, :column) do
13
+ def initialize(kind:, interface_ref: nil, line: nil, column: nil) = super
14
14
  end
15
15
 
16
16
  TypeParam = Data.define(:name, :constraints, :line, :column, :length) do
@@ -19,7 +19,9 @@ module MilkTea
19
19
  ValueTypeParam = Data.define(:name, :type, :line, :column, :length) do
20
20
  def initialize(name:, type:, line: nil, column: nil, length: nil) = super
21
21
  end
22
- TypeArgument = Data.define(:value)
22
+ TypeArgument = Data.define(:value, :line, :column) do
23
+ def initialize(value:, line: nil, column: nil) = super
24
+ end
23
25
  class TypeRef < Data.define(:name, :arguments, :nullable, :lifetime, :line, :column, :length)
24
26
  def initialize(name:, arguments:, nullable:, lifetime: nil, line: nil, column: nil, length: nil) = super
25
27
 
@@ -40,23 +42,33 @@ module MilkTea
40
42
  nullable ? "#{text}?" : text
41
43
  end
42
44
  end
43
- FunctionType = Data.define(:params, :return_type)
44
- ProcType = Data.define(:params, :return_type)
45
- TupleType = Data.define(:element_types, :nullable) do
46
- def initialize(element_types:, nullable: false) = super
45
+ FunctionType = Data.define(:params, :return_type, :line, :column) do
46
+ def initialize(params:, return_type:, line: nil, column: nil) = super
47
+ end
48
+ ProcType = Data.define(:params, :return_type, :line, :column) do
49
+ def initialize(params:, return_type:, line: nil, column: nil) = super
50
+ end
51
+ TupleType = Data.define(:element_types, :nullable, :line, :column) do
52
+ def initialize(element_types:, nullable: false, line: nil, column: nil) = super
47
53
  end
48
54
  DynType = Data.define(:interface, :nullable, :line, :column, :length) do
49
55
  def initialize(interface:, nullable: false, line: nil, column: nil, length: nil) = super
50
56
  end
51
- SourceFile = Data.define(:module_name, :module_kind, :imports, :directives, :declarations, :line, :node_ids, :node_path_ids) do
52
- def initialize(module_name:, module_kind:, imports:, directives:, declarations:, line: nil, node_ids: {}, node_path_ids: {}) = super
57
+ SourceFile = Data.define(:module_name, :module_kind, :imports, :directives, :declarations, :line, :column, :node_ids, :node_path_ids) do
58
+ def initialize(module_name:, module_kind:, imports:, directives:, declarations:, line: nil, column: nil, node_ids: {}, node_path_ids: {}) = super
53
59
  end
54
60
  Import = Data.define(:path, :alias_name, :line, :column, :length) do
55
61
  def initialize(path:, alias_name:, line: nil, column: nil, length: nil) = super
56
62
  end
57
- LinkDirective = Data.define(:value)
58
- IncludeDirective = Data.define(:value)
59
- CompilerFlagDirective = Data.define(:value)
63
+ LinkDirective = Data.define(:value, :line, :column) do
64
+ def initialize(value:, line: nil, column: nil) = super
65
+ end
66
+ IncludeDirective = Data.define(:value, :line, :column) do
67
+ def initialize(value:, line: nil, column: nil) = super
68
+ end
69
+ CompilerFlagDirective = Data.define(:value, :line, :column) do
70
+ def initialize(value:, line: nil, column: nil) = super
71
+ end
60
72
  ConstDecl = Data.define(:name, :type, :value, :block_body, :visibility, :attributes, :line, :column) do
61
73
  def initialize(name:, type:, value:, block_body: nil, visibility:, attributes: [], line: nil, column: nil) = super
62
74
  end
@@ -111,16 +123,18 @@ module MilkTea
111
123
  MethodDef = Data.define(:name, :type_params, :params, :return_type, :body, :kind, :visibility, :async, :attributes, :line, :column) do
112
124
  def initialize(name:, type_params:, params:, return_type:, body:, kind:, visibility:, async:, attributes: [], line: nil, column: nil) = super
113
125
  end
114
- ExternFunctionDecl = Data.define(:name, :type_params, :params, :return_type, :variadic, :attributes, :line, :mapping) do
115
- def initialize(name:, type_params:, params:, return_type:, variadic:, attributes: [], line: nil, mapping: nil) = super
126
+ ExternFunctionDecl = Data.define(:name, :type_params, :params, :return_type, :variadic, :attributes, :line, :column, :mapping) do
127
+ def initialize(name:, type_params:, params:, return_type:, variadic:, attributes: [], line: nil, column: nil, mapping: nil) = super
116
128
  end
117
- ForeignFunctionDecl = Data.define(:name, :type_params, :params, :return_type, :variadic, :mapping, :visibility, :attributes, :line) do
118
- def initialize(name:, type_params:, params:, return_type:, variadic:, mapping:, visibility:, attributes: [], line: nil) = super
129
+ ForeignFunctionDecl = Data.define(:name, :type_params, :params, :return_type, :variadic, :mapping, :visibility, :attributes, :line, :column) do
130
+ def initialize(name:, type_params:, params:, return_type:, variadic:, mapping:, visibility:, attributes: [], line: nil, column: nil) = super
119
131
  end
120
132
  Param = Data.define(:name, :type, :line, :column, :default_value) do
121
133
  def initialize(name:, type:, line: nil, column: nil, default_value: nil) = super
122
134
  end
123
- ForeignParam = Data.define(:name, :type, :mode, :boundary_type)
135
+ ForeignParam = Data.define(:name, :type, :mode, :boundary_type, :line, :column) do
136
+ def initialize(name:, type:, mode:, boundary_type:, line: nil, column: nil) = super
137
+ end
124
138
  LocalDecl = Data.define(:kind, :name, :type, :value, :else_binding, :else_body, :line, :column, :recovered_else, :destructure_bindings, :destructure_type_name) do
125
139
  def initialize(kind:, name:, type:, value:, else_binding: nil, else_body: nil, line: nil, column: nil, recovered_else: false, destructure_bindings: nil, destructure_type_name: nil) = super
126
140
  end
@@ -130,13 +144,15 @@ module MilkTea
130
144
  IfBranch = Data.define(:condition, :body, :line, :column, :length) do
131
145
  def initialize(condition:, body:, line: nil, column: nil, length: nil) = super
132
146
  end
133
- IfStmt = Data.define(:branches, :else_body, :inline, :line, :else_line, :else_column) do
134
- def initialize(branches:, else_body:, inline: false, line: nil, else_line: nil, else_column: nil) = super
147
+ IfStmt = Data.define(:branches, :else_body, :inline, :line, :column, :else_line, :else_column) do
148
+ def initialize(branches:, else_body:, inline: false, line: nil, column: nil, else_line: nil, else_column: nil) = super
135
149
  end
136
150
  VariantDecl = Data.define(:name, :type_params, :arms, :visibility, :attributes, :line, :column) do
137
151
  def initialize(name:, type_params:, arms:, visibility:, attributes: [], line: nil, column: nil) = super
138
152
  end
139
- VariantArm = Data.define(:name, :fields)
153
+ VariantArm = Data.define(:name, :fields, :line, :column) do
154
+ def initialize(name:, fields:, line: nil, column: nil) = super
155
+ end
140
156
  MatchArm = Data.define(:pattern, :binding_name, :binding_line, :binding_column, :body) do
141
157
  def initialize(pattern:, binding_name:, body:, binding_line: nil, binding_column: nil) = super
142
158
  end
@@ -155,8 +171,8 @@ module MilkTea
155
171
  UnsafeStmt = Data.define(:body, :line, :column, :length) do
156
172
  def initialize(body:, line: nil, column: nil, length: nil) = super
157
173
  end
158
- StaticAssert = Data.define(:condition, :message, :line) do
159
- def initialize(condition:, message:, line: nil) = super
174
+ StaticAssert = Data.define(:condition, :message, :line, :column) do
175
+ def initialize(condition:, message:, line: nil, column: nil) = super
160
176
  end
161
177
  EmitStmt = Data.define(:declaration, :line, :column) do
162
178
  def initialize(declaration:, line: nil, column: nil) = super
@@ -208,8 +224,8 @@ module MilkTea
208
224
  ErrorExpr = Data.define(:line, :column, :length, :message) do
209
225
  def initialize(line: nil, column: nil, length: nil, message: nil) = super
210
226
  end
211
- ExpressionStmt = Data.define(:expression, :line) do
212
- def initialize(expression:, line: nil) = super
227
+ ExpressionStmt = Data.define(:expression, :line, :column) do
228
+ def initialize(expression:, line: nil, column: nil) = super
213
229
  end
214
230
 
215
231
  Identifier = Data.define(:name, :line, :column) do
@@ -218,36 +234,78 @@ module MilkTea
218
234
  MemberAccess = Data.define(:receiver, :member, :line, :column) do
219
235
  def initialize(receiver:, member:, line: nil, column: nil) = super
220
236
  end
221
- IndexAccess = Data.define(:receiver, :index)
222
- Specialization = Data.define(:callee, :arguments)
223
- Call = Data.define(:callee, :arguments)
224
- Argument = Data.define(:name, :value)
225
- UnaryOp = Data.define(:operator, :operand)
226
- BinaryOp = Data.define(:operator, :left, :right)
227
- RangeExpr = Data.define(:start_expr, :end_expr, :line, :column)
228
- ExpressionList = Data.define(:elements, :line, :column)
229
- IfExpr = Data.define(:condition, :then_expression, :else_expression)
237
+ IndexAccess = Data.define(:receiver, :index, :line, :column) do
238
+ def initialize(receiver:, index:, line: nil, column: nil) = super
239
+ end
240
+ Specialization = Data.define(:callee, :arguments, :line, :column) do
241
+ def initialize(callee:, arguments:, line: nil, column: nil) = super
242
+ end
243
+ Call = Data.define(:callee, :arguments, :line, :column) do
244
+ def initialize(callee:, arguments:, line: nil, column: nil) = super
245
+ end
246
+ Argument = Data.define(:name, :value, :line, :column) do
247
+ def initialize(name:, value:, line: nil, column: nil) = super
248
+ end
249
+ UnaryOp = Data.define(:operator, :operand, :line, :column) do
250
+ def initialize(operator:, operand:, line: nil, column: nil) = super
251
+ end
252
+ BinaryOp = Data.define(:operator, :left, :right, :line, :column) do
253
+ def initialize(operator:, left:, right:, line: nil, column: nil) = super
254
+ end
255
+ RangeExpr = Data.define(:start_expr, :end_expr, :line, :column) do
256
+ def initialize(start_expr:, end_expr:, line: nil, column: nil) = super
257
+ end
258
+ ExpressionList = Data.define(:elements, :line, :column) do
259
+ def initialize(elements:, line: nil, column: nil) = super
260
+ end
261
+ IfExpr = Data.define(:condition, :then_expression, :else_expression, :line, :column) do
262
+ def initialize(condition:, then_expression:, else_expression:, line: nil, column: nil) = super
263
+ end
230
264
  MatchExpr = Data.define(:expression, :arms, :line, :column, :length, :desugared_from_is) do
231
265
  def initialize(expression:, arms:, line: nil, column: nil, length: nil, desugared_from_is: false) = super
232
266
  end
233
267
  UnsafeExpr = Data.define(:expression, :line, :column, :length) do
234
268
  def initialize(expression:, line: nil, column: nil, length: nil) = super
235
269
  end
236
- ProcExpr = Data.define(:params, :return_type, :body)
237
- AwaitExpr = Data.define(:expression)
238
- SizeofExpr = Data.define(:type)
239
- AlignofExpr = Data.define(:type)
240
- OffsetofExpr = Data.define(:type, :field)
241
- IntegerLiteral = Data.define(:lexeme, :value)
242
- FloatLiteral = Data.define(:lexeme, :value)
243
- StringLiteral = Data.define(:lexeme, :value, :cstring)
244
- FormatString = Data.define(:parts)
245
- FormatTextPart = Data.define(:value)
246
- FormatExprPart = Data.define(:expression, :format_spec)
270
+ ProcExpr = Data.define(:params, :return_type, :body, :line, :column) do
271
+ def initialize(params:, return_type:, body:, line: nil, column: nil) = super
272
+ end
273
+ AwaitExpr = Data.define(:expression, :line, :column) do
274
+ def initialize(expression:, line: nil, column: nil) = super
275
+ end
276
+ SizeofExpr = Data.define(:type, :line, :column) do
277
+ def initialize(type:, line: nil, column: nil) = super
278
+ end
279
+ AlignofExpr = Data.define(:type, :line, :column) do
280
+ def initialize(type:, line: nil, column: nil) = super
281
+ end
282
+ OffsetofExpr = Data.define(:type, :field, :line, :column) do
283
+ def initialize(type:, field:, line: nil, column: nil) = super
284
+ end
285
+ IntegerLiteral = Data.define(:lexeme, :value, :line, :column) do
286
+ def initialize(lexeme:, value:, line: nil, column: nil) = super
287
+ end
288
+ FloatLiteral = Data.define(:lexeme, :value, :line, :column) do
289
+ def initialize(lexeme:, value:, line: nil, column: nil) = super
290
+ end
291
+ StringLiteral = Data.define(:lexeme, :value, :cstring, :line, :column) do
292
+ def initialize(lexeme:, value:, cstring: false, line: nil, column: nil) = super
293
+ end
294
+ FormatString = Data.define(:parts, :line, :column) do
295
+ def initialize(parts:, line: nil, column: nil) = super
296
+ end
297
+ FormatTextPart = Data.define(:value, :line, :column) do
298
+ def initialize(value:, line: nil, column: nil) = super
299
+ end
300
+ FormatExprPart = Data.define(:expression, :format_spec, :line, :column) do
301
+ def initialize(expression:, format_spec: nil, line: nil, column: nil) = super
302
+ end
247
303
  CharLiteral = Data.define(:lexeme, :value, :line, :column) do
248
304
  def initialize(lexeme:, value:, line: nil, column: nil) = super
249
305
  end
250
- BooleanLiteral = Data.define(:value)
306
+ BooleanLiteral = Data.define(:value, :line, :column) do
307
+ def initialize(value:, line: nil, column: nil) = super
308
+ end
251
309
  NullLiteral = Data.define(:type, :line, :column) do
252
310
  def initialize(type:, line: nil, column: nil) = super
253
311
  end
@@ -17,8 +17,6 @@ module MilkTea
17
17
  modules["std.async"] = @bind_block.call(import_analysis)
18
18
  end
19
19
 
20
- private
21
-
22
20
  def async_main_declared?(ast)
23
21
  ast.declarations.any? do |decl|
24
22
  decl.is_a?(AST::FunctionDef) && decl.name == "main" && decl.async
@@ -4,9 +4,7 @@ module MilkTea
4
4
  AttributeBinding = Data.define(:name, :targets, :params, :module_name, :builtin, :ast)
5
5
  BUILTIN_ATTRIBUTE_NAMES = %w[packed align deprecated test expect_fatal].freeze
6
6
 
7
- module_function
8
-
9
- def builtin_attribute_binding(name, types)
7
+ def self.builtin_attribute_binding(name, types)
10
8
  case name
11
9
  when "packed"
12
10
  AttributeBinding.new(