| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: indent.c,v 1.376 2023/06/16 14:12:10 rillig Exp $ */ | | 1 | /* $NetBSD: indent.c,v 1.377 2023/06/16 14:26:26 rillig Exp $ */ |
2 | | | 2 | |
3 | /*- | | 3 | /*- |
4 | * SPDX-License-Identifier: BSD-4-Clause | | 4 | * SPDX-License-Identifier: BSD-4-Clause |
5 | * | | 5 | * |
6 | * Copyright (c) 1985 Sun Microsystems, Inc. | | 6 | * Copyright (c) 1985 Sun Microsystems, Inc. |
7 | * Copyright (c) 1976 Board of Trustees of the University of Illinois. | | 7 | * Copyright (c) 1976 Board of Trustees of the University of Illinois. |
8 | * Copyright (c) 1980, 1993 | | 8 | * Copyright (c) 1980, 1993 |
9 | * The Regents of the University of California. All rights reserved. | | 9 | * The Regents of the University of California. All rights reserved. |
10 | * | | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | | 11 | * Redistribution and use in source and binary forms, with or without |
12 | * modification, are permitted provided that the following conditions | | 12 | * modification, are permitted provided that the following conditions |
13 | * are met: | | 13 | * are met: |
14 | * 1. Redistributions of source code must retain the above copyright | | 14 | * 1. Redistributions of source code must retain the above copyright |
| @@ -28,27 +28,27 @@ | | | @@ -28,27 +28,27 @@ |
28 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | 28 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
29 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | 29 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
30 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | | 30 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
31 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | 31 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
32 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | | 32 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
33 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 33 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
34 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 34 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
35 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 35 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
36 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 36 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
37 | * SUCH DAMAGE. | | 37 | * SUCH DAMAGE. |
38 | */ | | 38 | */ |
39 | | | 39 | |
40 | #include <sys/cdefs.h> | | 40 | #include <sys/cdefs.h> |
41 | __RCSID("$NetBSD: indent.c,v 1.376 2023/06/16 14:12:10 rillig Exp $"); | | 41 | __RCSID("$NetBSD: indent.c,v 1.377 2023/06/16 14:26:26 rillig Exp $"); |
42 | | | 42 | |
43 | #include <sys/param.h> | | 43 | #include <sys/param.h> |
44 | #include <err.h> | | 44 | #include <err.h> |
45 | #include <stdarg.h> | | 45 | #include <stdarg.h> |
46 | #include <stdio.h> | | 46 | #include <stdio.h> |
47 | #include <stdlib.h> | | 47 | #include <stdlib.h> |
48 | #include <string.h> | | 48 | #include <string.h> |
49 | | | 49 | |
50 | #include "indent.h" | | 50 | #include "indent.h" |
51 | | | 51 | |
52 | struct options opt = { | | 52 | struct options opt = { |
53 | .brace_same_line = true, | | 53 | .brace_same_line = true, |
54 | .comment_delimiter_on_blank_line = true, | | 54 | .comment_delimiter_on_blank_line = true, |
| @@ -612,31 +612,33 @@ process_lparen(void) | | | @@ -612,31 +612,33 @@ process_lparen(void) |
612 | || ps.prev_lsym == lsym_switch | | 612 | || ps.prev_lsym == lsym_switch |
613 | || ps.prev_lsym == lsym_while | | 613 | || ps.prev_lsym == lsym_while |
614 | || ps.line_has_func_def) | | 614 | || ps.line_has_func_def) |
615 | cast = cast_no; | | 615 | cast = cast_no; |
616 | | | 616 | |
617 | paren_stack_push(&ps.paren, ind_add(0, code.s, code.len), cast); | | 617 | paren_stack_push(&ps.paren, ind_add(0, code.s, code.len), cast); |
618 | } | | 618 | } |
619 | | | 619 | |
620 | static bool | | 620 | static bool |
621 | rparen_is_cast(bool paren_cast) | | 621 | rparen_is_cast(bool paren_cast) |
622 | { | | 622 | { |
623 | if (ps.in_func_def_params) | | 623 | if (ps.in_func_def_params) |
624 | return false; | | 624 | return false; |
| | | 625 | if (ps.line_has_decl && !ps.in_init) |
| | | 626 | return false; |
625 | if (ps.prev_lsym == lsym_unary_op) | | 627 | if (ps.prev_lsym == lsym_unary_op) |
626 | return true; | | 628 | return true; |
627 | if (ps.line_has_decl && !ps.in_init) | | 629 | if (ps.spaced_expr_psym != psym_0 && ps.paren.len == 0) |
628 | return false; | | 630 | return false; |
629 | return paren_cast || ch_isalpha(inp_p[0]); | | 631 | return paren_cast || ch_isalpha(inp_p[0]) || inp_p[0] == '{'; |
630 | } | | 632 | } |
631 | | | 633 | |
632 | static void | | 634 | static void |
633 | process_rparen(void) | | 635 | process_rparen(void) |
634 | { | | 636 | { |
635 | if (ps.paren.len == 0) | | 637 | if (ps.paren.len == 0) |
636 | diag(0, "Extra '%c'", *token.s); | | 638 | diag(0, "Extra '%c'", *token.s); |
637 | | | 639 | |
638 | bool paren_cast = ps.paren.len > 0 | | 640 | bool paren_cast = ps.paren.len > 0 |
639 | && ps.paren.item[--ps.paren.len].cast == cast_maybe; | | 641 | && ps.paren.item[--ps.paren.len].cast == cast_maybe; |
640 | ps.prev_paren_was_cast = rparen_is_cast(paren_cast); | | 642 | ps.prev_paren_was_cast = rparen_is_cast(paren_cast); |
641 | if (ps.prev_paren_was_cast) { | | 643 | if (ps.prev_paren_was_cast) { |
642 | ps.next_unary = true; | | 644 | ps.next_unary = true; |