authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-04-30 19:20:03+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-09-01 18:30:31+01:00
log3b52e5a2217baca92f0328c0f9134e982bf15698
tree49e55842093f5ca9b63d5077692e9d5a81e130af
parent0cc8435a830d9d3850add163be4f12e5bd4f2f5c
signaturelock-open Commit is signed but in an unrecognized format.

std.zig.render: fix switch rendering


3 files changed, 29 insertions(+), 38 deletions(-)

lib/std/zig/Ast.zig+3-2
...@@ -1896,11 +1896,12 @@ pub fn switchFull(tree: Ast, node: Node.Index) full.Switch {...@@ -1896,11 +1896,12 @@ pub fn switchFull(tree: Ast, node: Node.Index) full.Switch {
1896 .keyword_switch => .{ main_token, null },1896 .keyword_switch => .{ main_token, null },
1897 else => unreachable,1897 else => unreachable,
1898 };1898 };
1899 const extra = tree.extraData(data.rhs, Ast.Node.SubRange);
1899 return .{1900 return .{
1900 .ast = .{1901 .ast = .{
1901 .switch_token = switch_token,1902 .switch_token = switch_token,
1902 .condition = data.lhs,1903 .condition = data.lhs,
1903 .sub_range = data.rhs,1904 .cases = tree.extra_data[extra.start..extra.end],
1904 },1905 },
1905 .label_token = label_token,1906 .label_token = label_token,
1906 };1907 };
...@@ -2869,7 +2870,7 @@ pub const full = struct {...@@ -2869,7 +2870,7 @@ pub const full = struct {
2869 pub const Components = struct {2870 pub const Components = struct {
2870 switch_token: TokenIndex,2871 switch_token: TokenIndex,
2871 condition: Node.Index,2872 condition: Node.Index,
2872 sub_range: Node.Index,2873 cases: []const Node.Index,
2873 };2874 };
2874 };2875 };
28752876
lib/std/zig/AstGen.zig+2-3
...@@ -7598,9 +7598,8 @@ fn switchExpr(...@@ -7598,9 +7598,8 @@ fn switchExpr(
7598 const node_tags = tree.nodes.items(.tag);7598 const node_tags = tree.nodes.items(.tag);
7599 const main_tokens = tree.nodes.items(.main_token);7599 const main_tokens = tree.nodes.items(.main_token);
7600 const token_tags = tree.tokens.items(.tag);7600 const token_tags = tree.tokens.items(.tag);
7601 const operand_node = node_datas[node].lhs;7601 const operand_node = switch_full.ast.condition;
7602 const extra = tree.extraData(node_datas[node].rhs, Ast.Node.SubRange);7602 const case_nodes = switch_full.ast.cases;
7603 const case_nodes = tree.extra_data[extra.start..extra.end];
76047603
7605 const need_rl = astgen.nodes_need_rl.contains(node);7604 const need_rl = astgen.nodes_need_rl.contains(node);
7606 const block_ri: ResultInfo = if (need_rl) ri else .{7605 const block_ri: ResultInfo = if (need_rl) ri else .{
lib/std/zig/render.zig+24-33
...@@ -693,39 +693,27 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {...@@ -693,39 +693,27 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
693 return renderToken(r, datas[node].rhs, space);693 return renderToken(r, datas[node].rhs, space);
694 },694 },
695695
696 .@"break" => {696 .@"break", .@"continue" => {
697 const main_token = main_tokens[node];697 const main_token = main_tokens[node];
698 const label_token = datas[node].lhs;698 const label_token = datas[node].lhs;
699 const target = datas[node].rhs;699 const target = datas[node].rhs;
700 if (label_token == 0 and target == 0) {700 if (label_token == 0 and target == 0) {
701 try renderToken(r, main_token, space); // break keyword701 try renderToken(r, main_token, space); // break/continue
702 } else if (label_token == 0 and target != 0) {702 } else if (label_token == 0 and target != 0) {
703 try renderToken(r, main_token, .space); // break keyword703 try renderToken(r, main_token, .space); // break/continue
704 try renderExpression(r, target, space);704 try renderExpression(r, target, space);
705 } else if (label_token != 0 and target == 0) {705 } else if (label_token != 0 and target == 0) {
706 try renderToken(r, main_token, .space); // break keyword706 try renderToken(r, main_token, .space); // break/continue
707 try renderToken(r, label_token - 1, .none); // colon707 try renderToken(r, label_token - 1, .none); // :
708 try renderIdentifier(r, label_token, space, .eagerly_unquote); // identifier708 try renderIdentifier(r, label_token, space, .eagerly_unquote); // identifier
709 } else if (label_token != 0 and target != 0) {709 } else if (label_token != 0 and target != 0) {
710 try renderToken(r, main_token, .space); // break keyword710 try renderToken(r, main_token, .space); // break/continue
711 try renderToken(r, label_token - 1, .none); // colon711 try renderToken(r, label_token - 1, .none); // :
712 try renderIdentifier(r, label_token, .space, .eagerly_unquote); // identifier712 try renderIdentifier(r, label_token, .space, .eagerly_unquote); // identifier
713 try renderExpression(r, target, space);713 try renderExpression(r, target, space);
714 }714 }
715 },715 },
716716
717 .@"continue" => {
718 const main_token = main_tokens[node];
719 const label = datas[node].lhs;
720 if (label != 0) {
721 try renderToken(r, main_token, .space); // continue
722 try renderToken(r, label - 1, .none); // :
723 return renderIdentifier(r, label, space, .eagerly_unquote); // label
724 } else {
725 return renderToken(r, main_token, space); // continue
726 }
727 },
728
729 .@"return" => {717 .@"return" => {
730 if (datas[node].lhs != 0) {718 if (datas[node].lhs != 0) {
731 try renderToken(r, main_tokens[node], .space);719 try renderToken(r, main_tokens[node], .space);
...@@ -845,26 +833,29 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {...@@ -845,26 +833,29 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
845 .@"switch",833 .@"switch",
846 .switch_comma,834 .switch_comma,
847 => {835 => {
848 const switch_token = main_tokens[node];836 const full = tree.switchFull(node);
849 const condition = datas[node].lhs;
850 const extra = tree.extraData(datas[node].rhs, Ast.Node.SubRange);
851 const cases = tree.extra_data[extra.start..extra.end];
852 const rparen = tree.lastToken(condition) + 1;
853837
854 try renderToken(r, switch_token, .space); // switch keyword838 if (full.label_token) |label_token| {
855 try renderToken(r, switch_token + 1, .none); // lparen839 try renderIdentifier(r, label_token, .none, .eagerly_unquote); // label
856 try renderExpression(r, condition, .none); // condition expression840 try renderToken(r, label_token + 1, .space); // :
857 try renderToken(r, rparen, .space); // rparen841 }
842
843 const rparen = tree.lastToken(full.ast.condition) + 1;
844
845 try renderToken(r, full.ast.switch_token, .space); // switch
846 try renderToken(r, full.ast.switch_token + 1, .none); // (
847 try renderExpression(r, full.ast.condition, .none); // condition expression
848 try renderToken(r, rparen, .space); // )
858849
859 ais.pushIndentNextLine();850 ais.pushIndentNextLine();
860 if (cases.len == 0) {851 if (full.ast.cases.len == 0) {
861 try renderToken(r, rparen + 1, .none); // lbrace852 try renderToken(r, rparen + 1, .none); // {
862 } else {853 } else {
863 try renderToken(r, rparen + 1, .newline); // lbrace854 try renderToken(r, rparen + 1, .newline); // {
864 try renderExpressions(r, cases, .comma);855 try renderExpressions(r, full.ast.cases, .comma);
865 }856 }
866 ais.popIndent();857 ais.popIndent();
867 return renderToken(r, tree.lastToken(node), space); // rbrace858 return renderToken(r, tree.lastToken(node), space); // }
868 },859 },
869860
870 .switch_case_one,861 .switch_case_one,