mt-lang 0.3.9 → 0.3.11

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/docs/language-design.md +1 -2
  4. data/docs/language-manual.md +12 -1
  5. data/lib/milk_tea/base.rb +1 -2
  6. data/lib/milk_tea/bindings/bindgen/ast_parser.rb +0 -2
  7. data/lib/milk_tea/bindings/bindgen/declaration.rb +0 -2
  8. data/lib/milk_tea/bindings/bindgen/emitter.rb +0 -2
  9. data/lib/milk_tea/bindings/bindgen/overrides.rb +0 -2
  10. data/lib/milk_tea/bindings/bindgen/type_mapper.rb +51 -53
  11. data/lib/milk_tea/bindings/imported_bindings/generator.rb +7 -9
  12. data/lib/milk_tea/bindings/imported_bindings/method_source.rb +0 -2
  13. data/lib/milk_tea/bindings/imported_bindings/naming.rb +6 -8
  14. data/lib/milk_tea/bindings/imported_bindings.rb +0 -2
  15. data/lib/milk_tea/bindings/opengl_registry.rb +3 -7
  16. data/lib/milk_tea/bindings/steamworks.rb +12 -16
  17. data/lib/milk_tea/bindings/upstream_sources.rb +10 -14
  18. data/lib/milk_tea/bindings/vendored_box2d.rb +10 -12
  19. data/lib/milk_tea/bindings/vendored_cjson.rb +6 -8
  20. data/lib/milk_tea/bindings/vendored_flecs.rb +10 -12
  21. data/lib/milk_tea/bindings/vendored_glfw.rb +11 -13
  22. data/lib/milk_tea/bindings/vendored_libuv.rb +11 -13
  23. data/lib/milk_tea/bindings/vendored_pcre2.rb +11 -13
  24. data/lib/milk_tea/bindings/vendored_raylib.rb +6 -10
  25. data/lib/milk_tea/bindings/vendored_sdl3.rb +11 -13
  26. data/lib/milk_tea/bindings/vendored_steamworks.rb +1 -5
  27. data/lib/milk_tea/core/ast.rb +109 -51
  28. data/lib/milk_tea/core/async_runtime_installer.rb +0 -2
  29. data/lib/milk_tea/core/bindings/attribute_binding.rb +1 -3
  30. data/lib/milk_tea/core/c_backend/aggregate_utils.rb +147 -84
  31. data/lib/milk_tea/core/c_backend/control_flow_emission.rb +394 -396
  32. data/lib/milk_tea/core/c_backend/expressions.rb +489 -476
  33. data/lib/milk_tea/core/c_backend/feature_detection.rb +446 -437
  34. data/lib/milk_tea/core/c_backend/format_helpers.rb +0 -2
  35. data/lib/milk_tea/core/c_backend/reachability.rb +339 -341
  36. data/lib/milk_tea/core/c_backend/reinterpret.rb +231 -217
  37. data/lib/milk_tea/core/c_backend/runtime_helpers.rb +531 -526
  38. data/lib/milk_tea/core/c_backend/statements.rb +528 -530
  39. data/lib/milk_tea/core/c_backend/type_collectors.rb +1344 -1346
  40. data/lib/milk_tea/core/c_backend/type_declaration.rb +215 -213
  41. data/lib/milk_tea/core/c_backend/type_system.rb +347 -349
  42. data/lib/milk_tea/core/c_backend.rb +17 -9
  43. data/lib/milk_tea/core/compatibility_helpers.rb +0 -2
  44. data/lib/milk_tea/core/compile_time/const_eval.rb +7 -12
  45. data/lib/milk_tea/core/compile_time.rb +32 -38
  46. data/lib/milk_tea/core/control_flow/builder.rb +3 -5
  47. data/lib/milk_tea/core/control_flow/constant_propagation.rb +14 -17
  48. data/lib/milk_tea/core/control_flow/definite_assignment.rb +0 -1
  49. data/lib/milk_tea/core/ir.rb +10 -10
  50. data/lib/milk_tea/core/lexer/character_classes.rb +5 -7
  51. data/lib/milk_tea/core/lexer/format_strings.rb +7 -9
  52. data/lib/milk_tea/core/lexer/heredocs.rb +22 -22
  53. data/lib/milk_tea/core/lexer/indentation.rb +0 -2
  54. data/lib/milk_tea/core/lexer/numbers.rb +0 -2
  55. data/lib/milk_tea/core/lexer/recovery.rb +0 -2
  56. data/lib/milk_tea/core/lexer/strings.rb +0 -2
  57. data/lib/milk_tea/core/lexer/symbols.rb +0 -2
  58. data/lib/milk_tea/core/lexer/trivia.rb +0 -2
  59. data/lib/milk_tea/core/lexer.rb +0 -2
  60. data/lib/milk_tea/core/lowering/async/analysis.rb +0 -2
  61. data/lib/milk_tea/core/lowering/async/lowering.rb +1264 -1265
  62. data/lib/milk_tea/core/lowering/async/normalization.rb +5 -3
  63. data/lib/milk_tea/core/lowering/async.rb +627 -630
  64. data/lib/milk_tea/core/lowering/block.rb +413 -416
  65. data/lib/milk_tea/core/lowering/calls.rb +1381 -1384
  66. data/lib/milk_tea/core/lowering/declarations.rb +180 -183
  67. data/lib/milk_tea/core/lowering/dyn.rb +48 -50
  68. data/lib/milk_tea/core/lowering/events.rb +983 -985
  69. data/lib/milk_tea/core/lowering/expressions.rb +1513 -1518
  70. data/lib/milk_tea/core/lowering/foreign_cstr.rb +181 -184
  71. data/lib/milk_tea/core/lowering/functions.rb +185 -188
  72. data/lib/milk_tea/core/lowering/loops.rb +1028 -1031
  73. data/lib/milk_tea/core/lowering/proc.rb +363 -366
  74. data/lib/milk_tea/core/lowering/resolve.rb +2133 -2135
  75. data/lib/milk_tea/core/lowering/scans.rb +179 -181
  76. data/lib/milk_tea/core/lowering/str_buffer.rb +102 -105
  77. data/lib/milk_tea/core/lowering/utils.rb +1040 -1044
  78. data/lib/milk_tea/core/lowering.rb +5 -7
  79. data/lib/milk_tea/core/module_binder.rb +0 -2
  80. data/lib/milk_tea/core/module_loader/errors.rb +4 -2
  81. data/lib/milk_tea/core/module_loader.rb +113 -20
  82. data/lib/milk_tea/core/module_path_resolver.rb +0 -2
  83. data/lib/milk_tea/core/module_roots.rb +6 -8
  84. data/lib/milk_tea/core/parser/attributes.rb +0 -2
  85. data/lib/milk_tea/core/parser/blocks.rb +0 -2
  86. data/lib/milk_tea/core/parser/declarations.rb +7 -9
  87. data/lib/milk_tea/core/parser/expressions.rb +15 -10
  88. data/lib/milk_tea/core/parser/recovery.rb +0 -2
  89. data/lib/milk_tea/core/parser/statements.rb +8 -2
  90. data/lib/milk_tea/core/parser/types.rb +12 -14
  91. data/lib/milk_tea/core/parser.rb +0 -2
  92. data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +31 -33
  93. data/lib/milk_tea/core/pretty_printer/base_formatter.rb +0 -2
  94. data/lib/milk_tea/core/pretty_printer/ir_formatter.rb +0 -2
  95. data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +0 -2
  96. data/lib/milk_tea/core/semantic_analyzer/attributes.rb +14 -16
  97. data/lib/milk_tea/core/semantic_analyzer/calls.rb +0 -2
  98. data/lib/milk_tea/core/semantic_analyzer/expressions.rb +1 -14
  99. data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +18 -21
  100. data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +0 -3
  101. data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +14 -17
  102. data/lib/milk_tea/core/semantic_analyzer/generics.rb +57 -59
  103. data/lib/milk_tea/core/semantic_analyzer/interface_conformance.rb +0 -2
  104. data/lib/milk_tea/core/semantic_analyzer/name_resolution.rb +5 -9
  105. data/lib/milk_tea/core/semantic_analyzer/nullability.rb +0 -3
  106. data/lib/milk_tea/core/semantic_analyzer/statements.rb +35 -40
  107. data/lib/milk_tea/core/semantic_analyzer/top_level.rb +10 -12
  108. data/lib/milk_tea/core/semantic_analyzer/type_compatibility.rb +0 -6
  109. data/lib/milk_tea/core/semantic_analyzer/type_declaration.rb +106 -109
  110. data/lib/milk_tea/core/semantic_analyzer.rb +17 -8
  111. data/lib/milk_tea/core/types/layout.rb +21 -22
  112. data/lib/milk_tea/core/types/predicates.rb +0 -2
  113. data/lib/milk_tea/core/types/registry.rb +16 -18
  114. data/lib/milk_tea/core/types/visitor.rb +0 -4
  115. data/lib/milk_tea/dap/backends/lldb_dap.rb +0 -2
  116. data/lib/milk_tea/dap/protocol.rb +1 -1
  117. data/lib/milk_tea/dap/server/breakpoints.rb +0 -2
  118. data/lib/milk_tea/dap/server/debug_map.rb +0 -2
  119. data/lib/milk_tea/dap/server/handlers.rb +0 -2
  120. data/lib/milk_tea/dap/server/launch.rb +0 -2
  121. data/lib/milk_tea/dap/server/lldb_backend.rb +8 -10
  122. data/lib/milk_tea/dap/server/pause_diagnostics.rb +14 -16
  123. data/lib/milk_tea/dap/server/utilities.rb +0 -2
  124. data/lib/milk_tea/dap/server/wire.rb +0 -2
  125. data/lib/milk_tea/dap/server.rb +0 -2
  126. data/lib/milk_tea/lsp/diagnostics.rb +16 -16
  127. data/lib/milk_tea/lsp/server/call_hierarchy.rb +11 -12
  128. data/lib/milk_tea/lsp/server/code_actions.rb +355 -357
  129. data/lib/milk_tea/lsp/server/code_lens.rb +23 -25
  130. data/lib/milk_tea/lsp/server/completion.rb +873 -875
  131. data/lib/milk_tea/lsp/server/configuration.rb +129 -131
  132. data/lib/milk_tea/lsp/server/debug_info.rb +0 -2
  133. data/lib/milk_tea/lsp/server/definition.rb +564 -565
  134. data/lib/milk_tea/lsp/server/diagnostics_scheduling.rb +191 -193
  135. data/lib/milk_tea/lsp/server/execute_command.rb +0 -2
  136. data/lib/milk_tea/lsp/server/folding_range.rb +0 -4
  137. data/lib/milk_tea/lsp/server/formatting.rb +478 -480
  138. data/lib/milk_tea/lsp/server/hover.rb +1282 -1284
  139. data/lib/milk_tea/lsp/server/inlay_hints.rb +179 -181
  140. data/lib/milk_tea/lsp/server/lifecycle.rb +192 -194
  141. data/lib/milk_tea/lsp/server/linked_editing_range.rb +0 -2
  142. data/lib/milk_tea/lsp/server/on_type_formatting.rb +0 -2
  143. data/lib/milk_tea/lsp/server/progress.rb +0 -2
  144. data/lib/milk_tea/lsp/server/references.rb +316 -318
  145. data/lib/milk_tea/lsp/server/rename.rb +445 -447
  146. data/lib/milk_tea/lsp/server/selection_range.rb +0 -4
  147. data/lib/milk_tea/lsp/server/semantic_tokens.rb +1376 -1314
  148. data/lib/milk_tea/lsp/server/signature_help.rb +146 -148
  149. data/lib/milk_tea/lsp/server/text_documents.rb +99 -101
  150. data/lib/milk_tea/lsp/server/type_hierarchy.rb +2 -4
  151. data/lib/milk_tea/lsp/server/utilities.rb +397 -399
  152. data/lib/milk_tea/lsp/server.rb +0 -3
  153. data/lib/milk_tea/lsp/workspace/analysis.rb +40 -42
  154. data/lib/milk_tea/lsp/workspace/dependency_graph.rb +4 -10
  155. data/lib/milk_tea/lsp/workspace/utilities.rb +19 -19
  156. data/lib/milk_tea/packages/atomic_write.rb +4 -5
  157. data/lib/milk_tea/packages/dependency_solver.rb +15 -15
  158. data/lib/milk_tea/packages/lock.rb +4 -4
  159. data/lib/milk_tea/packages/manager_cli.rb +1 -1
  160. data/lib/milk_tea/packages/manifest.rb +3 -3
  161. data/lib/milk_tea/packages/registry_store.rb +4 -6
  162. data/lib/milk_tea/packages/services.rb +16 -16
  163. data/lib/milk_tea/packages/source_cache.rb +4 -6
  164. data/lib/milk_tea/packages/source_resolver.rb +44 -44
  165. data/lib/milk_tea/packages/version.rb +8 -8
  166. data/lib/milk_tea/tooling/build.rb +3 -7
  167. data/lib/milk_tea/tooling/build_cache.rb +0 -2
  168. data/lib/milk_tea/tooling/cli.rb +10 -4
  169. data/lib/milk_tea/tooling/debug_info_formatter.rb +31 -33
  170. data/lib/milk_tea/tooling/debug_map.rb +8 -10
  171. data/lib/milk_tea/tooling/docs_app.rb +0 -2
  172. data/lib/milk_tea/tooling/linter/doc_tags.rb +25 -27
  173. data/lib/milk_tea/tooling/linter/fix_engine.rb +87 -24
  174. data/lib/milk_tea/tooling/linter/flow_rules.rb +44 -46
  175. data/lib/milk_tea/tooling/linter/imports_platform.rb +14 -16
  176. data/lib/milk_tea/tooling/linter/release_rules.rb +3 -5
  177. data/lib/milk_tea/tooling/linter/reserved_names.rb +23 -25
  178. data/lib/milk_tea/tooling/linter/rules.rb +87 -89
  179. data/lib/milk_tea/tooling/linter/source_helpers.rb +40 -42
  180. data/lib/milk_tea/tooling/linter/trailing_comma.rb +17 -19
  181. data/lib/milk_tea/tooling/linter/visitors.rb +112 -54
  182. data/lib/milk_tea/tooling/linter.rb +0 -2
  183. data/lib/milk_tea/tooling/project_scaffold.rb +0 -2
  184. data/lib/milk_tea/tooling/run.rb +0 -2
  185. data/lib/milk_tea/tooling/toolchain_cli.rb +0 -2
  186. data/std/cli.mt +13 -32
  187. data/std/color.mt +28 -28
  188. data/std/encoding.mt +4 -4
  189. data/std/graph.mt +1 -2
  190. data/std/hash.mt +14 -14
  191. data/std/http/server.mt +3 -3
  192. data/std/input.mt +1 -1
  193. data/std/json.mt +1 -1
  194. data/std/linear_algebra.mt +6 -6
  195. data/std/net/mux.mt +1 -1
  196. data/std/noise.mt +23 -23
  197. data/std/parse.mt +2 -2
  198. data/std/process.mt +3 -4
  199. data/std/sparse_set.mt +1 -1
  200. data/std/steering.mt +5 -5
  201. data/std/str.mt +1 -1
  202. data/std/tween.mt +4 -4
  203. data/std/utility.mt +3 -3
  204. metadata +2 -2
@@ -3,101 +3,164 @@
3
3
  module MilkTea
4
4
  class CBackend
5
5
  module AggregateUtils
6
- private
7
-
8
- def each_variant_arm_field_type
9
- @program.variants.each do |variant_decl|
10
- variant_decl.arms.each do |arm|
11
- arm.fields.each do |field|
12
- yield field.type
13
- end
14
- end
6
+ def each_variant_arm_field_type
7
+ @program.variants.each do |variant_decl|
8
+ variant_decl.arms.each do |arm|
9
+ arm.fields.each do |field|
10
+ yield field.type
15
11
  end
16
12
  end
13
+ end
14
+ end
17
15
 
18
- def sort_aggregate_decls(struct_decls, union_decls, variant_decls)
19
- aggregate_decls = struct_decls + union_decls + variant_decls
20
- by_c_name = aggregate_decls.each_with_object({}) do |aggregate_decl, declarations|
21
- declarations[aggregate_decl.linkage_name] = aggregate_decl
22
- end
23
- variant_decls.each do |variant_decl|
24
- variant_decl.arms.each do |arm|
25
- next if arm.fields.empty?
26
- by_c_name[arm.linkage_name] = variant_decl
27
- end
28
- end
29
- visiting = {}
30
- visited = {}
31
- sorted = []
32
-
33
- visit = lambda do |aggregate_decl|
34
- return if visited[aggregate_decl.linkage_name]
35
- raise CBackendError.new("cyclic aggregate dependency involving #{aggregate_decl.linkage_name}", line: 0, column: 0, path: @path) if visiting[aggregate_decl.linkage_name]
36
-
37
- visiting[aggregate_decl.linkage_name] = true
38
- aggregate_decl_dependencies(aggregate_decl).each do |dependency|
39
- next unless by_c_name.key?(dependency)
40
-
41
- visit.call(by_c_name.fetch(dependency))
42
- end
43
- visiting.delete(aggregate_decl.linkage_name)
44
- visited[aggregate_decl.linkage_name] = true
45
- sorted << aggregate_decl
46
- end
16
+ def sort_aggregate_decls(struct_decls, union_decls, variant_decls)
17
+ aggregate_decls = struct_decls + union_decls + variant_decls
18
+ by_c_name = aggregate_decls.each_with_object({}) do |aggregate_decl, declarations|
19
+ declarations[aggregate_decl.linkage_name] = aggregate_decl
20
+ end
21
+ variant_decls.each do |variant_decl|
22
+ variant_decl.arms.each do |arm|
23
+ next if arm.fields.empty?
24
+ by_c_name[arm.linkage_name] = variant_decl
25
+ end
26
+ end
27
+ visiting = {}
28
+ visited = {}
29
+ sorted = []
47
30
 
48
- aggregate_decls.each do |aggregate_decl|
49
- visit.call(aggregate_decl)
50
- end
31
+ visit = lambda do |aggregate_decl|
32
+ return if visited[aggregate_decl.linkage_name]
33
+ raise CBackendError.new("cyclic aggregate dependency involving #{aggregate_decl.linkage_name}", line: 0, column: 0, path: @path) if visiting[aggregate_decl.linkage_name]
34
+
35
+ visiting[aggregate_decl.linkage_name] = true
36
+ aggregate_decl_dependencies(aggregate_decl).each do |dependency|
37
+ next unless by_c_name.key?(dependency)
51
38
 
52
- sorted
39
+ visit.call(by_c_name.fetch(dependency))
53
40
  end
41
+ visiting.delete(aggregate_decl.linkage_name)
42
+ visited[aggregate_decl.linkage_name] = true
43
+ sorted << aggregate_decl
44
+ end
45
+
46
+ aggregate_decls.each do |aggregate_decl|
47
+ visit.call(aggregate_decl)
48
+ end
49
+
50
+ sorted
51
+ end
52
+
53
+ def aggregate_decl_dependencies(aggregate_decl)
54
+ own_name = aggregate_decl.linkage_name
55
+ deps = case aggregate_decl
56
+ when IR::StructDecl, IR::UnionDecl
57
+ aggregate_decl.fields.flat_map { |field| aggregate_type_dependencies(field.type) }
58
+ when IR::VariantDecl
59
+ aggregate_decl.arms.flat_map { |arm| arm.fields.flat_map { |field| aggregate_type_dependencies(field.type) } }
60
+ else
61
+ []
62
+ end
63
+
64
+ deps.uniq.reject do |dep|
65
+ next true if dep == own_name
66
+ next false unless aggregate_decl.is_a?(IR::VariantDecl)
67
+
68
+ (@cyclic_aggregate_pairs || Set.new).include?([own_name, dep])
69
+ end
70
+ end
71
+
72
+ def build_cyclic_aggregate_pairs(all_decls)
73
+ by_name = all_decls.each_with_object({}) { |d, h| h[d.linkage_name] = d }
74
+ value_refs = {}
75
+ all_decls.each { |d| value_refs[d.linkage_name] = Set.new }
54
76
 
55
- def aggregate_decl_dependencies(aggregate_decl)
56
- case aggregate_decl
57
- when IR::StructDecl, IR::UnionDecl
58
- aggregate_decl.fields.flat_map { |field| aggregate_type_dependencies(field.type) }.uniq
59
- when IR::VariantDecl
60
- own_name = aggregate_decl.linkage_name
61
- aggregate_decl.arms.flat_map { |arm| arm.fields.flat_map { |field| aggregate_type_dependencies(field.type) } }
62
- .uniq
63
- .reject { |dep| dep == own_name }
64
- else
65
- []
77
+ all_decls.each do |decl|
78
+ own = decl.linkage_name
79
+ fields = case decl
80
+ when IR::StructDecl, IR::UnionDecl then decl.fields
81
+ when IR::VariantDecl then decl.arms.flat_map(&:fields)
82
+ else []
83
+ end
84
+ fields.each do |f|
85
+ aggregate_type_dependencies(f.type).each do |dep|
86
+ value_refs[own] << dep if by_name.key?(dep) && dep != own
66
87
  end
67
88
  end
89
+ end
68
90
 
69
- def aggregate_type_dependencies(type)
70
- case type
71
- when Types::Nullable
72
- if c_backend_pointer_like_type?(type.base)
73
- aggregate_type_dependencies(type.base)
74
- else
75
- [nullable_opt_type_name(type)]
76
- end
77
- when Types::Task
78
- [task_type_name(type)]
79
- when Types::Proc
80
- [proc_type_name(type)]
81
- when Types::GenericInstance
82
- if pointer_type?(type)
83
- []
84
- elsif array_type?(type)
85
- aggregate_type_dependencies(array_element_type(type))
86
- elsif str_buffer_type?(type)
87
- [str_buffer_type_name(type)]
88
- else
89
- []
90
- end
91
- when Types::Function
92
- []
93
- when Types::Struct, Types::StructInstance, Types::Union, Types::Variant, Types::VariantInstance, Types::Event, Types::Subscription
94
- [named_type_c_name(type)]
95
- when Types::VariantArmPayload
96
- [named_type_c_name(type), named_type_c_name(type.variant_type)]
97
- else
98
- []
99
- end
91
+ pairs = Set.new
92
+ value_refs.each do |a, refs|
93
+ refs.each do |b|
94
+ pairs << [a, b] if aggregate_can_reach?(b, a, value_refs)
95
+ end
96
+ end
97
+ pairs
98
+ end
99
+
100
+ def aggregate_can_reach?(from, to, value_refs, visited = {})
101
+ return false if visited[from]
102
+ return true if from == to
103
+ return true if (value_refs[from] || Set.new).include?(to)
104
+
105
+ visited[from] = true
106
+ (value_refs[from] || Set.new).any? { |next_name| aggregate_can_reach?(next_name, to, value_refs, visited) }
107
+ end
108
+
109
+ def aggregate_field_creates_cycle?(field_type, outer_c)
110
+ resolved = resolved_aggregate_c_name(field_type)
111
+ return false unless resolved
112
+
113
+ return true if resolved == outer_c
114
+ return false unless @cyclic_aggregate_pairs
115
+
116
+ @cyclic_aggregate_pairs.include?([outer_c, resolved])
117
+ end
118
+
119
+ def resolved_aggregate_c_name(type)
120
+ case type
121
+ when Types::Variant, Types::VariantInstance, Types::Struct, Types::StructInstance, Types::Union
122
+ named_type_c_name(type)
123
+ when Types::Nullable
124
+ resolved_aggregate_c_name(type.base)
125
+ when Types::GenericInstance
126
+ if array_type?(type) || str_buffer_type?(type)
127
+ resolved_aggregate_c_name(array_element_type(type))
128
+ end
129
+ end
130
+ end
131
+
132
+ def aggregate_type_dependencies(type)
133
+ case type
134
+ when Types::Nullable
135
+ if c_backend_pointer_like_type?(type.base)
136
+ aggregate_type_dependencies(type.base)
137
+ else
138
+ [nullable_opt_type_name(type)]
139
+ end
140
+ when Types::Task
141
+ [task_type_name(type)]
142
+ when Types::Proc
143
+ [proc_type_name(type)]
144
+ when Types::GenericInstance
145
+ if pointer_type?(type)
146
+ []
147
+ elsif array_type?(type)
148
+ aggregate_type_dependencies(array_element_type(type))
149
+ elsif str_buffer_type?(type)
150
+ [str_buffer_type_name(type)]
151
+ else
152
+ []
100
153
  end
154
+ when Types::Function
155
+ []
156
+ when Types::Struct, Types::StructInstance, Types::Union, Types::Variant, Types::VariantInstance, Types::Event, Types::Subscription
157
+ [named_type_c_name(type)]
158
+ when Types::VariantArmPayload
159
+ [named_type_c_name(type), named_type_c_name(type.variant_type)]
160
+ else
161
+ []
162
+ end
163
+ end
101
164
  end
102
165
  end
103
166
  end