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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d03b5daec92d1aeea437f63bd934696f684e524e76985470d416f0bea8d61002
4
- data.tar.gz: f83f7c79a70a575e0827819865c75955be0c4c03bb6761570afc4bb0df1a75ff
3
+ metadata.gz: 8d0786ef5ca9025e069a44b7ea3915199110e1f2397d294ed81122a308c79e2e
4
+ data.tar.gz: 42e3fa0077192377fa7da61cea865fd04e8ef49d66343c71a1bd5e2e1caa8b59
5
5
  SHA512:
6
- metadata.gz: 7f30fbf67b0723afe3b16c14706b817c7b8adea64a0064cb2b7ecb0ff7935efab149a60eb84ced949bc7e6c5da922338d884ee20f1023a2f86ee78b47d2ee8c9
7
- data.tar.gz: 4d879d9b77dce83a2900f04669c1d858f91c84d6cf101adedfce327b4a18be886f68425429e9dd630c00286d6f1ef53a2e97834ddcbaa30a79726cbe2c66193a
6
+ metadata.gz: fd4a874279ff48b7d0f1de8baf092e92e01ede8a4c969133855c9dd9c9f061490c11ff29dfc24905466fe1df56d1d53a86a5c156ce1cbe5efeed60d78f5a21e8
7
+ data.tar.gz: 30bb123ddb1939f7694c62dae186152b8f592d78826e7b4aa416c6a010202d07bda5474b72014114d8064b7168ff02b6b7dd252a8b7d007d9b9bcae8b31b4786
data/lib/milk_tea/base.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require "pathname"
4
4
 
5
5
  module MilkTea
6
- VERSION = "0.3.33"
6
+ VERSION = "0.3.34"
7
7
 
8
8
  def self.root
9
9
  @root ||= Pathname.new(File.expand_path("../..", __dir__))
@@ -321,7 +321,25 @@ module MilkTea
321
321
  return literal
322
322
  end
323
323
 
324
- lower_expression(rewrite_static_storage_initializer(expression), env:, expected_type: expected_type)
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.33
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.33 installed!
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