mt-lang 0.3.8 → 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.
- checksums.yaml +4 -4
- data/lib/milk_tea/base.rb +1 -2
- data/lib/milk_tea/bindings/bindgen/ast_parser.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/declaration.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/emitter.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/overrides.rb +0 -2
- data/lib/milk_tea/bindings/bindgen/type_mapper.rb +51 -53
- data/lib/milk_tea/bindings/imported_bindings/generator.rb +7 -9
- data/lib/milk_tea/bindings/imported_bindings/method_source.rb +0 -2
- data/lib/milk_tea/bindings/imported_bindings/naming.rb +6 -8
- data/lib/milk_tea/bindings/imported_bindings.rb +0 -2
- data/lib/milk_tea/bindings/opengl_registry.rb +3 -7
- data/lib/milk_tea/bindings/steamworks.rb +12 -16
- data/lib/milk_tea/bindings/upstream_sources.rb +10 -14
- data/lib/milk_tea/bindings/vendored_box2d.rb +10 -12
- data/lib/milk_tea/bindings/vendored_cjson.rb +6 -8
- data/lib/milk_tea/bindings/vendored_flecs.rb +10 -12
- data/lib/milk_tea/bindings/vendored_glfw.rb +11 -13
- data/lib/milk_tea/bindings/vendored_libuv.rb +11 -13
- data/lib/milk_tea/bindings/vendored_pcre2.rb +11 -13
- data/lib/milk_tea/bindings/vendored_raylib.rb +6 -10
- data/lib/milk_tea/bindings/vendored_sdl3.rb +11 -13
- data/lib/milk_tea/bindings/vendored_steamworks.rb +1 -5
- data/lib/milk_tea/core/ast.rb +103 -45
- data/lib/milk_tea/core/async_runtime_installer.rb +0 -2
- data/lib/milk_tea/core/bindings/attribute_binding.rb +1 -3
- data/lib/milk_tea/core/c_backend/aggregate_utils.rb +147 -84
- data/lib/milk_tea/core/c_backend/control_flow_emission.rb +394 -396
- data/lib/milk_tea/core/c_backend/expressions.rb +489 -476
- data/lib/milk_tea/core/c_backend/feature_detection.rb +446 -437
- data/lib/milk_tea/core/c_backend/format_helpers.rb +0 -2
- data/lib/milk_tea/core/c_backend/reachability.rb +339 -341
- data/lib/milk_tea/core/c_backend/reinterpret.rb +231 -217
- data/lib/milk_tea/core/c_backend/runtime_helpers.rb +531 -526
- data/lib/milk_tea/core/c_backend/statements.rb +528 -530
- data/lib/milk_tea/core/c_backend/type_collectors.rb +1344 -1346
- data/lib/milk_tea/core/c_backend/type_declaration.rb +215 -213
- data/lib/milk_tea/core/c_backend/type_system.rb +347 -349
- data/lib/milk_tea/core/c_backend.rb +17 -9
- data/lib/milk_tea/core/compatibility_helpers.rb +0 -2
- data/lib/milk_tea/core/compile_time/const_eval.rb +7 -12
- data/lib/milk_tea/core/compile_time.rb +32 -38
- data/lib/milk_tea/core/control_flow/builder.rb +3 -5
- data/lib/milk_tea/core/control_flow/constant_propagation.rb +14 -17
- data/lib/milk_tea/core/control_flow/definite_assignment.rb +0 -1
- data/lib/milk_tea/core/ir.rb +10 -10
- data/lib/milk_tea/core/lexer/character_classes.rb +5 -7
- data/lib/milk_tea/core/lexer/format_strings.rb +7 -9
- data/lib/milk_tea/core/lexer/heredocs.rb +22 -22
- data/lib/milk_tea/core/lexer/indentation.rb +0 -2
- data/lib/milk_tea/core/lexer/numbers.rb +0 -2
- data/lib/milk_tea/core/lexer/recovery.rb +0 -2
- data/lib/milk_tea/core/lexer/strings.rb +0 -2
- data/lib/milk_tea/core/lexer/symbols.rb +0 -2
- data/lib/milk_tea/core/lexer/trivia.rb +0 -2
- data/lib/milk_tea/core/lexer.rb +0 -2
- data/lib/milk_tea/core/lowering/async/analysis.rb +0 -2
- data/lib/milk_tea/core/lowering/async/lowering.rb +1264 -1265
- data/lib/milk_tea/core/lowering/async/normalization.rb +0 -2
- data/lib/milk_tea/core/lowering/async.rb +627 -630
- data/lib/milk_tea/core/lowering/block.rb +413 -416
- data/lib/milk_tea/core/lowering/calls.rb +1381 -1384
- data/lib/milk_tea/core/lowering/declarations.rb +180 -183
- data/lib/milk_tea/core/lowering/dyn.rb +48 -50
- data/lib/milk_tea/core/lowering/events.rb +983 -985
- data/lib/milk_tea/core/lowering/expressions.rb +1513 -1518
- data/lib/milk_tea/core/lowering/foreign_cstr.rb +181 -184
- data/lib/milk_tea/core/lowering/functions.rb +185 -188
- data/lib/milk_tea/core/lowering/loops.rb +1028 -1031
- data/lib/milk_tea/core/lowering/proc.rb +363 -366
- data/lib/milk_tea/core/lowering/resolve.rb +2133 -2135
- data/lib/milk_tea/core/lowering/scans.rb +179 -181
- data/lib/milk_tea/core/lowering/str_buffer.rb +102 -105
- data/lib/milk_tea/core/lowering/utils.rb +1040 -1044
- data/lib/milk_tea/core/lowering.rb +5 -7
- data/lib/milk_tea/core/module_binder.rb +0 -2
- data/lib/milk_tea/core/module_loader/errors.rb +4 -2
- data/lib/milk_tea/core/module_loader.rb +113 -20
- data/lib/milk_tea/core/module_path_resolver.rb +0 -2
- data/lib/milk_tea/core/module_roots.rb +6 -8
- data/lib/milk_tea/core/parser/attributes.rb +0 -2
- data/lib/milk_tea/core/parser/blocks.rb +0 -2
- data/lib/milk_tea/core/parser/declarations.rb +0 -2
- data/lib/milk_tea/core/parser/expressions.rb +31 -14
- data/lib/milk_tea/core/parser/recovery.rb +0 -2
- data/lib/milk_tea/core/parser/statements.rb +0 -2
- data/lib/milk_tea/core/parser/types.rb +8 -10
- data/lib/milk_tea/core/parser.rb +1 -3
- data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +31 -33
- data/lib/milk_tea/core/pretty_printer/base_formatter.rb +0 -2
- data/lib/milk_tea/core/pretty_printer/ir_formatter.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/attributes.rb +14 -16
- data/lib/milk_tea/core/semantic_analyzer/calls.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/expressions.rb +1 -14
- data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +18 -21
- data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +0 -3
- data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +12 -15
- data/lib/milk_tea/core/semantic_analyzer/generics.rb +57 -59
- data/lib/milk_tea/core/semantic_analyzer/interface_conformance.rb +0 -2
- data/lib/milk_tea/core/semantic_analyzer/name_resolution.rb +5 -9
- data/lib/milk_tea/core/semantic_analyzer/nullability.rb +0 -3
- data/lib/milk_tea/core/semantic_analyzer/statements.rb +35 -40
- data/lib/milk_tea/core/semantic_analyzer/top_level.rb +10 -12
- data/lib/milk_tea/core/semantic_analyzer/type_compatibility.rb +0 -6
- data/lib/milk_tea/core/semantic_analyzer/type_declaration.rb +102 -105
- data/lib/milk_tea/core/semantic_analyzer.rb +17 -8
- data/lib/milk_tea/core/types/layout.rb +21 -22
- data/lib/milk_tea/core/types/predicates.rb +0 -2
- data/lib/milk_tea/core/types/registry.rb +16 -18
- data/lib/milk_tea/core/types/visitor.rb +0 -4
- data/lib/milk_tea/dap/backends/lldb_dap.rb +0 -2
- data/lib/milk_tea/dap/protocol.rb +1 -1
- data/lib/milk_tea/dap/server/breakpoints.rb +0 -2
- data/lib/milk_tea/dap/server/debug_map.rb +0 -2
- data/lib/milk_tea/dap/server/handlers.rb +0 -2
- data/lib/milk_tea/dap/server/launch.rb +0 -2
- data/lib/milk_tea/dap/server/lldb_backend.rb +8 -10
- data/lib/milk_tea/dap/server/pause_diagnostics.rb +14 -16
- data/lib/milk_tea/dap/server/utilities.rb +0 -2
- data/lib/milk_tea/dap/server/wire.rb +0 -2
- data/lib/milk_tea/dap/server.rb +0 -2
- data/lib/milk_tea/lsp/diagnostics.rb +16 -16
- data/lib/milk_tea/lsp/server/call_hierarchy.rb +11 -12
- data/lib/milk_tea/lsp/server/code_actions.rb +355 -357
- data/lib/milk_tea/lsp/server/code_lens.rb +23 -25
- data/lib/milk_tea/lsp/server/completion.rb +873 -875
- data/lib/milk_tea/lsp/server/configuration.rb +129 -131
- data/lib/milk_tea/lsp/server/debug_info.rb +0 -2
- data/lib/milk_tea/lsp/server/definition.rb +564 -565
- data/lib/milk_tea/lsp/server/diagnostics_scheduling.rb +191 -193
- data/lib/milk_tea/lsp/server/execute_command.rb +0 -2
- data/lib/milk_tea/lsp/server/folding_range.rb +0 -4
- data/lib/milk_tea/lsp/server/formatting.rb +478 -480
- data/lib/milk_tea/lsp/server/hover.rb +1282 -1284
- data/lib/milk_tea/lsp/server/inlay_hints.rb +179 -181
- data/lib/milk_tea/lsp/server/lifecycle.rb +192 -194
- data/lib/milk_tea/lsp/server/linked_editing_range.rb +0 -2
- data/lib/milk_tea/lsp/server/on_type_formatting.rb +0 -2
- data/lib/milk_tea/lsp/server/progress.rb +0 -2
- data/lib/milk_tea/lsp/server/references.rb +316 -318
- data/lib/milk_tea/lsp/server/rename.rb +445 -447
- data/lib/milk_tea/lsp/server/selection_range.rb +0 -4
- data/lib/milk_tea/lsp/server/semantic_tokens.rb +1318 -1320
- data/lib/milk_tea/lsp/server/signature_help.rb +146 -148
- data/lib/milk_tea/lsp/server/text_documents.rb +99 -101
- data/lib/milk_tea/lsp/server/type_hierarchy.rb +2 -4
- data/lib/milk_tea/lsp/server/utilities.rb +397 -399
- data/lib/milk_tea/lsp/server.rb +0 -3
- data/lib/milk_tea/lsp/workspace/analysis.rb +40 -42
- data/lib/milk_tea/lsp/workspace/dependency_graph.rb +4 -10
- data/lib/milk_tea/lsp/workspace/utilities.rb +19 -19
- data/lib/milk_tea/packages/atomic_write.rb +4 -5
- data/lib/milk_tea/packages/dependency_solver.rb +15 -15
- data/lib/milk_tea/packages/lock.rb +4 -4
- data/lib/milk_tea/packages/manager_cli.rb +1 -1
- data/lib/milk_tea/packages/manifest.rb +3 -3
- data/lib/milk_tea/packages/registry_store.rb +4 -6
- data/lib/milk_tea/packages/services.rb +16 -16
- data/lib/milk_tea/packages/source_cache.rb +4 -6
- data/lib/milk_tea/packages/source_resolver.rb +44 -44
- data/lib/milk_tea/packages/version.rb +8 -8
- data/lib/milk_tea/tooling/build.rb +3 -7
- data/lib/milk_tea/tooling/build_cache.rb +0 -2
- data/lib/milk_tea/tooling/debug_info_formatter.rb +31 -33
- data/lib/milk_tea/tooling/debug_map.rb +8 -10
- data/lib/milk_tea/tooling/docs_app.rb +0 -2
- data/lib/milk_tea/tooling/linter/doc_tags.rb +25 -27
- data/lib/milk_tea/tooling/linter/fix_engine.rb +87 -24
- data/lib/milk_tea/tooling/linter/flow_rules.rb +44 -46
- data/lib/milk_tea/tooling/linter/imports_platform.rb +14 -16
- data/lib/milk_tea/tooling/linter/release_rules.rb +3 -5
- data/lib/milk_tea/tooling/linter/reserved_names.rb +23 -25
- data/lib/milk_tea/tooling/linter/rules.rb +87 -89
- data/lib/milk_tea/tooling/linter/source_helpers.rb +40 -42
- data/lib/milk_tea/tooling/linter/trailing_comma.rb +17 -19
- data/lib/milk_tea/tooling/linter/visitors.rb +162 -50
- data/lib/milk_tea/tooling/linter.rb +0 -2
- data/lib/milk_tea/tooling/project_scaffold.rb +0 -2
- data/lib/milk_tea/tooling/run.rb +0 -2
- data/lib/milk_tea/tooling/toolchain_cli.rb +0 -2
- data/std/cli.mt +13 -32
- data/std/color.mt +28 -28
- data/std/encoding.mt +4 -4
- data/std/graph.mt +1 -2
- data/std/hash.mt +14 -14
- data/std/http/server.mt +3 -3
- data/std/input.mt +1 -1
- data/std/json.mt +1 -1
- data/std/linear_algebra.mt +6 -6
- data/std/net/mux.mt +1 -1
- data/std/noise.mt +23 -23
- data/std/parse.mt +2 -2
- data/std/process.mt +3 -4
- data/std/sparse_set.mt +1 -1
- data/std/steering.mt +5 -5
- data/std/str.mt +1 -1
- data/std/tween.mt +4 -4
- data/std/utility.mt +3 -3
- metadata +2 -2
|
@@ -5,19 +5,18 @@ require_relative "types"
|
|
|
5
5
|
|
|
6
6
|
module MilkTea
|
|
7
7
|
module Layout
|
|
8
|
-
module_function
|
|
9
8
|
|
|
10
9
|
POINTER_SIZE = Fiddle::SIZEOF_VOIDP
|
|
11
10
|
|
|
12
|
-
def size_of(type)
|
|
11
|
+
def self.size_of(type)
|
|
13
12
|
size_and_alignment(type, {})&.first
|
|
14
13
|
end
|
|
15
14
|
|
|
16
|
-
def alignment_of(type)
|
|
15
|
+
def self.alignment_of(type)
|
|
17
16
|
size_and_alignment(type, {})&.last
|
|
18
17
|
end
|
|
19
18
|
|
|
20
|
-
def offset_of(type, field_name)
|
|
19
|
+
def self.offset_of(type, field_name)
|
|
21
20
|
case type
|
|
22
21
|
when Types::Struct, Types::StructInstance, Types::Span, Types::StringView, Types::Task
|
|
23
22
|
fields = ordered_fields(type)
|
|
@@ -38,7 +37,7 @@ module MilkTea
|
|
|
38
37
|
end
|
|
39
38
|
end
|
|
40
39
|
|
|
41
|
-
def size_and_alignment(type, stack)
|
|
40
|
+
def self.size_and_alignment(type, stack)
|
|
42
41
|
case type
|
|
43
42
|
when Types::Primitive
|
|
44
43
|
primitive_layout(type)
|
|
@@ -82,7 +81,7 @@ module MilkTea
|
|
|
82
81
|
end
|
|
83
82
|
end
|
|
84
83
|
|
|
85
|
-
def primitive_layout(type)
|
|
84
|
+
def self.primitive_layout(type)
|
|
86
85
|
case type.name
|
|
87
86
|
when "bool", "byte", "ubyte", "char"
|
|
88
87
|
[1, 1]
|
|
@@ -99,7 +98,7 @@ module MilkTea
|
|
|
99
98
|
end
|
|
100
99
|
end
|
|
101
100
|
|
|
102
|
-
def generic_layout(type, stack)
|
|
101
|
+
def self.generic_layout(type, stack)
|
|
103
102
|
case type.name
|
|
104
103
|
when "ptr", "const_ptr", "own", "ref"
|
|
105
104
|
[POINTER_SIZE, POINTER_SIZE]
|
|
@@ -120,7 +119,7 @@ module MilkTea
|
|
|
120
119
|
end
|
|
121
120
|
end
|
|
122
121
|
|
|
123
|
-
def variant_layout(type, stack:)
|
|
122
|
+
def self.variant_layout(type, stack:)
|
|
124
123
|
payload_layouts = type.arm_names.filter_map do |arm_name|
|
|
125
124
|
fields = type.arm(arm_name)
|
|
126
125
|
next if fields.nil? || fields.empty?
|
|
@@ -134,7 +133,7 @@ module MilkTea
|
|
|
134
133
|
struct_layout_from_infos(field_infos, packed: false, alignment: nil)
|
|
135
134
|
end
|
|
136
135
|
|
|
137
|
-
def struct_layout(fields, packed:, alignment:, stack:)
|
|
136
|
+
def self.struct_layout(fields, packed:, alignment:, stack:)
|
|
138
137
|
field_infos = fields.map do |field_name, field_type|
|
|
139
138
|
field_layout = size_and_alignment(field_type, stack)
|
|
140
139
|
return nil unless field_layout
|
|
@@ -145,7 +144,7 @@ module MilkTea
|
|
|
145
144
|
struct_layout_from_infos(field_infos, packed:, alignment:)
|
|
146
145
|
end
|
|
147
146
|
|
|
148
|
-
def union_layout(fields, packed:, alignment:, stack:)
|
|
147
|
+
def self.union_layout(fields, packed:, alignment:, stack:)
|
|
149
148
|
field_infos = fields.map do |_field_name, field_type|
|
|
150
149
|
field_layout = size_and_alignment(field_type, stack)
|
|
151
150
|
return nil unless field_layout
|
|
@@ -156,7 +155,7 @@ module MilkTea
|
|
|
156
155
|
union_layout_from_layouts(field_infos.map { |size, field_alignment| { size:, alignment: field_alignment } }, packed:, alignment:)
|
|
157
156
|
end
|
|
158
157
|
|
|
159
|
-
def struct_layout_from_infos(field_infos, packed:, alignment:)
|
|
158
|
+
def self.struct_layout_from_infos(field_infos, packed:, alignment:)
|
|
160
159
|
offsets = {}
|
|
161
160
|
offset = 0
|
|
162
161
|
natural_alignment = 1
|
|
@@ -177,7 +176,7 @@ module MilkTea
|
|
|
177
176
|
}
|
|
178
177
|
end
|
|
179
178
|
|
|
180
|
-
def union_layout_from_layouts(layouts, packed:, alignment:)
|
|
179
|
+
def self.union_layout_from_layouts(layouts, packed:, alignment:)
|
|
181
180
|
natural_alignment = packed ? 1 : (layouts.map { |layout| layout[:alignment] }.max || 1)
|
|
182
181
|
overall_alignment = [natural_alignment, alignment || 1].max
|
|
183
182
|
size = layouts.map { |layout| layout[:size] }.max || 0
|
|
@@ -188,27 +187,27 @@ module MilkTea
|
|
|
188
187
|
}
|
|
189
188
|
end
|
|
190
189
|
|
|
191
|
-
def ordered_fields(type)
|
|
190
|
+
def self.ordered_fields(type)
|
|
192
191
|
type.fields
|
|
193
192
|
end
|
|
194
193
|
|
|
195
|
-
def packed_layout?(type)
|
|
194
|
+
def self.packed_layout?(type)
|
|
196
195
|
type.respond_to?(:packed) && type.packed
|
|
197
196
|
end
|
|
198
197
|
|
|
199
|
-
def explicit_alignment(type)
|
|
198
|
+
def self.explicit_alignment(type)
|
|
200
199
|
type.respond_to?(:alignment) ? type.alignment : nil
|
|
201
200
|
end
|
|
202
201
|
|
|
203
|
-
def array_type?(type)
|
|
202
|
+
def self.array_type?(type)
|
|
204
203
|
type.arguments.length == 2 && type.arguments[1].is_a?(Types::LiteralTypeArg) && type.arguments[1].value.is_a?(Integer)
|
|
205
204
|
end
|
|
206
205
|
|
|
207
|
-
def str_buffer_type?(type)
|
|
206
|
+
def self.str_buffer_type?(type)
|
|
208
207
|
type.arguments.length == 1 && type.arguments.first.is_a?(Types::LiteralTypeArg) && type.arguments.first.value.is_a?(Integer)
|
|
209
208
|
end
|
|
210
209
|
|
|
211
|
-
def str_buffer_fields(type)
|
|
210
|
+
def self.str_buffer_fields(type)
|
|
212
211
|
storage_capacity = type.arguments.first.value + 1
|
|
213
212
|
{
|
|
214
213
|
"data" => Types::Registry.generic_instance("array", [Types::Registry.primitive("char"), Types::LiteralTypeArg.new(storage_capacity)]),
|
|
@@ -217,28 +216,28 @@ module MilkTea
|
|
|
217
216
|
}
|
|
218
217
|
end
|
|
219
218
|
|
|
220
|
-
def layout_pointer_like_nullable_base?(base)
|
|
219
|
+
def self.layout_pointer_like_nullable_base?(base)
|
|
221
220
|
return true if base.is_a?(Types::Function) || base.is_a?(Types::Proc) || base.is_a?(Types::Opaque)
|
|
222
221
|
return true if base.is_a?(Types::Primitive) && base.name == "cstr"
|
|
223
222
|
|
|
224
223
|
base.is_a?(Types::GenericInstance) && %w[ptr const_ptr own ref].include?(base.name)
|
|
225
224
|
end
|
|
226
225
|
|
|
227
|
-
def nullable_opt_layout_fields(base)
|
|
226
|
+
def self.nullable_opt_layout_fields(base)
|
|
228
227
|
{
|
|
229
228
|
"has_value" => Types::Registry.primitive("bool"),
|
|
230
229
|
"value" => base,
|
|
231
230
|
}
|
|
232
231
|
end
|
|
233
232
|
|
|
234
|
-
def align_up(value, alignment)
|
|
233
|
+
def self.align_up(value, alignment)
|
|
235
234
|
return value if alignment <= 1
|
|
236
235
|
|
|
237
236
|
remainder = value % alignment
|
|
238
237
|
remainder.zero? ? value : value + alignment - remainder
|
|
239
238
|
end
|
|
240
239
|
|
|
241
|
-
def with_stack(type, stack)
|
|
240
|
+
def self.with_stack(type, stack)
|
|
242
241
|
return if stack[type]
|
|
243
242
|
|
|
244
243
|
stack[type] = true
|
|
@@ -6,80 +6,78 @@ module MilkTea
|
|
|
6
6
|
@pool = {}
|
|
7
7
|
@mutex = Mutex.new
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def reset!
|
|
9
|
+
def self.reset!
|
|
12
10
|
@mutex.synchronize { @pool.clear }
|
|
13
11
|
end
|
|
14
12
|
|
|
15
|
-
def _intern(key, &construct)
|
|
13
|
+
def self._intern(key, &construct)
|
|
16
14
|
@mutex.synchronize do
|
|
17
15
|
@pool[key] ||= construct.call
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
|
|
21
|
-
def primitive(name)
|
|
19
|
+
def self.primitive(name)
|
|
22
20
|
_intern([:primitive, name]) { Primitive.new(name) }
|
|
23
21
|
end
|
|
24
22
|
|
|
25
|
-
def nullable(base)
|
|
23
|
+
def self.nullable(base)
|
|
26
24
|
_intern([:nullable, base]) { Nullable.new(base) }
|
|
27
25
|
end
|
|
28
26
|
|
|
29
|
-
def generic_instance(name, arguments)
|
|
27
|
+
def self.generic_instance(name, arguments)
|
|
30
28
|
args = arguments.freeze
|
|
31
29
|
_intern([:generic, name, args]) { GenericInstance.new(name, args) }
|
|
32
30
|
end
|
|
33
31
|
|
|
34
|
-
def span(element_type)
|
|
32
|
+
def self.span(element_type)
|
|
35
33
|
_intern([:span, element_type]) { Span.new(element_type) }
|
|
36
34
|
end
|
|
37
35
|
|
|
38
|
-
def task(result_type)
|
|
36
|
+
def self.task(result_type)
|
|
39
37
|
_intern([:task, result_type]) { Task.new(result_type) }
|
|
40
38
|
end
|
|
41
39
|
|
|
42
|
-
def string_view
|
|
40
|
+
def self.string_view
|
|
43
41
|
_intern([:string_view]) { StringView.new }
|
|
44
42
|
end
|
|
45
43
|
|
|
46
|
-
def function(name, params:, return_type:, receiver_type: nil, receiver_editable: false, variadic: false, external: false)
|
|
44
|
+
def self.function(name, params:, return_type:, receiver_type: nil, receiver_editable: false, variadic: false, external: false)
|
|
47
45
|
params_frozen = params.freeze
|
|
48
46
|
_intern([:function, name, params_frozen, return_type, receiver_type, receiver_editable, variadic, external]) {
|
|
49
47
|
Function.new(name, params: params_frozen, return_type: return_type, receiver_type: receiver_type, receiver_editable: receiver_editable, variadic: variadic, external: external)
|
|
50
48
|
}
|
|
51
49
|
end
|
|
52
50
|
|
|
53
|
-
def proc(params:, return_type:)
|
|
51
|
+
def self.proc(params:, return_type:)
|
|
54
52
|
params_frozen = params.freeze
|
|
55
53
|
_intern([:proc, params_frozen, return_type]) { Proc.new(params: params_frozen, return_type: return_type) }
|
|
56
54
|
end
|
|
57
55
|
|
|
58
|
-
def parameter(name, type, mutable: false, passing_mode: :plain, boundary_type: nil)
|
|
56
|
+
def self.parameter(name, type, mutable: false, passing_mode: :plain, boundary_type: nil)
|
|
59
57
|
_intern([:parameter, name, type, mutable, passing_mode, boundary_type]) {
|
|
60
58
|
Parameter.new(name, type, mutable: mutable, passing_mode: passing_mode, boundary_type: boundary_type)
|
|
61
59
|
}
|
|
62
60
|
end
|
|
63
61
|
|
|
64
|
-
def tuple(element_types, field_names: nil)
|
|
62
|
+
def self.tuple(element_types, field_names: nil)
|
|
65
63
|
et_frozen = element_types.freeze
|
|
66
64
|
fn_frozen = field_names&.freeze
|
|
67
65
|
_intern([:tuple, et_frozen, fn_frozen]) { Tuple.new(et_frozen, field_names: fn_frozen) }
|
|
68
66
|
end
|
|
69
67
|
|
|
70
|
-
def soa(element_type, count:)
|
|
68
|
+
def self.soa(element_type, count:)
|
|
71
69
|
_intern([:soa, element_type, count]) { SoA.new(element_type, count: count) }
|
|
72
70
|
end
|
|
73
71
|
|
|
74
|
-
def simd(element_type, lane_count:)
|
|
72
|
+
def self.simd(element_type, lane_count:)
|
|
75
73
|
_intern([:simd, element_type, lane_count]) { Simd.new(element_type, lane_count: lane_count) }
|
|
76
74
|
end
|
|
77
75
|
|
|
78
|
-
def lifetime_ref(name)
|
|
76
|
+
def self.lifetime_ref(name)
|
|
79
77
|
LifetimeRef.new(name)
|
|
80
78
|
end
|
|
81
79
|
|
|
82
|
-
def dyn(interface_binding, type_arguments = [])
|
|
80
|
+
def self.dyn(interface_binding, type_arguments = [])
|
|
83
81
|
Dyn.new(interface_binding, type_arguments)
|
|
84
82
|
end
|
|
85
83
|
end
|
|
@@ -188,8 +188,6 @@ module MilkTea
|
|
|
188
188
|
end
|
|
189
189
|
alias visit_function visit_proc
|
|
190
190
|
|
|
191
|
-
private
|
|
192
|
-
|
|
193
191
|
def visit_children(type)
|
|
194
192
|
type.children.each do |child|
|
|
195
193
|
visit(child)
|
|
@@ -431,8 +429,6 @@ module MilkTea
|
|
|
431
429
|
end
|
|
432
430
|
end
|
|
433
431
|
|
|
434
|
-
private
|
|
435
|
-
|
|
436
432
|
def with_context(new_context)
|
|
437
433
|
old = @context
|
|
438
434
|
@context = new_context
|
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module DAP
|
|
5
5
|
class Server
|
|
6
6
|
module ServerLLDBBackend
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
def using_lldb_backend?
|
|
10
8
|
@session.backend_kind == "lldb-dap"
|
|
11
9
|
end
|
|
@@ -22,14 +20,14 @@ module MilkTea
|
|
|
22
20
|
end
|
|
23
21
|
|
|
24
22
|
@lldb_backend = if @backend_factory
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
build_backend_via_factory(adapter_command)
|
|
24
|
+
else
|
|
25
|
+
Backends::LLDBDAP.new(
|
|
26
|
+
adapter_command: adapter_command,
|
|
27
|
+
on_event: method(:handle_backend_event),
|
|
28
|
+
on_request: method(:handle_backend_request)
|
|
29
|
+
)
|
|
30
|
+
end
|
|
33
31
|
@lldb_backend.start!
|
|
34
32
|
end
|
|
35
33
|
|
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module DAP
|
|
5
5
|
class Server
|
|
6
6
|
module ServerPauseDiagnostics
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
def emit_pause_diagnostic_async(body)
|
|
10
8
|
return unless body.is_a?(Hash)
|
|
11
9
|
|
|
@@ -80,22 +78,22 @@ module MilkTea
|
|
|
80
78
|
line = dap_value(frame, "line")
|
|
81
79
|
|
|
82
80
|
location_source = if !source_path.empty? && !source_path.include?("`")
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
source_path
|
|
82
|
+
elsif !source_name.empty?
|
|
83
|
+
source_name
|
|
84
|
+
elsif !source_path.empty?
|
|
85
|
+
source_path
|
|
86
|
+
else
|
|
87
|
+
instruction_pointer
|
|
88
|
+
end
|
|
91
89
|
|
|
92
90
|
location = if location_source.to_s.empty?
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
"(unknown)"
|
|
92
|
+
elsif line.to_i.positive? && !location_source.include?(":#{line}")
|
|
93
|
+
"#{location_source}:#{line}"
|
|
94
|
+
else
|
|
95
|
+
location_source
|
|
96
|
+
end
|
|
99
97
|
|
|
100
98
|
if include_ip && !instruction_pointer.empty? && location != instruction_pointer
|
|
101
99
|
"#{frame_name} @ #{location} ip=#{instruction_pointer}"
|
data/lib/milk_tea/dap/server.rb
CHANGED
|
@@ -77,7 +77,7 @@ module MilkTea
|
|
|
77
77
|
imports: ast.respond_to?(:imports) ? (ast.imports || []) : [],
|
|
78
78
|
directives: ast.respond_to?(:directives) ? (ast.directives || []) : [],
|
|
79
79
|
declarations: ast.respond_to?(:declarations) ? (ast.declarations || []) : [],
|
|
80
|
-
line: ast.
|
|
80
|
+
line: ast.line || 1,
|
|
81
81
|
node_ids: ast.respond_to?(:node_ids) ? ast.node_ids : {},
|
|
82
82
|
)
|
|
83
83
|
end
|
|
@@ -90,14 +90,14 @@ module MilkTea
|
|
|
90
90
|
cross_by_uri = {}
|
|
91
91
|
target_path = path.is_a?(String) ? File.expand_path(path) : nil
|
|
92
92
|
sema_snapshot.diagnostics.reject { |diagnostic| redundant_unknown_import_diagnostic?(diagnostic, unresolved_import_paths) }
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
.each do |diagnostic|
|
|
94
|
+
if target_path && diagnostic.path && File.expand_path(diagnostic.path) != target_path
|
|
95
|
+
target_uri = path_to_uri(diagnostic.path)
|
|
96
|
+
(cross_by_uri[target_uri] ||= []) << format_tooling_diagnostic(diagnostic, stage: 'sema')
|
|
97
|
+
else
|
|
98
|
+
diagnostics << format_tooling_diagnostic(diagnostic, stage: 'sema')
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
101
|
sema_ms = elapsed_ms(sema_start) if sema_start
|
|
102
102
|
rescue StandardError => e
|
|
103
103
|
log_diagnostics_warning("Error collecting diagnostics: #{e.message}")
|
|
@@ -369,12 +369,12 @@ module MilkTea
|
|
|
369
369
|
start_char, end_char = extract_warning_range(diagnostic, content)
|
|
370
370
|
|
|
371
371
|
lsp_severity = case diagnostic.severity
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
372
|
+
when :error then 1
|
|
373
|
+
when :warning then 2
|
|
374
|
+
when :info then 3
|
|
375
|
+
when :hint then 4
|
|
376
|
+
else 2
|
|
377
|
+
end
|
|
378
378
|
{
|
|
379
379
|
range: {
|
|
380
380
|
start: { line: line_index, character: start_char },
|
|
@@ -393,7 +393,7 @@ module MilkTea
|
|
|
393
393
|
# Returns [start_char, end_char] in 0-based LSP coordinates.
|
|
394
394
|
# Falls back to [0, 1] when a precise token span cannot be inferred.
|
|
395
395
|
def self.extract_warning_range(warning, content)
|
|
396
|
-
if warning.
|
|
396
|
+
if warning.column
|
|
397
397
|
start_char = [warning.column.to_i - 1, 0].max
|
|
398
398
|
len = warning.respond_to?(:length) ? warning.length.to_i : 0
|
|
399
399
|
len = 1 if len <= 0
|
|
@@ -4,8 +4,6 @@ module MilkTea
|
|
|
4
4
|
module LSP
|
|
5
5
|
class Server
|
|
6
6
|
module ServerCallHierarchy
|
|
7
|
-
private
|
|
8
|
-
|
|
9
7
|
def handle_prepare_call_hierarchy(params)
|
|
10
8
|
text_document = params["textDocument"]
|
|
11
9
|
position = params["position"]
|
|
@@ -176,8 +174,8 @@ module MilkTea
|
|
|
176
174
|
end
|
|
177
175
|
|
|
178
176
|
def binding_range(binding)
|
|
179
|
-
line = binding.ast.
|
|
180
|
-
col = binding.ast.
|
|
177
|
+
line = binding.ast.line ? binding.ast.line - 1 : 0
|
|
178
|
+
col = binding.ast.column ? binding.ast.column - 1 : 0
|
|
181
179
|
length = binding.name.length
|
|
182
180
|
{
|
|
183
181
|
start: { line: line, character: col },
|
|
@@ -188,8 +186,8 @@ module MilkTea
|
|
|
188
186
|
def selection_range_from_binding(binding)
|
|
189
187
|
name_len = binding.name.length
|
|
190
188
|
ast = binding.ast
|
|
191
|
-
line = ast.
|
|
192
|
-
col = ast.
|
|
189
|
+
line = ast.line ? ast.line - 1 : 0
|
|
190
|
+
col = ast.column ? ast.column - 1 : 0
|
|
193
191
|
|
|
194
192
|
if ast.respond_to?(:name)
|
|
195
193
|
name_ast = ast.name
|
|
@@ -226,11 +224,12 @@ module MilkTea
|
|
|
226
224
|
callee_name = extract_callee_name(node.callee, facts)
|
|
227
225
|
next unless callee_name
|
|
228
226
|
|
|
227
|
+
callee = node.callee
|
|
228
|
+
line_start = callee.line ? callee.line - 1 : 0
|
|
229
|
+
col_start = callee.column ? callee.column - 1 : 0
|
|
229
230
|
range = {
|
|
230
|
-
start: { line:
|
|
231
|
-
|
|
232
|
-
end: { line: node.callee.respond_to?(:line) ? node.callee.line - 1 : 0,
|
|
233
|
-
character: (node.callee.respond_to?(:column) ? node.callee.column - 1 : 0) + callee_name.length },
|
|
231
|
+
start: { line: line_start, character: col_start },
|
|
232
|
+
end: { line: line_start, character: col_start + callee_name.length },
|
|
234
233
|
}
|
|
235
234
|
|
|
236
235
|
callees[callee_name] ||= []
|
|
@@ -260,8 +259,8 @@ module MilkTea
|
|
|
260
259
|
end
|
|
261
260
|
|
|
262
261
|
def token_range(token)
|
|
263
|
-
line = token.
|
|
264
|
-
col = token.
|
|
262
|
+
line = token.line ? token.line - 1 : 0
|
|
263
|
+
col = token.column ? token.column - 1 : 0
|
|
265
264
|
len = token.respond_to?(:lexeme) ? token.lexeme.length : 0
|
|
266
265
|
{
|
|
267
266
|
start: { line: line, character: col },
|