| ... | ... | @@ -849,10 +849,25 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE |
| 849 | 849 | return rvalue(gz, ri, result, node); |
| 850 | 850 | }, |
| 851 | 851 | .slice => { |
| 852 | const extra = tree.extraData(node_datas[node].rhs, Ast.Node.Slice); |
| 853 | const lhs_node = node_datas[node].lhs; |
| 854 | if (node_tags[lhs_node] == .slice_open and nodeIsTriviallyZero(tree, extra.start)) { |
| 855 | const lhs = try expr(gz, scope, .{ .rl = .ref }, node_datas[lhs_node].lhs); |
| 856 | const start = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, node_datas[lhs_node].rhs); |
| 857 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 858 | const len = if (extra.end != 0) try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, extra.end) else .none; |
| 859 | try emitDbgStmt(gz, cursor); |
| 860 | const result = try gz.addPlNode(.slice_length, node, Zir.Inst.SliceLength{ |
| 861 | .lhs = lhs, |
| 862 | .start = start, |
| 863 | .len = len, |
| 864 | .start_src_node_offset = gz.nodeIndexToRelative(lhs_node), |
| 865 | }); |
| 866 | return rvalue(gz, ri, result, node); |
| 867 | } |
| 852 | 868 | const lhs = try expr(gz, scope, .{ .rl = .ref }, node_datas[node].lhs); |
| 853 | 869 | |
| 854 | 870 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 855 | | const extra = tree.extraData(node_datas[node].rhs, Ast.Node.Slice); |
| 856 | 871 | const start = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, extra.start); |
| 857 | 872 | const end = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, extra.end); |
| 858 | 873 | try emitDbgStmt(gz, cursor); |