mt-lang 0.3.4 → 0.3.6
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 -1
- data/lib/milk_tea/core/c_backend/expressions.rb +6 -1
- data/lib/milk_tea/core/c_backend/feature_detection.rb +27 -55
- data/lib/milk_tea/core/c_backend/format_helpers.rb +551 -0
- data/lib/milk_tea/core/c_backend/runtime_helpers.rb +0 -542
- data/lib/milk_tea/core/c_backend/statements.rb +4 -0
- data/lib/milk_tea/core/c_backend/type_collectors.rb +51 -204
- data/lib/milk_tea/core/c_backend.rb +10 -0
- data/lib/milk_tea/core/compatibility_helpers.rb +1 -1
- data/lib/milk_tea/core/compile_time.rb +19 -1
- data/lib/milk_tea/core/ir.rb +3 -1
- data/lib/milk_tea/core/lowering/async/lowering.rb +147 -141
- data/lib/milk_tea/core/lowering/block.rb +761 -726
- data/lib/milk_tea/core/lowering/declarations.rb +2 -1
- data/lib/milk_tea/core/lowering/expressions.rb +94 -0
- data/lib/milk_tea/core/lowering/loops.rb +49 -0
- data/lib/milk_tea/core/lowering/resolve.rb +222 -215
- data/lib/milk_tea/core/lowering/utils.rb +0 -222
- data/lib/milk_tea/core/module_loader.rb +29 -48
- data/lib/milk_tea/core/parser/declarations.rb +2 -2
- data/lib/milk_tea/core/parser/recovery.rb +1 -1
- data/lib/milk_tea/core/parser.rb +1 -1
- data/lib/milk_tea/core/semantic_analyzer/expressions.rb +3 -120
- data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +116 -113
- data/lib/milk_tea/core/semantic_analyzer/generics.rb +346 -343
- data/lib/milk_tea/core/semantic_analyzer/statements.rb +37 -12
- data/lib/milk_tea/core/semantic_analyzer/top_level.rb +23 -0
- data/lib/milk_tea/core/types/predicates.rb +501 -499
- data/lib/milk_tea/core/types/visitor.rb +1 -1
- data/lib/milk_tea/tooling/error_formatter.rb +18 -14
- data/std/mem/ptr.mt +9 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2d5caebfa149a9d43d576f3cbf1b36b175ce70b28bfe474bc942fc2d11f0f1e8
|
|
4
|
+
data.tar.gz: bf9f4a30b1cabadbed2b2d276dd29d567e118d008000791eefb2ec0e81f80c4f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 681c1614c3449f16bb71fbb0f9ee7e9ec10420e302602b131c4ed813b087742e7474ff71e9111f5d35cb1e4315eb440c3c85e29d66e8c733159063cbe946ea01
|
|
7
|
+
data.tar.gz: 6ea9caabdb7407f64d634f6576135df74e614878f81680777062c2e5f64f75278bb56f71bb48406153e40745e2d2b458e99c46193c9c85837c2b28b3b7aca4b4
|
data/lib/milk_tea/base.rb
CHANGED
|
@@ -33,7 +33,12 @@ module MilkTea
|
|
|
33
33
|
when IR::NullableSpanIndex
|
|
34
34
|
"#{nullable_span_index_helper_name(expression.receiver_type)}(#{emit_expression(expression.receiver)}, #{emit_expression(expression.index)})"
|
|
35
35
|
when IR::Call
|
|
36
|
-
|
|
36
|
+
if array_type?(expression.type)
|
|
37
|
+
location = [@source_path, @current_line && "line #{@current_line}"].compact.join(" ")
|
|
38
|
+
msg = "array-return call must be materialized before C emission"
|
|
39
|
+
msg += " (#{location})" unless location.empty?
|
|
40
|
+
raise CBackendError.new(msg, line: @current_line, path: @source_path)
|
|
41
|
+
end
|
|
37
42
|
|
|
38
43
|
emit_call_expression(expression)
|
|
39
44
|
when IR::Unary
|
|
@@ -234,7 +234,7 @@ module MilkTea
|
|
|
234
234
|
changed = false
|
|
235
235
|
|
|
236
236
|
helpers.keys.each do |helper|
|
|
237
|
-
|
|
237
|
+
(FORMAT_HELPER_DEPENDENCIES[helper] || []).each do |dependency|
|
|
238
238
|
next if helpers[dependency]
|
|
239
239
|
|
|
240
240
|
helpers[dependency] = true
|
|
@@ -249,60 +249,32 @@ module MilkTea
|
|
|
249
249
|
end
|
|
250
250
|
end
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
when 'mt_format_append_ulong_oct'
|
|
279
|
-
%w[mt_format_check_capacity mt_format_ulong_oct_len]
|
|
280
|
-
when 'mt_format_append_long_oct'
|
|
281
|
-
%w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong_oct mt_format_ulong_oct_len]
|
|
282
|
-
when 'mt_format_append_ulong_bin'
|
|
283
|
-
%w[mt_format_check_capacity mt_format_ulong_bin_len]
|
|
284
|
-
when 'mt_format_append_long_bin'
|
|
285
|
-
%w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong_bin mt_format_ulong_bin_len]
|
|
286
|
-
when 'mt_format_append_float'
|
|
287
|
-
%w[mt_format_check_capacity mt_format_float_len]
|
|
288
|
-
when 'mt_format_append_double'
|
|
289
|
-
%w[mt_format_check_capacity mt_format_double_len]
|
|
290
|
-
when 'mt_format_append_double_precision'
|
|
291
|
-
%w[mt_format_check_capacity mt_format_double_precision_len]
|
|
292
|
-
when 'mt_format_int_len'
|
|
293
|
-
%w[mt_format_ptr_uint_len]
|
|
294
|
-
when 'mt_format_long_len'
|
|
295
|
-
%w[mt_format_ulong_len]
|
|
296
|
-
when 'mt_format_long_hex_len'
|
|
297
|
-
%w[mt_format_ulong_hex_len]
|
|
298
|
-
when 'mt_format_long_oct_len'
|
|
299
|
-
%w[mt_format_ulong_oct_len]
|
|
300
|
-
when 'mt_format_long_bin_len'
|
|
301
|
-
%w[mt_format_ulong_bin_len]
|
|
302
|
-
else
|
|
303
|
-
[]
|
|
304
|
-
end
|
|
305
|
-
end
|
|
252
|
+
FORMAT_HELPER_DEPENDENCIES = {
|
|
253
|
+
'mt_format_append_str' => %w[mt_format_append_bytes mt_format_check_capacity],
|
|
254
|
+
'mt_format_append_cstr' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_cstr_len],
|
|
255
|
+
'mt_format_append_bool' => %w[mt_format_append_bytes mt_format_check_capacity],
|
|
256
|
+
'mt_format_append_ptr_uint' => %w[mt_format_check_capacity mt_format_ptr_uint_len],
|
|
257
|
+
'mt_format_append_ulong' => %w[mt_format_check_capacity mt_format_ulong_len],
|
|
258
|
+
'mt_format_append_uint' => %w[mt_format_append_ptr_uint mt_format_check_capacity mt_format_ptr_uint_len],
|
|
259
|
+
'mt_format_append_long' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong mt_format_ulong_len],
|
|
260
|
+
'mt_format_append_int' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ptr_uint mt_format_ptr_uint_len],
|
|
261
|
+
'mt_format_append_ulong_hex' => %w[mt_format_check_capacity mt_format_ulong_hex_len],
|
|
262
|
+
'mt_format_append_ulong_hex_upper' => %w[mt_format_check_capacity mt_format_ulong_hex_len],
|
|
263
|
+
'mt_format_append_long_hex' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong_hex mt_format_ulong_hex_len],
|
|
264
|
+
'mt_format_append_long_hex_upper' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong_hex_upper mt_format_ulong_hex_len],
|
|
265
|
+
'mt_format_append_ulong_oct' => %w[mt_format_check_capacity mt_format_ulong_oct_len],
|
|
266
|
+
'mt_format_append_long_oct' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong_oct mt_format_ulong_oct_len],
|
|
267
|
+
'mt_format_append_ulong_bin' => %w[mt_format_check_capacity mt_format_ulong_bin_len],
|
|
268
|
+
'mt_format_append_long_bin' => %w[mt_format_append_bytes mt_format_check_capacity mt_format_append_ulong_bin mt_format_ulong_bin_len],
|
|
269
|
+
'mt_format_append_float' => %w[mt_format_check_capacity mt_format_float_len],
|
|
270
|
+
'mt_format_append_double' => %w[mt_format_check_capacity mt_format_double_len],
|
|
271
|
+
'mt_format_append_double_precision' => %w[mt_format_check_capacity mt_format_double_precision_len],
|
|
272
|
+
'mt_format_int_len' => %w[mt_format_ptr_uint_len],
|
|
273
|
+
'mt_format_long_len' => %w[mt_format_ulong_len],
|
|
274
|
+
'mt_format_long_hex_len' => %w[mt_format_ulong_hex_len],
|
|
275
|
+
'mt_format_long_oct_len' => %w[mt_format_ulong_oct_len],
|
|
276
|
+
'mt_format_long_bin_len' => %w[mt_format_ulong_bin_len],
|
|
277
|
+
}.freeze
|
|
306
278
|
|
|
307
279
|
def uses_format_helpers?
|
|
308
280
|
!used_format_helpers.empty?
|