mt-lang 0.3.33 → 0.3.34
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/lowering/utils.rb +27 -1
- data/lib/milk_tea/core/semantic_analyzer/top_level.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d0786ef5ca9025e069a44b7ea3915199110e1f2397d294ed81122a308c79e2e
|
|
4
|
+
data.tar.gz: 42e3fa0077192377fa7da61cea865fd04e8ef49d66343c71a1bd5e2e1caa8b59
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd4a874279ff48b7d0f1de8baf092e92e01ede8a4c969133855c9dd9c9f061490c11ff29dfc24905466fe1df56d1d53a86a5c156ce1cbe5efeed60d78f5a21e8
|
|
7
|
+
data.tar.gz: 30bb123ddb1939f7694c62dae186152b8f592d78826e7b4aa416c6a010202d07bda5474b72014114d8064b7168ff02b6b7dd252a8b7d007d9b9bcae8b31b4786
|
data/lib/milk_tea/base.rb
CHANGED
|
@@ -321,7 +321,25 @@ module MilkTea
|
|
|
321
321
|
return literal
|
|
322
322
|
end
|
|
323
323
|
|
|
324
|
-
|
|
324
|
+
rewritten = rewrite_static_storage_initializer(expression)
|
|
325
|
+
if (imported_analysis = static_storage_imported_analysis(expression))
|
|
326
|
+
with_analysis_context(imported_analysis) do
|
|
327
|
+
lower_expression(rewritten, env:, expected_type: expected_type)
|
|
328
|
+
end
|
|
329
|
+
else
|
|
330
|
+
lower_expression(rewritten, env:, expected_type: expected_type)
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def static_storage_imported_analysis(expression)
|
|
335
|
+
return nil unless expression.is_a?(AST::MemberAccess)
|
|
336
|
+
return nil unless expression.receiver.is_a?(AST::Identifier)
|
|
337
|
+
return nil unless @ctx.imports.key?(expression.receiver.name)
|
|
338
|
+
|
|
339
|
+
imported_module = @ctx.imports.fetch(expression.receiver.name)
|
|
340
|
+
return nil unless imported_module.values[expression.member]&.kind == :const
|
|
341
|
+
|
|
342
|
+
analysis_for_module(imported_module.name)
|
|
325
343
|
end
|
|
326
344
|
|
|
327
345
|
def lower_compile_time_literal(value, type)
|
|
@@ -337,6 +355,14 @@ module MilkTea
|
|
|
337
355
|
if type == @ctx.types.fetch("str") || type == @ctx.types.fetch("cstr")
|
|
338
356
|
return IR::StringLiteral.new(value:, type:, cstring: type == @ctx.types.fetch("cstr"))
|
|
339
357
|
end
|
|
358
|
+
when Array
|
|
359
|
+
return nil unless array_type?(type)
|
|
360
|
+
|
|
361
|
+
element_type = type.arguments.first
|
|
362
|
+
elements = value.map { |element| lower_compile_time_literal(element, element_type) }
|
|
363
|
+
return nil if elements.any?(&:nil?)
|
|
364
|
+
|
|
365
|
+
IR::ArrayLiteral.new(type:, elements:)
|
|
340
366
|
when Hash
|
|
341
367
|
return nil unless type.is_a?(Types::Struct)
|
|
342
368
|
fields = value.map do |name, field_value|
|
|
@@ -472,6 +472,28 @@ module MilkTea
|
|
|
472
472
|
end
|
|
473
473
|
return fields
|
|
474
474
|
end
|
|
475
|
+
if resolved_type && array_type?(resolved_type)
|
|
476
|
+
values = []
|
|
477
|
+
expression.arguments.each do |argument|
|
|
478
|
+
val = CompileTime.evaluate(argument.value, resolve_identifier: lambda { |id|
|
|
479
|
+
if scopes
|
|
480
|
+
binding = lookup_value(id.name, scopes)
|
|
481
|
+
return binding.const_value unless binding&.const_value.nil?
|
|
482
|
+
end
|
|
483
|
+
resolve_current_module_const_value(id.name)
|
|
484
|
+
}, resolve_member_access: lambda { |ma|
|
|
485
|
+
if (receiver_type = resolve_type_expression(ma.receiver))
|
|
486
|
+
next resolve_enum_member_const_value(receiver_type, ma.member)
|
|
487
|
+
end
|
|
488
|
+
nil
|
|
489
|
+
}, resolve_call: lambda { |inner_call|
|
|
490
|
+
evaluate_compile_time_call(inner_call, scopes:)
|
|
491
|
+
})
|
|
492
|
+
return nil unless val
|
|
493
|
+
values << val
|
|
494
|
+
end
|
|
495
|
+
return values
|
|
496
|
+
end
|
|
475
497
|
func = @ctx.top_level_functions[callee_name]
|
|
476
498
|
if func&.ast&.respond_to?(:const) && func.ast.const
|
|
477
499
|
evaluate_const_function_body(func, expression.arguments, scopes:, type_args: expression.callee.arguments)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mt-lang
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.34
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Long (Teefan) Tran
|
|
@@ -624,7 +624,7 @@ metadata:
|
|
|
624
624
|
homepage_uri: https://teefan.github.io/mt-lang/
|
|
625
625
|
source_code_uri: https://github.com/teefan/mt-lang
|
|
626
626
|
post_install_message: |
|
|
627
|
-
Milk Tea 0.3.
|
|
627
|
+
Milk Tea 0.3.34 installed!
|
|
628
628
|
|
|
629
629
|
System requirements:
|
|
630
630
|
- A C compiler (gcc or clang) must be available on PATH
|