@@ -138,7 +138,7 @@ comptime {
138
138
}
139
139
140
140
/// Helper function to get a region by node index, handling the type conversion
141
- fn getRegionAt (store : * const NodeStore , node_idx : Node.Idx ) Region {
141
+ pub fn getRegionAt (store : * const NodeStore , node_idx : Node.Idx ) Region {
142
142
const idx : Region.Idx = @enumFromInt (@intFromEnum (node_idx ));
143
143
return store .regions .get (idx ).* ;
144
144
}
@@ -731,14 +731,12 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
731
731
.pattern_identifier = > return CIR.Pattern {
732
732
.assign = .{
733
733
.ident = @bitCast (node .data_1 ),
734
- .region = store .getRegionAt (node_idx ),
735
734
},
736
735
},
737
736
.pattern_as = > return CIR.Pattern {
738
737
.as = .{
739
738
.ident = @bitCast (node .data_1 ),
740
739
.pattern = @enumFromInt (node .data_2 ),
741
- .region = store .getRegionAt (node_idx ),
742
740
},
743
741
},
744
742
.pattern_applied_tag = > {
@@ -752,7 +750,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
752
750
753
751
return CIR.Pattern {
754
752
.applied_tag = .{
755
- .region = store .getRegionAt (node_idx ),
756
753
.arguments = DataSpan .init (arguments_start , arguments_len ).as (CIR .Pattern .Span ),
757
754
.tag_name = tag_name ,
758
755
.ext_var = ext_var ,
@@ -770,7 +767,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
770
767
771
768
return CIR.Pattern {
772
769
.record_destructure = .{
773
- .region = store .getRegionAt (node_idx ),
774
770
.destructs = DataSpan .init (destructs_start , destructs_len ).as (CIR .Pattern .RecordDestruct .Span ),
775
771
.ext_var = ext_var ,
776
772
.whole_var = whole_var ,
@@ -803,7 +799,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
803
799
804
800
return CIR.Pattern {
805
801
.list = .{
806
- .region = store .getRegionAt (node_idx ),
807
802
.patterns = DataSpan .init (patterns_start , patterns_len ).as (CIR .Pattern .Span ),
808
803
.elem_var = elem_var ,
809
804
.list_var = list_var ,
@@ -813,7 +808,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
813
808
},
814
809
.pattern_tuple = > return CIR.Pattern {
815
810
.tuple = .{
816
- .region = store .getRegionAt (node_idx ),
817
811
.patterns = DataSpan .init (node .data_1 , node .data_2 ).as (CIR .Pattern .Span ),
818
812
},
819
813
},
@@ -824,7 +818,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
824
818
825
819
return CIR.Pattern {
826
820
.int_literal = .{
827
- .region = store .getRegionAt (node_idx ),
828
821
.value = .{ .bytes = @bitCast (value_as_i128 ), .kind = .i128 },
829
822
},
830
823
};
@@ -836,7 +829,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
836
829
837
830
return CIR.Pattern {
838
831
.int_literal = .{
839
- .region = store .getRegionAt (node_idx ),
840
832
.value = .{ .bytes = @bitCast (value_as_i128 ), .kind = .i128 },
841
833
},
842
834
};
@@ -848,7 +840,6 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
848
840
849
841
return CIR.Pattern {
850
842
.dec_literal = .{
851
- .region = store .getRegionAt (node_idx ),
852
843
.value = RocDec { .num = value_as_i128 },
853
844
},
854
845
};
@@ -862,14 +853,12 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
862
853
863
854
return CIR.Pattern {
864
855
.small_dec_literal = .{
865
- .region = store .getRegionAt (node_idx ),
866
856
.numerator = numerator ,
867
857
.denominator_power_of_ten = denominator_power_of_ten ,
868
858
},
869
859
};
870
860
},
871
861
.pattern_str_literal = > return CIR.Pattern { .str_literal = .{
872
- .region = store .getRegionAt (node_idx ),
873
862
.literal = @enumFromInt (node .data_1 ),
874
863
} },
875
864
.pattern_char_literal = > {
@@ -883,20 +872,16 @@ pub fn getPattern(store: *const NodeStore, pattern_idx: CIR.Pattern.Idx) CIR.Pat
883
872
884
873
return CIR.Pattern {
885
874
.char_literal = .{
886
- .region = store .getRegionAt (node_idx ),
887
875
.num_var = num_var ,
888
876
.requirements = .{ .sign_needed = sign_needed , .bits_needed = bits_needed },
889
877
.value = value ,
890
878
},
891
879
};
892
880
},
893
- .pattern_underscore = > return CIR.Pattern { .underscore = .{
894
- .region = store .getRegionAt (node_idx ),
895
- } },
881
+ .pattern_underscore = > return CIR.Pattern { .underscore = .{} },
896
882
.malformed = > {
897
883
return CIR.Pattern { .runtime_error = .{
898
884
.diagnostic = @enumFromInt (node .data_1 ),
899
- .region = store .getRegionAt (node_idx ),
900
885
} };
901
886
},
902
887
else = > {
@@ -1472,7 +1457,7 @@ pub fn addRecordField(store: *NodeStore, recordField: CIR.RecordField) CIR.Recor
1472
1457
}
1473
1458
1474
1459
/// Adds a record destructuring to the store.
1475
- pub fn addRecordDestruct (store : * NodeStore , record_destruct : CIR.Pattern.RecordDestruct ) CIR.Pattern.RecordDestruct.Idx {
1460
+ pub fn addRecordDestruct (store : * NodeStore , record_destruct : CIR.Pattern.RecordDestruct , region : base.Region ) CIR.Pattern.RecordDestruct.Idx {
1476
1461
var node = Node {
1477
1462
.data_1 = @bitCast (record_destruct .label ),
1478
1463
.data_2 = @bitCast (record_destruct .ident ),
@@ -1498,7 +1483,7 @@ pub fn addRecordDestruct(store: *NodeStore, record_destruct: CIR.Pattern.RecordD
1498
1483
}
1499
1484
1500
1485
const nid = store .nodes .append (store .gpa , node );
1501
- _ = store .regions .append (store .gpa , record_destruct . region );
1486
+ _ = store .regions .append (store .gpa , region );
1502
1487
return @enumFromInt (@intFromEnum (nid ));
1503
1488
}
1504
1489
@@ -1593,30 +1578,26 @@ pub fn addWhereClause(store: *NodeStore, whereClause: CIR.WhereClause) CIR.Where
1593
1578
}
1594
1579
1595
1580
/// Adds a pattern to the store.
1596
- pub fn addPattern (store : * NodeStore , pattern : CIR.Pattern ) std.mem.Allocator.Error ! CIR.Pattern.Idx {
1581
+ pub fn addPattern (store : * NodeStore , pattern : CIR.Pattern , region : base.Region ) std.mem.Allocator.Error ! CIR.Pattern.Idx {
1597
1582
var node = Node {
1598
1583
.data_1 = 0 ,
1599
1584
.data_2 = 0 ,
1600
1585
.data_3 = 0 ,
1601
1586
.tag = @enumFromInt (0 ),
1602
1587
};
1603
- var region = base .Region .zero ();
1604
1588
1605
1589
switch (pattern ) {
1606
1590
.assign = > | p | {
1607
1591
node .data_1 = @bitCast (p .ident );
1608
1592
node .tag = .pattern_identifier ;
1609
- region = p .region ;
1610
1593
},
1611
1594
.as = > | p | {
1612
1595
node .tag = .pattern_as ;
1613
- region = p .region ;
1614
1596
node .data_1 = @bitCast (p .ident );
1615
1597
node .data_2 = @intFromEnum (p .pattern );
1616
1598
},
1617
1599
.applied_tag = > | p | {
1618
1600
node .tag = .pattern_applied_tag ;
1619
- region = p .region ;
1620
1601
1621
1602
// Store applied tag data in extra_data
1622
1603
const extra_data_start = @as (u32 , @intCast (store .extra_data .items .len ));
@@ -1628,7 +1609,6 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1628
1609
},
1629
1610
.record_destructure = > | p | {
1630
1611
node .tag = .pattern_record_destructure ;
1631
- region = p .region ;
1632
1612
1633
1613
// Store record destructure data in extra_data
1634
1614
const extra_data_start = @as (u32 , @intCast (store .extra_data .items .len ));
@@ -1640,7 +1620,6 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1640
1620
},
1641
1621
.list = > | p | {
1642
1622
node .tag = .pattern_list ;
1643
- region = p .region ;
1644
1623
1645
1624
// Store list pattern data in extra_data
1646
1625
const extra_data_start = @as (u32 , @intCast (store .extra_data .items .len ));
@@ -1667,13 +1646,11 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1667
1646
},
1668
1647
.tuple = > | p | {
1669
1648
node .tag = .pattern_tuple ;
1670
- region = p .region ;
1671
1649
node .data_1 = p .patterns .span .start ;
1672
1650
node .data_2 = p .patterns .span .len ;
1673
1651
},
1674
1652
.int_literal = > | p | {
1675
1653
node .tag = .pattern_int_literal ;
1676
- region = p .region ;
1677
1654
// Store the value in extra_data
1678
1655
const extra_data_start = store .extra_data .items .len ;
1679
1656
const value_as_u32s : [4 ]u32 = @bitCast (p .value .bytes );
@@ -1684,7 +1661,6 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1684
1661
},
1685
1662
.small_dec_literal = > | p | {
1686
1663
node .tag = .pattern_small_dec_literal ;
1687
- region = p .region ;
1688
1664
// Pack small dec data into data_1 and data_3
1689
1665
// data_1: numerator (i16) - fits in lower 16 bits
1690
1666
// data_3: denominator_power_of_ten (u8) in lower 8 bits
@@ -1693,7 +1669,6 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1693
1669
},
1694
1670
.dec_literal = > | p | {
1695
1671
node .tag = .pattern_dec_literal ;
1696
- region = p .region ;
1697
1672
// Store the RocDec value in extra_data
1698
1673
const extra_data_start = store .extra_data .items .len ;
1699
1674
const value_as_u32s : [4 ]u32 = @bitCast (p .value .num );
@@ -1704,12 +1679,10 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1704
1679
},
1705
1680
.str_literal = > | p | {
1706
1681
node .tag = .pattern_str_literal ;
1707
- region = p .region ;
1708
1682
node .data_1 = @intFromEnum (p .literal );
1709
1683
},
1710
1684
.char_literal = > | p | {
1711
1685
node .tag = .pattern_char_literal ;
1712
- region = p .region ;
1713
1686
1714
1687
// Store char literal data in extra_data
1715
1688
const extra_data_start = @as (u32 , @intCast (store .extra_data .items .len ));
@@ -1719,13 +1692,11 @@ pub fn addPattern(store: *NodeStore, pattern: CIR.Pattern) std.mem.Allocator.Err
1719
1692
try store .extra_data .append (store .gpa , @intFromEnum (p .requirements .bits_needed ));
1720
1693
node .data_1 = extra_data_start ;
1721
1694
},
1722
- .underscore = > | p | {
1695
+ .underscore = > | _ | {
1723
1696
node .tag = .pattern_underscore ;
1724
- region = p .region ;
1725
1697
},
1726
1698
.runtime_error = > | e | {
1727
1699
node .tag = .malformed ;
1728
- region = e .region ;
1729
1700
node .data_1 = @intFromEnum (e .diagnostic );
1730
1701
},
1731
1702
}
@@ -1978,7 +1949,6 @@ pub fn getRecordDestruct(store: *const NodeStore, idx: CIR.Pattern.RecordDestruc
1978
1949
return CIR.Pattern.RecordDestruct {
1979
1950
.label = @bitCast (node .data_1 ),
1980
1951
.ident = @bitCast (node .data_2 ),
1981
- .region = store .getRegionAt (node_idx ),
1982
1952
.kind = kind ,
1983
1953
};
1984
1954
}
0 commit comments