Module Name: src Committed By: rillig Date: Thu Jun 15 09:19:07 UTC 2023
Modified Files: src/tests/usr.bin/indent: fmt_decl.c lsym_case_label.c lsym_funcname.c lsym_lbrace.c lsym_rparen_or_rbracket.c lsym_semicolon.c lsym_tag.c lsym_type_outside_parentheses.c opt_bacc.c opt_eei.c ps_ind_level.c src/usr.bin/indent: args.c indent.c io.c Log Message: indent: miscellaneous cleanups, more tests for edge cases To generate a diff of this commit: cvs rdiff -u -r1.56 -r1.57 src/tests/usr.bin/indent/fmt_decl.c cvs rdiff -u -r1.10 -r1.11 src/tests/usr.bin/indent/lsym_case_label.c cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/indent/lsym_funcname.c cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/indent/lsym_lbrace.c \ src/tests/usr.bin/indent/ps_ind_level.c cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c \ src/tests/usr.bin/indent/lsym_semicolon.c cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/indent/lsym_tag.c cvs rdiff -u -r1.6 -r1.7 \ src/tests/usr.bin/indent/lsym_type_outside_parentheses.c cvs rdiff -u -r1.12 -r1.13 src/tests/usr.bin/indent/opt_bacc.c cvs rdiff -u -r1.14 -r1.15 src/tests/usr.bin/indent/opt_eei.c cvs rdiff -u -r1.84 -r1.85 src/usr.bin/indent/args.c cvs rdiff -u -r1.368 -r1.369 src/usr.bin/indent/indent.c cvs rdiff -u -r1.221 -r1.222 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/tests/usr.bin/indent/fmt_decl.c diff -u src/tests/usr.bin/indent/fmt_decl.c:1.56 src/tests/usr.bin/indent/fmt_decl.c:1.57 --- src/tests/usr.bin/indent/fmt_decl.c:1.56 Thu Jun 15 08:40:20 2023 +++ src/tests/usr.bin/indent/fmt_decl.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: fmt_decl.c,v 1.56 2023/06/15 08:40:20 rillig Exp $ */ +/* $NetBSD: fmt_decl.c,v 1.57 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for declarations of global variables, external functions, and local @@ -1183,3 +1183,20 @@ multi_line = (int[]){ }; } //indent end + + +/* + * + */ +//indent input +int +old_style(a) + struct { + int member; + } a; +{ + stmt; +} +//indent end + +//indent run-equals-input Index: src/tests/usr.bin/indent/lsym_case_label.c diff -u src/tests/usr.bin/indent/lsym_case_label.c:1.10 src/tests/usr.bin/indent/lsym_case_label.c:1.11 --- src/tests/usr.bin/indent/lsym_case_label.c:1.10 Sat Jun 10 07:05:18 2023 +++ src/tests/usr.bin/indent/lsym_case_label.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_case_label.c,v 1.10 2023/06/10 07:05:18 rillig Exp $ */ +/* $NetBSD: lsym_case_label.c,v 1.11 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the tokens lsym_case and lsym_default, which represent the @@ -103,3 +103,23 @@ const char *type_name = _Generic( //indent end //indent run-equals-input -di0 -nlp + + +/* + * Multi-line case expressions are rare but still should be processed in a + * sensible way. + */ +//indent input +{ + switch (expr) { +// $ FIXME: The line containing the 'case' must be indented like a 'case'. + case 1 + + 2 +// $ FIXME: This continuation line must be indented by 4 columns. + + 3: + stmt; + } +} +//indent end + +//indent run-equals-input -ci4 Index: src/tests/usr.bin/indent/lsym_funcname.c diff -u src/tests/usr.bin/indent/lsym_funcname.c:1.5 src/tests/usr.bin/indent/lsym_funcname.c:1.6 --- src/tests/usr.bin/indent/lsym_funcname.c:1.5 Mon May 22 23:01:27 2023 +++ src/tests/usr.bin/indent/lsym_funcname.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_funcname.c,v 1.5 2023/05/22 23:01:27 rillig Exp $ */ +/* $NetBSD: lsym_funcname.c,v 1.6 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the token lsym_funcname, which is the name of a function, but only @@ -19,3 +19,17 @@ function(void) //indent end //indent run-equals-input + + +/* + * The comment after the return type of a function definition is a code + * comment, not a declaration comment. + */ +//indent input +void // comment +function_with_comment(void) +{ +} +//indent end + +//indent run-equals-input Index: src/tests/usr.bin/indent/lsym_lbrace.c diff -u src/tests/usr.bin/indent/lsym_lbrace.c:1.8 src/tests/usr.bin/indent/lsym_lbrace.c:1.9 --- src/tests/usr.bin/indent/lsym_lbrace.c:1.8 Sun Jun 4 13:49:00 2023 +++ src/tests/usr.bin/indent/lsym_lbrace.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_lbrace.c,v 1.8 2023/06/04 13:49:00 rillig Exp $ */ +/* $NetBSD: lsym_lbrace.c,v 1.9 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the token lsym_lbrace, which represents a '{' in these contexts: @@ -58,8 +58,88 @@ origin(void) return (struct point){ .x = 0, .y = 0, - }; + }, actual_return_value; } //indent end //indent run-equals-input + +/* Ensure that the comma is not interpreted as separator for declarators. */ +//indent run-equals-input -bc + + +//indent input +{ + const char *hello = (const char[]){ + 'h', 'e', 'l', 'l', 'o', + }, *world = (const char[]){ + 'w', 'o', 'r', 'l', 'd', + }; +} +//indent end + +//indent run-equals-input -ldi0 + +//indent run-equals-input -ldi0 -bc + + +//indent input +{ + if (cond rparen { + } + switch (expr rparen { + } +} +//indent end + +//indent run +{ + if (cond rparen { + } + switch (expr rparen { + } +} +exit 1 +error: Standard Input:2: Unbalanced parentheses +error: Standard Input:4: Unbalanced parentheses +//indent end + + +/* + * The -bl option does not force initializer braces on separate lines. + */ +//indent input +struct {int member;} var = {1}; +//indent end + +//indent run -bl +struct +{ + int member; +} var = {1}; +//indent end + + +/* + * A comment in a single-line function definition is not a declaration comment + * and thus not in column 25. + */ +//indent input +void function(void); /* comment */ +void function(void) { /* comment */ } +//indent end + +//indent run -di0 +void function(void); /* comment */ +void +function(void) +{ /* comment */ +} +//indent end + +//indent run -di0 -nfbs +void function(void); /* comment */ +void +function(void) { /* comment */ +} +//indent end Index: src/tests/usr.bin/indent/ps_ind_level.c diff -u src/tests/usr.bin/indent/ps_ind_level.c:1.8 src/tests/usr.bin/indent/ps_ind_level.c:1.9 --- src/tests/usr.bin/indent/ps_ind_level.c:1.8 Wed Jun 14 20:46:08 2023 +++ src/tests/usr.bin/indent/ps_ind_level.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ps_ind_level.c,v 1.8 2023/06/14 20:46:08 rillig Exp $ */ +/* $NetBSD: ps_ind_level.c,v 1.9 2023/06/15 09:19:07 rillig Exp $ */ /* * The indentation of the very first line of a file determines the @@ -116,3 +116,18 @@ int level_0; } } //indent end + + +/* + * Having function definitions indented to the right is not supported. In that + * case, indent does not recognize it as a function definition, and it doesn't + * indent the old-style parameter declarations one level further to the right. + */ +//indent input + int old_style(a) + int a; + { + } +//indent end + +//indent run-equals-input Index: src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c diff -u src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c:1.4 src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c:1.5 --- src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c:1.4 Sun Apr 24 10:36:37 2022 +++ src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_rparen_or_rbracket.c,v 1.4 2022/04/24 10:36:37 rillig Exp $ */ +/* $NetBSD: lsym_rparen_or_rbracket.c,v 1.5 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the token lsym_rparen_or_lbracket, which represents ')' or ']', @@ -18,3 +18,39 @@ int array[3] = {[2] = 3}; //indent end //indent run-equals-input -di0 + + +//indent input +int a = array[ +3 +]; +{ +int a = array[ +3 +]; +} +//indent end + +//indent run -di0 +int a = array[ + 3 +]; +{ + int a = array[ + 3 +// $ FIXME: Should be one level to the left since it is the outermost bracket. + ]; +} +//indent end + +//indent run -di0 -nlp +int a = array[ + 3 +]; +{ + int a = array[ + 3 +// $ FIXME: Should be one level to the left since it is the outermost bracket. + ]; +} +//indent end Index: src/tests/usr.bin/indent/lsym_semicolon.c diff -u src/tests/usr.bin/indent/lsym_semicolon.c:1.4 src/tests/usr.bin/indent/lsym_semicolon.c:1.5 --- src/tests/usr.bin/indent/lsym_semicolon.c:1.4 Sun Apr 24 10:36:37 2022 +++ src/tests/usr.bin/indent/lsym_semicolon.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_semicolon.c,v 1.4 2022/04/24 10:36:37 rillig Exp $ */ +/* $NetBSD: lsym_semicolon.c,v 1.5 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the token lsym_semicolon, which represents ';' in these contexts: @@ -41,3 +41,66 @@ function(void) stmt(); } //indent end + + +//indent input +{ + switch (expr) { +// $ FIXME: Indent the 'case' at the 'switch'. + case; + stmt; + case 2: + stmt; + } +} +//indent end + +//indent run-equals-input + + +/* + * A semicolon closes all possibly open '?:' expressions, so that the next ':' + * is interpreted as a bit-field. + */ +//indent input +struct s { + int a[len ? ? ? 1]; + int bit_field:1; +}; +//indent end + +//indent run-equals-input -di0 + + +/* + * A semicolon does not magically close any initializer braces that may still + * be open. + */ +//indent input +int a = {{; +int b = 3; +//indent end + +//indent run -di0 +int a = {{; + int b = 3; +exit 1 +error: Standard Input:2: Stuff missing from end of file +//indent end + + +//indent input +{ + int a = {{; + int b = 3; +} +//indent end + +//indent run -di0 +{ + int a = {{; + int b = 3; + } +exit 1 +error: Standard Input:4: Stuff missing from end of file +//indent end Index: src/tests/usr.bin/indent/lsym_tag.c diff -u src/tests/usr.bin/indent/lsym_tag.c:1.7 src/tests/usr.bin/indent/lsym_tag.c:1.8 --- src/tests/usr.bin/indent/lsym_tag.c:1.7 Mon May 15 14:12:03 2023 +++ src/tests/usr.bin/indent/lsym_tag.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_tag.c,v 1.7 2023/05/15 14:12:03 rillig Exp $ */ +/* $NetBSD: lsym_tag.c,v 1.8 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the token lsym_tag, which represents one of the keywords @@ -134,3 +134,20 @@ struct outer { //indent end //indent run-equals-input -di0 + + +/* + * The initializer of an enum constant needs to be indented like any other + * initializer, especially the continuation lines. + */ +//indent input +enum multi_line { + constant = 1 +// $ TODO: Indent the continuation line. + + 2 +// $ TODO: Indent the continuation line. + + 3, +}; +//indent end + +//indent run-equals-input Index: src/tests/usr.bin/indent/lsym_type_outside_parentheses.c diff -u src/tests/usr.bin/indent/lsym_type_outside_parentheses.c:1.6 src/tests/usr.bin/indent/lsym_type_outside_parentheses.c:1.7 --- src/tests/usr.bin/indent/lsym_type_outside_parentheses.c:1.6 Sun Jun 4 22:20:04 2023 +++ src/tests/usr.bin/indent/lsym_type_outside_parentheses.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_type_outside_parentheses.c,v 1.6 2023/06/04 22:20:04 rillig Exp $ */ +/* $NetBSD: lsym_type_outside_parentheses.c,v 1.7 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the token lsym_type_outside_parentheses, which represents a type @@ -45,3 +45,13 @@ size_t hello; size_t hello; } //indent end + + +/* + * In a sizeof expression, a type argument must be enclosed in parentheses. + */ +//indent input +int sizeof_int = sizeof int; +//indent end + +//indent run-equals-input -di0 Index: src/tests/usr.bin/indent/opt_bacc.c diff -u src/tests/usr.bin/indent/opt_bacc.c:1.12 src/tests/usr.bin/indent/opt_bacc.c:1.13 --- src/tests/usr.bin/indent/opt_bacc.c:1.12 Sat May 20 10:09:03 2023 +++ src/tests/usr.bin/indent/opt_bacc.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: opt_bacc.c,v 1.12 2023/05/20 10:09:03 rillig Exp $ */ +/* $NetBSD: opt_bacc.c,v 1.13 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the options '-bacc' and '-nbacc' ("blank line around conditional @@ -128,3 +128,33 @@ int outer_below; //indent end //indent run-equals-input -di0 -nbacc + + +//indent input +/* before */ +#if 0 +/* between if and else */ +#else +#if 1 +#endif +#endif +/* after */ +//indent end + +//indent run -bacc +/* before */ +// $ XXX: The 'before' comment may refer to the '#if', so it is not obvious +// $ XXX: that this blank line is useful. + +#if 0 +/* between if and else */ +#else +// $ XXX: This blank line looks unintended, as both lines are preprocessing +// $ XXX: directives. + +#if 1 +#endif +#endif + +/* after */ +//indent end Index: src/tests/usr.bin/indent/opt_eei.c diff -u src/tests/usr.bin/indent/opt_eei.c:1.14 src/tests/usr.bin/indent/opt_eei.c:1.15 --- src/tests/usr.bin/indent/opt_eei.c:1.14 Fri Jun 9 08:10:58 2023 +++ src/tests/usr.bin/indent/opt_eei.c Thu Jun 15 09:19:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: opt_eei.c,v 1.14 2023/06/09 08:10:58 rillig Exp $ */ +/* $NetBSD: opt_eei.c,v 1.15 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the options '-eei' and '-neei'. @@ -211,9 +211,6 @@ b) //indent end -/* - * - */ //indent input { if ((( Index: src/usr.bin/indent/args.c diff -u src/usr.bin/indent/args.c:1.84 src/usr.bin/indent/args.c:1.85 --- src/usr.bin/indent/args.c:1.84 Wed Jun 14 21:35:01 2023 +++ src/usr.bin/indent/args.c Thu Jun 15 09:19:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: args.c,v 1.84 2023/06/14 21:35:01 rillig Exp $ */ +/* $NetBSD: args.c,v 1.85 2023/06/15 09:19:06 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: args.c,v 1.84 2023/06/14 21:35:01 rillig Exp $"); +__RCSID("$NetBSD: args.c,v 1.85 2023/06/15 09:19:06 rillig Exp $"); /* Read options from profile files and from the command line. */ @@ -68,9 +68,9 @@ __RCSID("$NetBSD: args.c,v 1.84 2023/06/ /* See set_special_option for special options. */ static const struct pro { const char p_name[5]; /* e.g. "bl", "cli" */ - bool p_is_bool; - bool p_may_negate; - bool p_bool_value; /* only relevant if !p_may_negate */ + bool p_is_bool:1; + bool p_may_negate:1; + bool p_bool_value:1; /* only relevant if !p_may_negate */ short i_min; short i_max; unsigned short opt_offset; /* the associated variable */ Index: src/usr.bin/indent/indent.c diff -u src/usr.bin/indent/indent.c:1.368 src/usr.bin/indent/indent.c:1.369 --- src/usr.bin/indent/indent.c:1.368 Thu Jun 15 08:40:20 2023 +++ src/usr.bin/indent/indent.c Thu Jun 15 09:19:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.c,v 1.368 2023/06/15 08:40:20 rillig Exp $ */ +/* $NetBSD: indent.c,v 1.369 2023/06/15 09:19:06 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: indent.c,v 1.368 2023/06/15 08:40:20 rillig Exp $"); +__RCSID("$NetBSD: indent.c,v 1.369 2023/06/15 09:19:06 rillig Exp $"); #include <sys/param.h> #include <err.h> @@ -728,10 +728,8 @@ process_lbrace(void) ps.decl_level--; } } else { - ps.line_has_decl = false; /* we can't be in the middle of - * a declaration, so don't do - * special indentation of - * comments */ + ps.line_has_decl = false; /* don't do special indentation + * of comments */ ps.in_func_def_params = false; ps.in_decl = false; } @@ -802,7 +800,6 @@ process_unary_op(void) if (is_function_pointer_declaration()) { int ind = ps.decl_ind - (int)token.len; indent_declarator(ind, ps.tabs_to_var); - ps.want_blank = false; } else if ((token.s[0] == '+' || token.s[0] == '-') && code.len > 0 && code.s[code.len - 1] == token.s[0]) ps.want_blank = true; @@ -826,8 +823,8 @@ process_comma(void) ps.want_blank = code.len > 0; /* only put blank after comma if comma * does not start the line */ - if (ps.in_decl && !ps.line_has_func_def && !ps.in_init && - !ps.decl_indent_done && ps.ind_paren_level == 0) { + if (ps.in_decl && ps.ind_paren_level == 0 + && !ps.line_has_func_def && !ps.in_init && !ps.decl_indent_done) { /* indent leading commas and not the actual identifiers */ indent_declarator(ps.decl_ind - 1, ps.tabs_to_var); } @@ -893,9 +890,6 @@ process_semicolon(void) * aren't anymore */ if (ps.paren.len > 0 && ps.spaced_expr_psym != psym_for_exprs) { - /* There were unbalanced parentheses in the statement. It is a - * bit complicated, because the semicolon might be in a for - * statement. */ diag(1, "Unbalanced parentheses"); ps.paren.len = 0; if (ps.spaced_expr_psym != psym_0) { @@ -929,16 +923,19 @@ process_type_outside_parentheses(void) } ps.in_var_decl = /* maybe */ true; - ps.in_decl = ps.line_has_decl = ps.prev_lsym != lsym_typedef; - if (ps.decl_level <= 0) + ps.in_decl = ps.prev_lsym != lsym_typedef; + ps.line_has_decl = ps.in_decl; + if (ps.decl_level == 0) ps.declaration = decl_begin; - int len = (code.len > 0 ? ind_add(0, code.s, code.len) + 1 : 0) - + (int)token.len + 1; int ind = ps.ind_level > 0 && ps.decl_level == 0 ? opt.local_decl_indent /* local variable */ : opt.decl_indent; /* global variable, or member */ - ps.decl_ind = ind > 0 ? ind : len; + if (ind == 0) { + int ind0 = code.len > 0 ? ind_add(0, code.s, code.len) + 1 : 0; + ps.decl_ind = ind_add(ind0, token.s, token.len) + 1; + } else + ps.decl_ind = ind; ps.tabs_to_var = opt.use_tabs && ind > 0; } @@ -960,15 +957,14 @@ process_word(lexer_symbol lsym) && code.len > 0 && code.s[code.len - 1] == '}') ps.decl_ind = ind_add(0, code.s, code.len) + 1; indent_declarator(ps.decl_ind, ps.tabs_to_var); - ps.want_blank = false; } } else if (ps.spaced_expr_psym != psym_0 && ps.paren.len == 0) { + parse(ps.spaced_expr_psym); + ps.spaced_expr_psym = psym_0; ps.want_newline = true; ps.in_stmt_or_decl = false; ps.next_unary = true; - parse(ps.spaced_expr_psym); - ps.spaced_expr_psym = psym_0; } } @@ -981,21 +977,22 @@ process_do(void) if (code.len > 0) output_line(); - ps.want_newline = true; parse(psym_do); + ps.want_newline = true; } static void process_else(void) { ps.in_stmt_or_decl = false; + ps.in_decl = false; if (code.len > 0 && !(opt.cuddle_else && code.s[code.len - 1] == '}')) output_line(); - ps.want_newline = true; parse(psym_else); + ps.want_newline = true; } static void @@ -1079,15 +1076,15 @@ indent(void) if (lsym == lsym_eof) return process_eof(); - if (lsym == lsym_if && ps.prev_lsym == lsym_else - && opt.else_if_in_same_line) - ps.want_newline = false; - if (lsym == lsym_preprocessing || lsym == lsym_newline) ps.want_newline = false; else if (lsym == lsym_comment) { /* no special processing */ } else { + if (lsym == lsym_if && ps.prev_lsym == lsym_else + && opt.else_if_in_same_line) + ps.want_newline = false; + if (ps.want_newline && should_break_line(lsym)) { ps.want_newline = false; output_line(); Index: src/usr.bin/indent/io.c diff -u src/usr.bin/indent/io.c:1.221 src/usr.bin/indent/io.c:1.222 --- src/usr.bin/indent/io.c:1.221 Wed Jun 14 16:14:30 2023 +++ src/usr.bin/indent/io.c Thu Jun 15 09:19:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: io.c,v 1.221 2023/06/14 16:14:30 rillig Exp $ */ +/* $NetBSD: io.c,v 1.222 2023/06/15 09:19:06 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: io.c,v 1.221 2023/06/14 16:14:30 rillig Exp $"); +__RCSID("$NetBSD: io.c,v 1.222 2023/06/15 09:19:06 rillig Exp $"); #include <stdio.h> @@ -59,12 +59,12 @@ static int paren_indent; static void -inp_read_next_line(FILE *f) +inp_read_next_line(void) { buf_clear(&inp); for (;;) { - int ch = getc(f); + int ch = getc(input); if (ch == EOF) { if (indent_enabled == indent_on) { buf_add_char(&inp, ' '); @@ -89,7 +89,7 @@ inp_read_line(void) if (indent_enabled == indent_on) buf_clear(&out.indent_off_text); buf_add_chars(&out.indent_off_text, inp.s, inp.len); - inp_read_next_line(input); + inp_read_next_line(); } void @@ -208,6 +208,7 @@ compute_case_label_indent(void) while (i > 0 && ps.psyms.sym[i] != psym_switch_expr) i--; float case_ind = (float)ps.psyms.ind_level[i] + opt.case_indent; + // TODO: case_ind may become negative here. return (int)(case_ind * (float)opt.indent_size); } @@ -218,6 +219,7 @@ compute_label_indent(void) return compute_case_label_indent(); if (lab.s[0] == '#') return 0; + // TODO: the indentation may become negative here. return opt.indent_size * (ps.ind_level - 2); } @@ -235,7 +237,7 @@ compute_lined_up_code_indent(int base_in int overflow = ind_add(ind, code.s, code.len) - opt.max_line_length; if (overflow >= 0 && ind_add(base_ind, code.s, code.len) < opt.max_line_length) { - ind -= overflow + 2; + ind -= 2 + overflow; if (ind < base_ind) ind = base_ind; }