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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/milk_tea/base.rb +1 -1
  3. data/lib/milk_tea/core/c_backend/expressions.rb +6 -1
  4. data/lib/milk_tea/core/c_backend/feature_detection.rb +27 -55
  5. data/lib/milk_tea/core/c_backend/format_helpers.rb +551 -0
  6. data/lib/milk_tea/core/c_backend/runtime_helpers.rb +0 -542
  7. data/lib/milk_tea/core/c_backend/statements.rb +4 -0
  8. data/lib/milk_tea/core/c_backend/type_collectors.rb +51 -204
  9. data/lib/milk_tea/core/c_backend.rb +10 -0
  10. data/lib/milk_tea/core/compatibility_helpers.rb +1 -1
  11. data/lib/milk_tea/core/compile_time.rb +19 -1
  12. data/lib/milk_tea/core/ir.rb +3 -1
  13. data/lib/milk_tea/core/lowering/async/lowering.rb +147 -141
  14. data/lib/milk_tea/core/lowering/block.rb +761 -726
  15. data/lib/milk_tea/core/lowering/declarations.rb +2 -1
  16. data/lib/milk_tea/core/lowering/expressions.rb +94 -0
  17. data/lib/milk_tea/core/lowering/loops.rb +49 -0
  18. data/lib/milk_tea/core/lowering/resolve.rb +222 -215
  19. data/lib/milk_tea/core/lowering/utils.rb +0 -222
  20. data/lib/milk_tea/core/module_loader.rb +29 -48
  21. data/lib/milk_tea/core/parser/declarations.rb +2 -2
  22. data/lib/milk_tea/core/parser/recovery.rb +1 -1
  23. data/lib/milk_tea/core/parser.rb +1 -1
  24. data/lib/milk_tea/core/semantic_analyzer/expressions.rb +3 -120
  25. data/lib/milk_tea/core/semantic_analyzer/foreign_functions.rb +116 -113
  26. data/lib/milk_tea/core/semantic_analyzer/generics.rb +346 -343
  27. data/lib/milk_tea/core/semantic_analyzer/statements.rb +37 -12
  28. data/lib/milk_tea/core/semantic_analyzer/top_level.rb +23 -0
  29. data/lib/milk_tea/core/types/predicates.rb +501 -499
  30. data/lib/milk_tea/core/types/visitor.rb +1 -1
  31. data/lib/milk_tea/tooling/error_formatter.rb +18 -14
  32. data/std/mem/ptr.mt +9 -0
  33. metadata +3 -2
@@ -158,7 +158,7 @@ module MilkTea
158
158
  end
159
159
 
160
160
  class StoredRefSupportedVisitor < TypeVisitor
161
- include TypePredicates
161
+ include Types::Predicates
162
162
 
163
163
  def initialize(allow_lifetimes: [])
164
164
  super()
@@ -16,19 +16,11 @@ module MilkTea
16
16
  severity = error.respond_to?(:severity) ? error.severity : :error
17
17
  code = error.respond_to?(:code) ? error.code : nil
18
18
 
19
- source ||= read_source(path)
20
- return "#{severity_label(severity)}: #{error_message} at #{path}:#{line}:#{column}" unless source
21
-
22
- source_lines = source.split("\n", -1)
23
- source_line = source_lines[line - 1] || ""
24
- stripped = source_line.gsub(/\t/, " ")
19
+ # Strip location suffix from message (errors embed "at path:line:col" in message text)
20
+ location_suffix = " at #{path}:#{line}:#{column}"
21
+ error_message = error_message.delete_suffix(location_suffix).strip
25
22
 
26
- indent = " " * [column - 1, 0].max
27
- highlight = if length && length > 1
28
- "^" + "~" * (length - 1)
29
- else
30
- "^"
31
- end
23
+ source ||= read_source(path)
32
24
 
33
25
  bold = color ? "\e[1m" : ""
34
26
  red = color ? "\e[31m" : ""
@@ -46,9 +38,21 @@ module MilkTea
46
38
 
47
39
  code_text = code ? "#{cyan}[#{code}]#{reset}" : ""
48
40
 
41
+ return "#{sev_color}#{sev_text}#{code_text}#{reset}: #{error_message} -- #{path}:#{line}:#{column}" unless source
42
+
43
+ source_lines = source.split("\n", -1)
44
+ source_line = source_lines[line - 1] || ""
45
+ stripped = source_line.gsub(/\t/, " ")
46
+
47
+ indent = " " * [column - 1, 0].max
48
+ highlight = if length && length > 1
49
+ "^" + "~" * (length - 1)
50
+ else
51
+ "^"
52
+ end
53
+
49
54
  [
50
- "#{bold}#{sev_color}#{sev_text}#{code_text}#{reset}: #{error_message}",
51
- " #{bold}-->#{reset} #{path}:#{line}:#{column}",
55
+ "#{sev_color}#{sev_text}#{code_text}#{reset}: #{error_message} -- #{path}:#{line}:#{column}",
52
56
  " #{bold}|#{reset}",
53
57
  "#{line.to_s.rjust(5)} #{bold}|#{reset} #{stripped}",
54
58
  " #{bold}|#{reset} #{sev_color}#{indent}#{highlight}#{reset}",
data/std/mem/ptr.mt CHANGED
@@ -10,3 +10,12 @@ extending ptr[T]:
10
10
 
11
11
  public function store(value: T) -> void:
12
12
  unsafe: read(this) = value
13
+
14
+ public function load_at(offset: ptr_uint) -> T:
15
+ return unsafe: read(this + offset)
16
+
17
+ public function store_at(offset: ptr_uint, value: T) -> void:
18
+ unsafe: read(this + offset) = value
19
+
20
+ public function cast[U]() -> ptr[U]:
21
+ return unsafe: ptr[U]<-this
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
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Long (Teefan) Tran
@@ -195,6 +195,7 @@ files:
195
195
  - lib/milk_tea/core/c_backend/control_flow_emission.rb
196
196
  - lib/milk_tea/core/c_backend/expressions.rb
197
197
  - lib/milk_tea/core/c_backend/feature_detection.rb
198
+ - lib/milk_tea/core/c_backend/format_helpers.rb
198
199
  - lib/milk_tea/core/c_backend/reachability.rb
199
200
  - lib/milk_tea/core/c_backend/reinterpret.rb
200
201
  - lib/milk_tea/core/c_backend/runtime_helpers.rb
@@ -601,7 +602,7 @@ metadata:
601
602
  homepage_uri: https://teefan.github.io/mt-lang/
602
603
  source_code_uri: https://github.com/teefan/mt-lang
603
604
  post_install_message: |
604
- Milk Tea 0.3.4 installed!
605
+ Milk Tea 0.3.6 installed!
605
606
 
606
607
  System requirements:
607
608
  - A C compiler (gcc or clang) must be available on PATH