indent: remove read pointer from buffers that don't need it

The only buffer that needs a read pointer is the current input line in
'inp'.

No functional change.
This commit is contained in:
rillig 2023-06-04 20:51:19 +00:00
parent 3d214a88cc
commit c6e9afe1fe
6 changed files with 165 additions and 166 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: debug.c,v 1.33 2023/06/04 17:54:11 rillig Exp $ */
/* $NetBSD: debug.c,v 1.34 2023/06/04 20:51:19 rillig Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: debug.c,v 1.33 2023/06/04 17:54:11 rillig Exp $");
__RCSID("$NetBSD: debug.c,v 1.34 2023/06/04 20:51:19 rillig Exp $");
#include <stdarg.h>
@ -196,7 +196,7 @@ debug_print_buf(const char *name, const struct buffer *buf)
{
if (buf->len > 0) {
debug_printf(" %s ", name);
debug_vis_range("\"", buf->st, buf->len, "\"");
debug_vis_range("\"", buf->s, buf->len, "\"");
}
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: indent.c,v 1.326 2023/06/04 17:54:11 rillig Exp $ */
/* $NetBSD: indent.c,v 1.327 2023/06/04 20:51:19 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: indent.c,v 1.326 2023/06/04 17:54:11 rillig Exp $");
__RCSID("$NetBSD: indent.c,v 1.327 2023/06/04 20:51:19 rillig Exp $");
#include <sys/param.h>
#include <err.h>
@ -110,8 +110,7 @@ static void
buf_expand(struct buffer *buf, size_t add_size)
{
buf->cap = buf->cap + add_size + 400;
buf->mem = nonnull(realloc(buf->mem, buf->cap));
buf->st = buf->mem;
buf->s = nonnull(realloc(buf->s, buf->cap));
}
void
@ -119,7 +118,7 @@ buf_add_char(struct buffer *buf, char ch)
{
if (buf->len == buf->cap)
buf_expand(buf, 1);
buf->mem[buf->len++] = ch;
buf->s[buf->len++] = ch;
}
void
@ -129,14 +128,14 @@ buf_add_chars(struct buffer *buf, const char *s, size_t len)
return;
if (len > buf->cap - buf->len)
buf_expand(buf, len);
memcpy(buf->mem + buf->len, s, len);
memcpy(buf->s + buf->len, s, len);
buf->len += len;
}
static void
buf_add_buf(struct buffer *buf, const struct buffer *add)
{
buf_add_chars(buf, add->st, add->len);
buf_add_chars(buf, add->s, add->len);
}
void
@ -301,7 +300,7 @@ set_initial_indentation(void)
inp_read_line();
int ind = 0;
for (const char *p = inp.st;; p++) {
for (const char *p = inp_p;; p++) {
if (*p == ' ')
ind++;
else if (*p == '\t')
@ -349,13 +348,13 @@ update_ps_decl_ptr(lexer_symbol lsym)
ps.decl_ptr = dp_other;
break;
case dp_word:
if (lsym == lsym_unary_op && token.st[0] == '*')
if (lsym == lsym_unary_op && token.s[0] == '*')
ps.decl_ptr = dp_word_asterisk;
else
ps.decl_ptr = dp_other;
break;
case dp_word_asterisk:
if (lsym == lsym_unary_op && token.st[0] == '*')
if (lsym == lsym_unary_op && token.s[0] == '*')
ps.decl_ptr = dp_word_asterisk;
else
ps.decl_ptr = dp_other;
@ -375,8 +374,8 @@ static void
update_ps_prev_tag(lexer_symbol lsym)
{
if (lsym == lsym_tag) {
ps.lbrace_kind = token.mem[0] == 's' ? psym_lbrace_struct :
token.mem[0] == 'u' ? psym_lbrace_union :
ps.lbrace_kind = token.s[0] == 's' ? psym_lbrace_struct :
token.s[0] == 'u' ? psym_lbrace_union :
psym_lbrace_enum;
} else if (lsym != lsym_type_outside_parentheses
&& lsym != lsym_word
@ -493,7 +492,7 @@ process_lparen(void)
} else if (want_blank_before_lparen())
buf_add_char(&code, ' ');
ps.want_blank = false;
buf_add_char(&code, token.st[0]);
buf_add_char(&code, token.s[0]);
if (opt.extra_expr_indent && !opt.lineup_to_parens
&& ps.spaced_expr_psym != psym_0 && ps.nparen == 1
@ -508,7 +507,7 @@ process_lparen(void)
ps.init_or_struct = false;
}
int indent = ind_add(0, code.st, code.len);
int indent = ind_add(0, code.s, code.len);
if (opt.extra_expr_indent && ps.spaced_expr_psym != psym_0
&& ps.nparen == 1 && indent < 2 * opt.indent_size)
indent = 2 * opt.indent_size;
@ -548,9 +547,9 @@ process_lbracket(void)
if (want_blank_before_lbracket())
buf_add_char(&code, ' ');
ps.want_blank = false;
buf_add_char(&code, token.st[0]);
buf_add_char(&code, token.s[0]);
int indent = ind_add(0, code.st, code.len);
int indent = ind_add(0, code.s, code.len);
ps.paren[ps.nparen - 1].indent = indent;
ps.paren[ps.nparen - 1].cast = cast_no;
@ -561,7 +560,7 @@ static void
process_rparen(void)
{
if (ps.nparen == 0) {
diag(0, "Extra '%c'", *token.st);
diag(0, "Extra '%c'", *token.s);
goto unbalanced;
}
@ -579,7 +578,7 @@ process_rparen(void)
ps.line_start_nparen = ps.nparen;
unbalanced:
buf_add_char(&code, token.st[0]);
buf_add_char(&code, token.s[0]);
if (ps.spaced_expr_psym != psym_0 && ps.nparen == 0) {
if (ps.extra_expr_indent == eei_yes)
@ -598,7 +597,7 @@ static void
process_rbracket(void)
{
if (ps.nparen == 0) {
diag(0, "Extra '%c'", *token.st);
diag(0, "Extra '%c'", *token.s);
goto unbalanced;
}
--ps.nparen;
@ -608,7 +607,7 @@ process_rbracket(void)
ps.line_start_nparen = ps.nparen;
unbalanced:
buf_add_char(&code, token.st[0]);
buf_add_char(&code, token.s[0]);
}
static bool
@ -616,8 +615,8 @@ want_blank_before_unary_op(void)
{
if (ps.want_blank)
return true;
if (token.st[0] == '+' || token.st[0] == '-')
return code.len > 0 && code.mem[code.len - 1] == token.st[0];
if (token.s[0] == '+' || token.s[0] == '-')
return code.len > 0 && code.s[code.len - 1] == token.s[0];
return false;
}
@ -771,7 +770,7 @@ process_lbrace(void)
if (code.len > 0 && !ps.block_init) {
if (!opt.brace_same_line ||
(code.len > 0 && code.mem[code.len - 1] == '}'))
(code.len > 0 && code.s[code.len - 1] == '}'))
output_line();
else if (ps.in_func_def_params && !ps.init_or_struct) {
ps.ind_level_follow = 0;
@ -886,7 +885,7 @@ process_else(void)
ps.in_stmt_or_decl = false;
if (code.len > 0
&& !(opt.cuddle_else && code.mem[code.len - 1] == '}')) {
&& !(opt.cuddle_else && code.s[code.len - 1] == '}')) {
if (opt.verbose)
diag(0, "Line broken");
output_line();
@ -940,9 +939,9 @@ process_ident(lexer_symbol lsym)
} else if (!ps.block_init && !ps.decl_indent_done &&
ps.line_start_nparen == 0) {
if (opt.decl_indent == 0
&& code.len > 0 && code.mem[code.len - 1] == '}')
&& code.len > 0 && code.s[code.len - 1] == '}')
ps.decl_ind =
ind_add(0, code.st, code.len) + 1;
ind_add(0, code.s, code.len) + 1;
code_add_decl_indent(ps.decl_ind, ps.tabs_to_var);
ps.decl_indent_done = true;
ps.want_blank = false;
@ -960,7 +959,7 @@ process_ident(lexer_symbol lsym)
static void
process_period(void)
{
if (code.len > 0 && code.mem[code.len - 1] == ',')
if (code.len > 0 && code.s[code.len - 1] == ',')
buf_add_char(&code, ' ');
buf_add_char(&code, '.');
ps.want_blank = false;
@ -986,7 +985,7 @@ process_comma(void)
ps.block_init = false;
int typical_varname_length = 8;
if (ps.break_after_comma && (opt.break_after_comma ||
ind_add(compute_code_indent(), code.st, code.len)
ind_add(compute_code_indent(), code.s, code.len)
>= opt.max_line_length - typical_varname_length))
ps.force_nl = true;
}
@ -1002,20 +1001,20 @@ read_preprocessing_line(void)
buf_add_char(&lab, '#');
while (ch_isblank(inp.st[0]))
buf_add_char(&lab, *inp.st++);
while (ch_isblank(inp_p[0]))
buf_add_char(&lab, *inp_p++);
while (inp.st[0] != '\n' || (state == COMM && !had_eof)) {
while (inp_p[0] != '\n' || (state == COMM && !had_eof)) {
buf_add_char(&lab, inp_next());
switch (lab.mem[lab.len - 1]) {
switch (lab.s[lab.len - 1]) {
case '\\':
if (state != COMM)
buf_add_char(&lab, inp_next());
break;
case '/':
if (inp.st[0] == '*' && state == PLAIN) {
if (inp_p[0] == '*' && state == PLAIN) {
state = COMM;
buf_add_char(&lab, *inp.st++);
buf_add_char(&lab, *inp_p++);
}
break;
case '"':
@ -1031,15 +1030,15 @@ read_preprocessing_line(void)
state = CHR;
break;
case '*':
if (inp.st[0] == '/' && state == COMM) {
if (inp_p[0] == '/' && state == COMM) {
state = PLAIN;
buf_add_char(&lab, *inp.st++);
buf_add_char(&lab, *inp_p++);
}
break;
}
}
while (lab.len > 0 && ch_isblank(lab.mem[lab.len - 1]))
while (lab.len > 0 && ch_isblank(lab.s[lab.len - 1]))
lab.len--;
}
@ -1051,8 +1050,8 @@ process_preprocessing(void)
read_preprocessing_line();
const char *end = lab.mem + lab.len;
const char *dir = lab.st + 1;
const char *end = lab.s + lab.len;
const char *dir = lab.s + 1;
while (dir < end && ch_isblank(*dir))
dir++;
size_t dir_len = 0;

View File

@ -1,4 +1,4 @@
/* $NetBSD: indent.h,v 1.170 2023/06/04 17:54:11 rillig Exp $ */
/* $NetBSD: indent.h,v 1.171 2023/06/04 20:51:19 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@ -139,9 +139,8 @@ typedef enum parser_symbol {
/* A range of characters, not null-terminated. */
struct buffer {
const char *st; /* start of the usable text */
char *mem;
size_t len; /* length of the usable text, from 'mem' */
char *s;
size_t len;
size_t cap;
};
@ -150,12 +149,13 @@ extern FILE *output;
/*
* The current line from the input file, used by the lexer to generate tokens.
* To read from the line, start at inp.st and continue up to and including the
* To read from the line, start at inp_p and continue up to and including the
* next '\n'. To read beyond the '\n', call inp_skip or inp_next, which will
* make the next line available, invalidating any pointers into the previous
* line.
*/
extern struct buffer inp;
extern const char *inp_p;
extern struct buffer token; /* the current token to be processed, is
* typically copied to the buffer 'code', or in

View File

@ -1,4 +1,4 @@
/* $NetBSD: io.c,v 1.192 2023/06/04 18:58:30 rillig Exp $ */
/* $NetBSD: io.c,v 1.193 2023/06/04 20:51:19 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@ -38,13 +38,14 @@
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: io.c,v 1.192 2023/06/04 18:58:30 rillig Exp $");
__RCSID("$NetBSD: io.c,v 1.193 2023/06/04 20:51:19 rillig Exp $");
#include <stdio.h>
#include "indent.h"
struct buffer inp;
const char *inp_p;
struct output_state out;
static unsigned wrote_newlines = 2; /* 0 in the middle of a line, 1 after a
* single '\n', > 1 means there were (n
@ -55,15 +56,15 @@ static int paren_indent;
void
inp_skip(void)
{
inp.st++;
if ((size_t)(inp.st - inp.mem) >= inp.len)
inp_p++;
if ((size_t)(inp_p - inp.s) >= inp.len)
inp_read_line();
}
char
inp_next(void)
{
char ch = inp.st[0];
char ch = inp_p[0];
inp_skip();
return ch;
}
@ -71,7 +72,6 @@ inp_next(void)
static void
inp_read_next_line(FILE *f)
{
inp.st = inp.mem;
inp.len = 0;
for (;;) {
@ -90,6 +90,7 @@ inp_read_next_line(FILE *f)
if (ch == '\n')
break;
}
inp_p = inp.s;
}
static void
@ -175,12 +176,12 @@ static int
output_line_label(void)
{
while (lab.len > 0 && ch_isblank(lab.mem[lab.len - 1]))
while (lab.len > 0 && ch_isblank(lab.s[lab.len - 1]))
lab.len--;
int ind = output_indent(0, compute_label_indent());
output_range(lab.st, lab.len);
return ind_add(ind, lab.st, lab.len);
output_range(lab.s, lab.len);
return ind_add(ind, lab.s, lab.len);
}
static int
@ -202,15 +203,15 @@ output_line_code(int ind)
int code_ind = output_indent(ind, target_ind);
if (ind > 0 && code_ind == ind)
output_range(" ", 1), code_ind++;
output_range(code.st, code.len);
return ind_add(code_ind, code.st, code.len);
output_range(code.s, code.len);
return ind_add(code_ind, code.s, code.len);
}
static void
output_line_comment(int ind)
{
int target_ind = ps.com_ind;
const char *p = com.st;
const char *p = com.s;
target_ind += ps.comment_delta;
@ -235,11 +236,11 @@ output_line_comment(int ind)
ind = 0;
}
while (com.mem + com.len > p && ch_isspace(com.mem[com.len - 1]))
while (com.s + com.len > p && ch_isspace(com.s[com.len - 1]))
com.len--;
(void)output_indent(ind, target_ind);
output_range(p, com.len - (size_t)(p - com.mem));
output_range(p, com.len - (size_t)(p - com.s));
ps.comment_delta = ps.n_comment_delta;
}
@ -296,7 +297,7 @@ output_line(void)
if (indent_enabled == indent_last_off_line) {
indent_enabled = indent_on;
output_range(out.indent_off_text.st, out.indent_off_text.len);
output_range(out.indent_off_text.s, out.indent_off_text.len);
out.indent_off_text.len = 0;
}
@ -329,11 +330,11 @@ static int
compute_code_indent_lineup(int base_ind)
{
int ind = paren_indent;
int overflow = ind_add(ind, code.st, code.len) - opt.max_line_length;
int overflow = ind_add(ind, code.s, code.len) - opt.max_line_length;
if (overflow < 0)
return ind;
if (ind_add(base_ind, code.st, code.len) < opt.max_line_length) {
if (ind_add(base_ind, code.s, code.len) < opt.max_line_length) {
ind -= overflow + 2;
if (ind > base_ind)
return ind;
@ -377,7 +378,7 @@ compute_label_indent(void)
{
if (out.line_kind == lk_case_or_default)
return (int)(case_ind * (float)opt.indent_size);
if (lab.st[0] == '#')
if (lab.s[0] == '#')
return 0;
return opt.indent_size * (ps.ind_level - 2);
}
@ -387,6 +388,6 @@ inp_read_line(void)
{
if (indent_enabled == indent_on)
out.indent_off_text.len = 0;
buf_add_chars(&out.indent_off_text, inp.mem, inp.len);
buf_add_chars(&out.indent_off_text, inp.s, inp.len);
inp_read_next_line(input);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: lexi.c,v 1.211 2023/06/04 14:20:00 rillig Exp $ */
/* $NetBSD: lexi.c,v 1.212 2023/06/04 20:51:19 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: lexi.c,v 1.211 2023/06/04 14:20:00 rillig Exp $");
__RCSID("$NetBSD: lexi.c,v 1.212 2023/06/04 20:51:19 rillig Exp $");
#include <stdlib.h>
#include <string.h>
@ -176,9 +176,9 @@ static void
lex_number(void)
{
for (unsigned char s = 'A'; s != 'f' && s != 'i' && s != 'u';) {
unsigned char ch = (unsigned char)inp.st[0];
if (ch == '\\' && inp.st[1] == '\n') {
inp.st++;
unsigned char ch = (unsigned char)inp_p[0];
if (ch == '\\' && inp_p[1] == '\n') {
inp_p++;
inp_skip();
line_no++;
continue;
@ -217,10 +217,10 @@ static void
lex_word(void)
{
for (;;) {
if (is_identifier_part(inp.st[0]))
token_add_char(*inp.st++);
else if (inp.st[0] == '\\' && inp.st[1] == '\n') {
inp.st++;
if (is_identifier_part(inp_p[0]))
token_add_char(*inp_p++);
else if (inp_p[0] == '\\' && inp_p[1] == '\n') {
inp_p++;
inp_skip();
line_no++;
} else
@ -231,18 +231,18 @@ lex_word(void)
static void
lex_char_or_string(void)
{
for (char delim = token.mem[token.len - 1];;) {
if (inp.st[0] == '\n') {
for (char delim = token.s[token.len - 1];;) {
if (inp_p[0] == '\n') {
diag(1, "Unterminated literal");
return;
}
token_add_char(*inp.st++);
if (token.mem[token.len - 1] == delim)
token_add_char(*inp_p++);
if (token.s[token.len - 1] == delim)
return;
if (token.mem[token.len - 1] == '\\') {
if (inp.st[0] == '\n')
if (token.s[token.len - 1] == '\\') {
if (inp_p[0] == '\n')
++line_no;
token_add_char(inp_next());
}
@ -259,10 +259,10 @@ probably_typename(void)
return false;
if (ps.in_stmt_or_decl) /* XXX: this condition looks incorrect */
return false;
if (inp.st[0] == '*' && inp.st[1] != '=')
if (inp_p[0] == '*' && inp_p[1] != '=')
goto maybe;
/* XXX: is_identifier_start */
if (ch_isalpha(inp.st[0]))
if (ch_isalpha(inp_p[0]))
goto maybe;
return false;
maybe:
@ -295,10 +295,10 @@ static bool
is_typename(void)
{
if (opt.auto_typedefs &&
token.len >= 2 && memcmp(token.mem + token.len - 2, "_t", 2) == 0)
token.len >= 2 && memcmp(token.s + token.len - 2, "_t", 2) == 0)
return true;
return bsearch_typenames(token.st) >= 0;
return bsearch_typenames(token.s) >= 0;
}
static int
@ -315,7 +315,7 @@ static bool
probably_looking_at_definition(void)
{
int paren_level = 0;
for (const char *p = inp.st; *p != '\n'; p++) {
for (const char *p = inp_p; *p != '\n'; p++) {
if (*p == '(')
paren_level++;
if (*p == ')' && --paren_level == 0) {
@ -353,15 +353,15 @@ probably_looking_at_definition(void)
static lexer_symbol
lexi_alnum(void)
{
if (ch_isdigit(inp.st[0]) ||
(inp.st[0] == '.' && ch_isdigit(inp.st[1]))) {
if (ch_isdigit(inp_p[0]) ||
(inp_p[0] == '.' && ch_isdigit(inp_p[1]))) {
lex_number();
} else if (is_identifier_start(inp.st[0])) {
} else if (is_identifier_start(inp_p[0])) {
lex_word();
if (token.len == 1 && token.st[0] == 'L' &&
(inp.st[0] == '"' || inp.st[0] == '\'')) {
token_add_char(*inp.st++);
if (token.len == 1 && token.s[0] == 'L' &&
(inp_p[0] == '"' || inp_p[0] == '\'')) {
token_add_char(*inp_p++);
lex_char_or_string();
ps.next_unary = false;
return lsym_word;
@ -369,8 +369,8 @@ lexi_alnum(void)
} else
return lsym_eof; /* just as a placeholder */
while (ch_isblank(inp.st[0]))
inp.st++;
while (ch_isblank(inp_p[0]))
inp_p++;
ps.next_unary = ps.prev_lsym == lsym_tag
|| ps.prev_lsym == lsym_typedef;
@ -380,7 +380,7 @@ lexi_alnum(void)
token_add_char('\0');
token.len--;
const struct keyword *kw = bsearch(token.st, keywords,
const struct keyword *kw = bsearch(token.s, keywords,
array_length(keywords), sizeof(keywords[0]), cmp_keyword_by_name);
lexer_symbol lsym = lsym_word;
if (kw != NULL) {
@ -411,7 +411,7 @@ found_typename:
}
}
if (inp.st[0] == '(' && ps.tos <= 1 && ps.ind_level == 0 &&
if (inp_p[0] == '(' && ps.tos <= 1 && ps.ind_level == 0 &&
!ps.in_func_def_params && !ps.block_init) {
if (ps.nparen == 0 && probably_looking_at_definition()) {
@ -446,7 +446,7 @@ is_asterisk_unary(void)
static bool
probably_in_function_definition(void)
{
for (const char *tp = inp.st; *tp != '\n';) {
for (const char *tp = inp_p; *tp != '\n';) {
if (ch_isspace(*tp))
tp++;
else if (is_identifier_start(*tp)) {
@ -462,8 +462,8 @@ probably_in_function_definition(void)
static void
lex_asterisk_unary(void)
{
while (inp.st[0] == '*' || ch_isspace(inp.st[0])) {
if (inp.st[0] == '*')
while (inp_p[0] == '*' || ch_isspace(inp_p[0])) {
if (inp_p[0] == '*')
token_add_char('*');
inp_skip();
}
@ -493,7 +493,7 @@ skip_string(const char **pp, const char *s)
static void
lex_indent_comment(void)
{
const char *p = inp.mem;
const char *p = inp.s;
skip_blank(&p);
if (!skip_string(&p, "/*"))
@ -530,11 +530,11 @@ lexi(void)
ps.next_col_1 = false;
for (;;) {
if (ch_isblank(inp.st[0])) {
if (ch_isblank(inp_p[0])) {
ps.curr_col_1 = false;
inp.st++;
} else if (inp.st[0] == '\\' && inp.st[1] == '\n') {
inp.st++;
inp_p++;
} else if (inp_p[0] == '\\' && inp_p[1] == '\n') {
inp_p++;
inp_skip();
line_no++;
} else
@ -552,7 +552,7 @@ lexi(void)
lexer_symbol lsym;
bool next_unary;
switch (token.mem[token.len - 1]) {
switch (token.s[token.len - 1]) {
/* INDENT OFF */
case '(': lsym = lsym_lparen; next_unary = true; break;
@ -601,8 +601,8 @@ lexi(void)
next_unary = true;
/* '++' or '--' */
if (inp.st[0] == token.mem[token.len - 1]) {
token_add_char(*inp.st++);
if (inp_p[0] == token.s[token.len - 1]) {
token_add_char(*inp_p++);
if (ps.prev_lsym == lsym_word ||
ps.prev_lsym == lsym_rparen ||
ps.prev_lsym == lsym_rbracket) {
@ -611,11 +611,11 @@ lexi(void)
next_unary = false;
}
} else if (inp.st[0] == '=') { /* '+=' or '-=' */
token_add_char(*inp.st++);
} else if (inp_p[0] == '=') { /* '+=' or '-=' */
token_add_char(*inp_p++);
} else if (inp.st[0] == '>') { /* '->' */
token_add_char(*inp.st++);
} else if (inp_p[0] == '>') { /* '->' */
token_add_char(*inp_p++);
lsym = lsym_unary_op;
next_unary = false;
ps.want_blank = false;
@ -625,8 +625,8 @@ lexi(void)
case '=':
if (ps.init_or_struct)
ps.block_init = true;
if (inp.st[0] == '=')
token_add_char(*inp.st++);
if (inp_p[0] == '=')
token_add_char(*inp_p++);
lsym = lsym_binary_op;
next_unary = true;
break;
@ -634,10 +634,10 @@ lexi(void)
case '>':
case '<':
case '!': /* ops like <, <<, <=, !=, etc */
if (inp.st[0] == '>' || inp.st[0] == '<' || inp.st[0] == '=')
token_add_char(*inp.st++);
if (inp.st[0] == '=')
token_add_char(*inp.st++);
if (inp_p[0] == '>' || inp_p[0] == '<' || inp_p[0] == '=')
token_add_char(*inp_p++);
if (inp_p[0] == '=')
token_add_char(*inp_p++);
lsym = ps.next_unary ? lsym_unary_op : lsym_binary_op;
next_unary = true;
break;
@ -648,30 +648,30 @@ lexi(void)
lsym = lsym_unary_op;
next_unary = true;
} else {
if (inp.st[0] == '=')
token_add_char(*inp.st++);
if (inp_p[0] == '=')
token_add_char(*inp_p++);
lsym = lsym_binary_op;
next_unary = true;
}
break;
default:
if (token.mem[token.len - 1] == '/'
&& (inp.st[0] == '*' || inp.st[0] == '/')) {
if (token.s[token.len - 1] == '/'
&& (inp_p[0] == '*' || inp_p[0] == '/')) {
enum indent_enabled prev = indent_enabled;
lex_indent_comment();
if (prev == indent_on && indent_enabled == indent_off)
out.indent_off_text.len = 0;
token_add_char(*inp.st++);
token_add_char(*inp_p++);
lsym = lsym_comment;
next_unary = ps.next_unary;
break;
}
/* things like '||', '&&', '<<=', 'int *****i' */
while (inp.st[0] == token.mem[token.len - 1]
|| inp.st[0] == '=')
token_add_char(*inp.st++);
while (inp_p[0] == token.s[token.len - 1]
|| inp_p[0] == '=')
token_add_char(*inp_p++);
lsym = ps.next_unary ? lsym_unary_op : lsym_binary_op;
next_unary = true;

View File

@ -1,4 +1,4 @@
/* $NetBSD: pr_comment.c,v 1.150 2023/06/04 20:23:12 rillig Exp $ */
/* $NetBSD: pr_comment.c,v 1.151 2023/06/04 20:51:19 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
__RCSID("$NetBSD: pr_comment.c,v 1.150 2023/06/04 20:23:12 rillig Exp $");
__RCSID("$NetBSD: pr_comment.c,v 1.151 2023/06/04 20:51:19 rillig Exp $");
#include <string.h>
@ -61,7 +61,7 @@ com_add_delim(void)
static bool
fits_in_one_line(int com_ind, int max_line_length)
{
for (const char *start = inp.st, *p = start; *p != '\n'; p++) {
for (const char *start = inp_p, *p = start; *p != '\n'; p++) {
if (p[0] == '*' && p[1] == '/') {
int len = ind_add(com_ind + 3,
start, (size_t)(p - start));
@ -86,13 +86,13 @@ analyze_comment(bool *p_may_wrap, bool *p_delim, int *p_line_length)
ind = 0;
} else {
if (inp.st[0] == '-' || inp.st[0] == '*' ||
token.mem[token.len - 1] == '/' ||
(inp.st[0] == '\n' && !opt.format_block_comments)) {
if (inp_p[0] == '-' || inp_p[0] == '*' ||
token.s[token.len - 1] == '/' ||
(inp_p[0] == '\n' && !opt.format_block_comments)) {
may_wrap = false;
delim = false;
}
if (code.len == 0 && inp.st[strspn(inp.st, "*")] == '\n')
if (code.len == 0 && inp_p[strspn(inp_p, "*")] == '\n')
out.line_kind = lk_block_comment;
if (com.len > 0)
@ -107,8 +107,8 @@ analyze_comment(bool *p_may_wrap, bool *p_delim, int *p_line_length)
delim = false;
int target_ind = code.len > 0
? ind_add(compute_code_indent(), code.st, code.len)
: ind_add(compute_label_indent(), lab.st, lab.len);
? ind_add(compute_code_indent(), code.s, code.len)
: ind_add(compute_label_indent(), lab.s, lab.len);
ind = ps.decl_on_line || ps.ind_level == 0
? opt.decl_comment_column - 1
@ -125,20 +125,20 @@ analyze_comment(bool *p_may_wrap, bool *p_delim, int *p_line_length)
if (!may_wrap) {
/* Find out how much indentation there was originally, because
* that much will have to be ignored by output_line. */
size_t len = (size_t)(inp.st - 2 - inp.mem);
ps.n_comment_delta = -ind_add(0, inp.mem, len);
size_t len = (size_t)(inp_p - 2 - inp.s);
ps.n_comment_delta = -ind_add(0, inp.s, len);
} else {
ps.n_comment_delta = 0;
if (!(inp.st[0] == '\t' && !ch_isblank(inp.st[1])))
while (ch_isblank(inp.st[0]))
inp.st++;
if (!(inp_p[0] == '\t' && !ch_isblank(inp_p[1])))
while (ch_isblank(inp_p[0]))
inp_p++;
}
ps.comment_delta = 0;
com_add_char('/');
com_add_char(token.mem[token.len - 1]); /* either '*' or '/' */
com_add_char(token.s[token.len - 1]); /* either '*' or '/' */
if (may_wrap && !ch_isblank(inp.st[0]))
if (may_wrap && !ch_isblank(inp_p[0]))
com_add_char(' ');
if (delim && fits_in_one_line(ind, line_length))
@ -163,11 +163,10 @@ analyze_comment(bool *p_may_wrap, bool *p_delim, int *p_line_length)
static void
copy_comment_wrap(int line_length, bool delim)
{
ssize_t last_blank = -1; /* index of the last blank in com.mem
*/
ssize_t last_blank = -1; /* index of the last blank in 'com' */
for (;;) {
switch (inp.st[0]) {
switch (inp_p[0]) {
case '\n':
if (had_eof) {
diag(1, "Unterminated comment");
@ -191,7 +190,7 @@ copy_comment_wrap(int line_length, bool delim)
} else {
ps.next_col_1 = true;
if (!(com.len > 0
&& ch_isblank(com.mem[com.len - 1])))
&& ch_isblank(com.s[com.len - 1])))
com_add_char(' ');
last_blank = (int)com.len - 1;
}
@ -201,21 +200,21 @@ copy_comment_wrap(int line_length, bool delim)
do { /* flush any blanks and/or tabs at start of
* next line */
inp_skip();
if (inp.st[0] == '*' && skip_asterisk) {
if (inp_p[0] == '*' && skip_asterisk) {
skip_asterisk = false;
inp.st++;
if (inp.st[0] == '/')
inp_p++;
if (inp_p[0] == '/')
goto end_of_comment;
}
} while (ch_isblank(inp.st[0]));
} while (ch_isblank(inp_p[0]));
break; /* end of case for newline */
case '*':
inp.st++;
if (inp.st[0] == '/') {
inp_p++;
if (inp_p[0] == '/') {
end_of_comment:
inp.st++;
inp_p++;
if (delim) {
if (com.len > 3)
@ -225,16 +224,16 @@ copy_comment_wrap(int line_length, bool delim)
com_add_char(' ');
} else {
size_t len = com.len;
while (ch_isblank(com.mem[len - 1]))
while (ch_isblank(com.s[len - 1]))
len--;
int now_len = ind_add(
ps.com_ind, com.st, len);
ps.com_ind, com.s, len);
if (now_len + 3 > line_length)
output_line();
}
if (!(com.len > 0
&& ch_isblank(com.mem[com.len - 1])))
&& ch_isblank(com.s[com.len - 1])))
com_add_char(' ');
com_add_char('*');
com_add_char('/');
@ -246,14 +245,14 @@ copy_comment_wrap(int line_length, bool delim)
default:
;
int now_len = ind_add(ps.com_ind, com.st, com.len);
int now_len = ind_add(ps.com_ind, com.s, com.len);
for (;;) {
char ch = inp_next();
if (ch_isblank(ch))
last_blank = (ssize_t)com.len;
com_add_char(ch);
now_len++;
if (memchr("*\n\r\b\t", inp.st[0], 6) != NULL)
if (memchr("*\n\r\b\t", inp_p[0], 6) != NULL)
break;
if (now_len >= line_length && last_blank != -1)
break;
@ -263,7 +262,7 @@ copy_comment_wrap(int line_length, bool delim)
if (now_len <= line_length)
break;
if (ch_isspace(com.mem[com.len - 1]))
if (ch_isspace(com.s[com.len - 1]))
break;
if (last_blank == -1) {
@ -273,7 +272,7 @@ copy_comment_wrap(int line_length, bool delim)
break;
}
const char *last_word_s = com.mem + last_blank + 1;
const char *last_word_s = com.s + last_blank + 1;
size_t last_word_len = com.len
- (size_t)(last_blank + 1);
com.len = (size_t)last_blank;
@ -282,8 +281,8 @@ copy_comment_wrap(int line_length, bool delim)
/* Assume that output_line and com_add_delim don't
* invalidate the "unused" part of the buffer beyond
* com.mem + com.len. */
memmove(com.mem + com.len, last_word_s, last_word_len);
* com.s + com.len. */
memmove(com.s + com.len, last_word_s, last_word_len);
com.len += last_word_len;
last_blank = -1;
}
@ -293,10 +292,10 @@ copy_comment_wrap(int line_length, bool delim)
static void
copy_comment_nowrap(void)
{
char kind = token.mem[token.len - 1];
char kind = token.s[token.len - 1];
for (;;) {
if (inp.st[0] == '\n') {
if (inp_p[0] == '\n') {
if (kind == '/')
return;
@ -315,10 +314,10 @@ copy_comment_nowrap(void)
continue;
}
com_add_char(*inp.st++);
com_add_char(*inp_p++);
if (com.len >= 2
&& com.mem[com.len - 2] == '*'
&& com.mem[com.len - 1] == '/'
&& com.s[com.len - 2] == '*'
&& com.s[com.len - 1] == '/'
&& kind == '*')
return;
}