Module Name: src Committed By: rillig Date: Mon May 15 22:35:41 UTC 2023
Modified Files: src/usr.bin/indent: indent.c io.c Log Message: indent: fix cast detection In process_lparen_or_lbracket, ps.paren[...].maybe_cast was not initialized, which may have been the cause for seemingly random spacing around binary operators. While here, clean up the code by reducing the number of accesses to the parser state. To generate a diff of this commit: cvs rdiff -u -r1.284 -r1.285 src/usr.bin/indent/indent.c cvs rdiff -u -r1.170 -r1.171 src/usr.bin/indent/io.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/indent/indent.c diff -u src/usr.bin/indent/indent.c:1.284 src/usr.bin/indent/indent.c:1.285 --- src/usr.bin/indent/indent.c:1.284 Mon May 15 21:51:45 2023 +++ src/usr.bin/indent/indent.c Mon May 15 22:35:41 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.c,v 1.284 2023/05/15 21:51:45 rillig Exp $ */ +/* $NetBSD: indent.c,v 1.285 2023/05/15 22:35:41 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: indent.c,v 1.284 2023/05/15 21:51:45 rillig Exp $"); +__RCSID("$NetBSD: indent.c,v 1.285 2023/05/15 22:35:41 rillig Exp $"); #include <sys/param.h> #include <err.h> @@ -442,9 +442,8 @@ process_lparen_or_lbracket(void) ps.want_blank = false; buf_add_char(&code, token.st[0]); - ps.paren[ps.nparen - 1].indent = (short)ind_add(0, code.st, code.len); - debug_println("paren_indents[%d] is now %d", - ps.nparen - 1, ps.paren[ps.nparen - 1].indent); + int indent = ind_add(0, code.st, code.len); + bool no_cast = false; if (opt.extra_expr_indent && !opt.lineup_to_parens && ps.spaced_expr_psym != psym_0 && ps.nparen == 1 @@ -452,10 +451,8 @@ process_lparen_or_lbracket(void) ps.extra_expr_indent = eei_yes; if (opt.extra_expr_indent && ps.spaced_expr_psym != psym_0 - && ps.nparen == 1 && ps.paren[0].indent < 2 * opt.indent_size) { - ps.paren[0].indent = (short)(2 * opt.indent_size); - debug_println("paren_indents[0] is now %d", ps.paren[0].indent); - } + && ps.nparen == 1 && indent < 2 * opt.indent_size) + indent = 2 * opt.indent_size; if (ps.init_or_struct && *token.st == '(' && ps.tos <= 2) { /* @@ -467,9 +464,14 @@ process_lparen_or_lbracket(void) } if (ps.prev_token == lsym_offsetof || ps.prev_token == lsym_sizeof - || ps.prev_token == lsym_word || ps.is_function_definition) - ps.paren[ps.nparen - 1].no_cast = true; + no_cast = true; + + ps.paren[ps.nparen - 1].indent = (short)indent; + ps.paren[ps.nparen - 1].maybe_cast = false; + ps.paren[ps.nparen - 1].no_cast = no_cast; + debug_println("paren_indents[%d] is now %s%d", + ps.nparen - 1, no_cast ? "(no cast)" : "", indent); } static void @@ -477,23 +479,20 @@ process_rparen_or_rbracket(void) { if (ps.nparen == 0) { diag(0, "Extra '%c'", *token.st); - goto unbalanced; /* TODO: better exit immediately */ + goto unbalanced; } - if (ps.nparen > 0 && ps.decl_on_line && !ps.block_init) - ps.paren[ps.nparen - 1].no_cast = true; + bool maybe_cast = ps.paren[ps.nparen - 1].maybe_cast; + bool no_cast = ps.paren[ps.nparen - 1].no_cast; + if (ps.decl_on_line && !ps.block_init) + no_cast = true; + ps.nparen--; - if (ps.paren[ps.nparen - 1].maybe_cast && - !ps.paren[ps.nparen - 1].no_cast) { + if (maybe_cast && !no_cast) { ps.next_unary = true; - ps.paren[ps.nparen - 1].maybe_cast = false; ps.want_blank = opt.space_after_cast; } else ps.want_blank = true; - ps.paren[ps.nparen - 1].no_cast = false; - - if (ps.nparen > 0) - ps.nparen--; if (code.len == 0) /* if the paren starts the line */ ps.line_start_nparen = ps.nparen; /* then indent it */ Index: src/usr.bin/indent/io.c diff -u src/usr.bin/indent/io.c:1.170 src/usr.bin/indent/io.c:1.171 --- src/usr.bin/indent/io.c:1.170 Mon May 15 13:37:16 2023 +++ src/usr.bin/indent/io.c Mon May 15 22:35:41 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: io.c,v 1.170 2023/05/15 13:37:16 rillig Exp $ */ +/* $NetBSD: io.c,v 1.171 2023/05/15 22:35:41 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: io.c,v 1.170 2023/05/15 13:37:16 rillig Exp $"); +__RCSID("$NetBSD: io.c,v 1.171 2023/05/15 22:35:41 rillig Exp $"); #include <stdio.h> #include <string.h> @@ -177,8 +177,8 @@ output_line_code(int ind) int target_ind = compute_code_indent(); for (int i = 0; i < ps.nparen; i++) { - if (ps.paren[i].indent >= 0) { - int paren_ind = ps.paren[i].indent; + int paren_ind = ps.paren[i].indent; + if (paren_ind >= 0) { ps.paren[i].indent = (short)(-1 - (paren_ind + target_ind)); debug_println( "setting paren_indents[%d] from %d to %d for column %d",