| ... | ... | @@ -734,7 +734,7 @@ pub const Node = struct { |
| 734 | 734 | var i = index; |
| 735 | 735 | |
| 736 | 736 | if (self.doc_comments) |comments| { |
| 737 | | if (i < 1) return *comments.base; |
| 737 | if (i < 1) return &comments.base; |
| 738 | 738 | i -= 1; |
| 739 | 739 | } |
| 740 | 740 | |
| ... | ... | @@ -1243,7 +1243,7 @@ pub const Node = struct { |
| 1243 | 1243 | i -= 1; |
| 1244 | 1244 | |
| 1245 | 1245 | if (self.@"else") |@"else"| { |
| 1246 | | if (i < 1) return *@"else".base; |
| 1246 | if (i < 1) return &@"else".base; |
| 1247 | 1247 | i -= 1; |
| 1248 | 1248 | } |
| 1249 | 1249 | |
| ... | ... | @@ -1296,7 +1296,7 @@ pub const Node = struct { |
| 1296 | 1296 | i -= 1; |
| 1297 | 1297 | |
| 1298 | 1298 | if (self.@"else") |@"else"| { |
| 1299 | | if (i < 1) return *@"else".base; |
| 1299 | if (i < 1) return &@"else".base; |
| 1300 | 1300 | i -= 1; |
| 1301 | 1301 | } |
| 1302 | 1302 | |
| ... | ... | @@ -1347,7 +1347,7 @@ pub const Node = struct { |
| 1347 | 1347 | i -= 1; |
| 1348 | 1348 | |
| 1349 | 1349 | if (self.@"else") |@"else"| { |
| 1350 | | if (i < 1) return *@"else".base; |
| 1350 | if (i < 1) return &@"else".base; |
| 1351 | 1351 | i -= 1; |
| 1352 | 1352 | } |
| 1353 | 1353 | |
| ... | ... | @@ -1536,22 +1536,27 @@ pub const Node = struct { |
| 1536 | 1536 | var i = index; |
| 1537 | 1537 | |
| 1538 | 1538 | switch (self.op) { |
| 1539 | // TODO https://github.com/ziglang/zig/issues/1107 |
| 1539 | 1540 | Op.SliceType => |addr_of_info| { |
| 1540 | 1541 | if (addr_of_info.align_info) |align_info| { |
| 1541 | 1542 | if (i < 1) return align_info.node; |
| 1542 | 1543 | i -= 1; |
| 1543 | 1544 | } |
| 1544 | 1545 | }, |
| 1545 | | Op.AddrOf => |addr_of_info| { |
| 1546 | |
| 1547 | Op.PtrType => |addr_of_info| { |
| 1546 | 1548 | if (addr_of_info.align_info) |align_info| { |
| 1547 | 1549 | if (i < 1) return align_info.node; |
| 1548 | 1550 | i -= 1; |
| 1549 | 1551 | } |
| 1550 | 1552 | }, |
| 1553 | |
| 1551 | 1554 | Op.ArrayType => |size_expr| { |
| 1552 | 1555 | if (i < 1) return size_expr; |
| 1553 | 1556 | i -= 1; |
| 1554 | 1557 | }, |
| 1558 | |
| 1559 | Op.AddressOf, |
| 1555 | 1560 | Op.Await, |
| 1556 | 1561 | Op.BitNot, |
| 1557 | 1562 | Op.BoolNot, |
| ... | ... | @@ -1561,8 +1566,6 @@ pub const Node = struct { |
| 1561 | 1566 | Op.NegationWrap, |
| 1562 | 1567 | Op.Try, |
| 1563 | 1568 | Op.Resume, |
| 1564 | | Op.UnwrapOptional, |
| 1565 | | Op.PointerType, |
| 1566 | 1569 | => {}, |
| 1567 | 1570 | } |
| 1568 | 1571 | |
| ... | ... | @@ -1667,7 +1670,9 @@ pub const Node = struct { |
| 1667 | 1670 | if (i < fields.len) return fields.at(i).*; |
| 1668 | 1671 | i -= fields.len; |
| 1669 | 1672 | }, |
| 1670 | | Op.Deref => {}, |
| 1673 | Op.UnwrapOptional, |
| 1674 | Op.Deref, |
| 1675 | => {}, |
| 1671 | 1676 | } |
| 1672 | 1677 | |
| 1673 | 1678 | return null; |
| ... | ... | @@ -2022,7 +2027,7 @@ pub const Node = struct { |
| 2022 | 2027 | |
| 2023 | 2028 | switch (self.kind) { |
| 2024 | 2029 | Kind.Variable => |variable_name| { |
| 2025 | | if (i < 1) return *variable_name.base; |
| 2030 | if (i < 1) return &variable_name.base; |
| 2026 | 2031 | i -= 1; |
| 2027 | 2032 | }, |
| 2028 | 2033 | Kind.Return => |return_type| { |
| ... | ... | @@ -2092,10 +2097,10 @@ pub const Node = struct { |
| 2092 | 2097 | pub fn iterate(self: *Asm, index: usize) ?*Node { |
| 2093 | 2098 | var i = index; |
| 2094 | 2099 | |
| 2095 | | if (i < self.outputs.len) return *(self.outputs.at(index).*).base; |
| 2100 | if (i < self.outputs.len) return &self.outputs.at(index).*.base; |
| 2096 | 2101 | i -= self.outputs.len; |
| 2097 | 2102 | |
| 2098 | | if (i < self.inputs.len) return *(self.inputs.at(index).*).base; |
| 2103 | if (i < self.inputs.len) return &self.inputs.at(index).*.base; |
| 2099 | 2104 | i -= self.inputs.len; |
| 2100 | 2105 | |
| 2101 | 2106 | return null; |
| ... | ... | @@ -2205,3 +2210,14 @@ pub const Node = struct { |
| 2205 | 2210 | } |
| 2206 | 2211 | }; |
| 2207 | 2212 | }; |
| 2213 | |
| 2214 | test "iterate" { |
| 2215 | var root = Node.Root{ |
| 2216 | .base = Node{ .id = Node.Id.Root }, |
| 2217 | .doc_comments = null, |
| 2218 | .decls = Node.Root.DeclList.init(std.debug.global_allocator), |
| 2219 | .eof_token = 0, |
| 2220 | }; |
| 2221 | var base = &root.base; |
| 2222 | assert(base.iterate(0) == null); |
| 2223 | } |