Module Name: src
Committed By: rillig
Date: Fri Jun 9 16:23:43 UTC 2023
Modified Files:
src/usr.bin/indent: indent.c indent.h
Log Message:
indent: group lexer symbols by topic, sort processing functions
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.346 -r1.347 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.181 -r1.182 src/usr.bin/indent/indent.h
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.346 src/usr.bin/indent/indent.c:1.347
--- src/usr.bin/indent/indent.c:1.346 Fri Jun 9 11:22:31 2023
+++ src/usr.bin/indent/indent.c Fri Jun 9 16:23:43 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.c,v 1.346 2023/06/09 11:22:31 rillig Exp $ */
+/* $NetBSD: indent.c,v 1.347 2023/06/09 16:23:43 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.346 2023/06/09 11:22:31 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.347 2023/06/09 16:23:43 rillig Exp $");
#include <sys/param.h>
#include <err.h>
@@ -185,6 +185,23 @@ init_globals(void)
backup_suffix = suffix;
}
+static void
+load_profiles(int argc, char **argv)
+{
+ const char *profile_name = NULL;
+
+ for (int i = 1; i < argc; ++i) {
+ const char *arg = argv[i];
+
+ if (strcmp(arg, "-npro") == 0)
+ return;
+ if (arg[0] == '-' && arg[1] == 'P' && arg[2] != '\0')
+ profile_name = arg + 2;
+ }
+
+ load_profile_files(profile_name);
+}
+
/*
* Copy the input file to the backup file, then make the backup file the input
* and the original input file the output.
@@ -227,23 +244,6 @@ bakcopy(void)
}
static void
-load_profiles(int argc, char **argv)
-{
- const char *profile_name = NULL;
-
- for (int i = 1; i < argc; ++i) {
- const char *arg = argv[i];
-
- if (strcmp(arg, "-npro") == 0)
- return;
- if (arg[0] == '-' && arg[1] == 'P' && arg[2] != '\0')
- profile_name = arg + 2;
- }
-
- load_profile_files(profile_name);
-}
-
-static void
parse_command_line(int argc, char **argv)
{
for (int i = 1; i < argc; ++i) {
@@ -308,6 +308,44 @@ set_initial_indentation(void)
}
static void
+maybe_break_line(lexer_symbol lsym)
+{
+ if (!ps.force_nl)
+ return;
+ if (lsym == lsym_semicolon)
+ return;
+ if (lsym == lsym_lbrace && opt.brace_same_line
+ && ps.prev_lsym != lsym_lbrace)
+ return;
+
+ output_line();
+ ps.force_nl = false;
+}
+
+static void
+move_com_to_code(lexer_symbol lsym)
+{
+ if (ps.want_blank)
+ buf_add_char(&code, ' ');
+ buf_add_buf(&code, &com);
+ com.len = 0;
+ ps.want_blank = lsym != lsym_rparen && lsym != lsym_rbracket;
+}
+
+static void
+update_ps_lbrace_kind(lexer_symbol lsym)
+{
+ if (lsym == lsym_tag) {
+ 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
+ && lsym != lsym_lbrace)
+ ps.lbrace_kind = psym_lbrace_block;
+}
+
+static void
indent_declarator(int decl_ind, bool tabs_to_var)
{
int base = ps.ind_level * opt.indent_size;
@@ -329,17 +367,14 @@ indent_declarator(int decl_ind, bool tab
ps.decl_indent_done = true;
}
-static void
-update_ps_lbrace_kind(lexer_symbol lsym)
+static bool
+is_function_pointer_declaration(void)
{
- if (lsym == lsym_tag) {
- 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
- && lsym != lsym_lbrace)
- ps.lbrace_kind = psym_lbrace_block;
+ return ps.in_decl
+ && !ps.block_init
+ && !ps.decl_indent_done
+ && !ps.is_function_definition
+ && ps.line_start_nparen == 0;
}
static int
@@ -359,29 +394,90 @@ process_eof(void)
return found_err ? EXIT_FAILURE : EXIT_SUCCESS;
}
+/* move the whole line to the 'label' buffer */
static void
-maybe_break_line(lexer_symbol lsym)
+read_preprocessing_line(void)
{
- if (!ps.force_nl)
- return;
- if (lsym == lsym_semicolon)
- return;
- if (lsym == lsym_lbrace && opt.brace_same_line
- && ps.prev_lsym != lsym_lbrace)
- return;
+ enum {
+ PLAIN, STR, CHR, COMM
+ } state = PLAIN;
- output_line();
- ps.force_nl = false;
+ buf_add_char(&lab, '#');
+
+ while (inp_p[0] != '\n' || (state == COMM && !had_eof)) {
+ buf_add_char(&lab, inp_next());
+ switch (lab.s[lab.len - 1]) {
+ case '\\':
+ if (state != COMM)
+ buf_add_char(&lab, inp_next());
+ break;
+ case '/':
+ if (inp_p[0] == '*' && state == PLAIN) {
+ state = COMM;
+ buf_add_char(&lab, *inp_p++);
+ }
+ break;
+ case '"':
+ if (state == STR)
+ state = PLAIN;
+ else if (state == PLAIN)
+ state = STR;
+ break;
+ case '\'':
+ if (state == CHR)
+ state = PLAIN;
+ else if (state == PLAIN)
+ state = CHR;
+ break;
+ case '*':
+ if (inp_p[0] == '/' && state == COMM) {
+ state = PLAIN;
+ buf_add_char(&lab, *inp_p++);
+ }
+ break;
+ }
+ }
+
+ while (lab.len > 0 && ch_isblank(lab.s[lab.len - 1]))
+ lab.len--;
}
static void
-move_com_to_code(lexer_symbol lsym)
+process_preprocessing(void)
{
- if (ps.want_blank)
- buf_add_char(&code, ' ');
- buf_add_buf(&code, &com);
- com.len = 0;
- ps.want_blank = lsym != lsym_rparen && lsym != lsym_rbracket;
+ if (lab.len > 0 || code.len > 0 || com.len > 0)
+ output_line();
+
+ read_preprocessing_line();
+
+ const char *dir = lab.s + 1, *line_end = lab.s + lab.len;
+ while (dir < line_end && ch_isblank(*dir))
+ dir++;
+ size_t dir_len = 0;
+ while (dir + dir_len < line_end && ch_isalpha(dir[dir_len]))
+ dir_len++;
+
+ if (dir_len >= 2 && memcmp(dir, "if", 2) == 0) {
+ if ((size_t)ifdef_level < array_length(state_stack))
+ state_stack[ifdef_level++] = ps;
+ else
+ diag(1, "#if stack overflow");
+ out.line_kind = lk_if;
+
+ } else if (dir_len >= 2 && memcmp(dir, "el", 2) == 0) {
+ if (ifdef_level <= 0)
+ diag(1, dir[2] == 'i'
+ ? "Unmatched #elif" : "Unmatched #else");
+ else
+ ps = state_stack[ifdef_level - 1];
+
+ } else if (dir_len == 5 && memcmp(dir, "endif", 5) == 0) {
+ if (ifdef_level <= 0)
+ diag(1, "Unmatched #endif");
+ else
+ ifdef_level--;
+ out.line_kind = lk_endif;
+ }
}
static void
@@ -406,16 +502,6 @@ stay_in_line:
}
static bool
-is_function_pointer_declaration(void)
-{
- return ps.in_decl
- && !ps.block_init
- && !ps.decl_indent_done
- && !ps.is_function_definition
- && ps.line_start_nparen == 0;
-}
-
-static bool
want_blank_before_lparen(void)
{
if (!ps.want_blank)
@@ -477,28 +563,6 @@ process_lparen(void)
}
static void
-process_lbracket(void)
-{
- if (++ps.nparen == array_length(ps.paren)) {
- diag(0, "Reached internal limit of %zu unclosed parentheses",
- array_length(ps.paren));
- ps.nparen--;
- }
-
- if (code.len > 0
- && (ps.prev_lsym == lsym_comma || ps.prev_lsym == lsym_binary_op))
- buf_add_char(&code, ' ');
- ps.want_blank = false;
- buf_add_char(&code, token.s[0]);
-
- int indent = ind_add(0, code.s, code.len);
-
- ps.paren[ps.nparen - 1].indent = indent;
- ps.paren[ps.nparen - 1].cast = cast_no;
- debug_println("paren_indents[%d] is now %d", ps.nparen - 1, indent);
-}
-
-static void
process_rparen(void)
{
if (ps.nparen == 0) {
@@ -537,6 +601,28 @@ unbalanced:
}
static void
+process_lbracket(void)
+{
+ if (++ps.nparen == array_length(ps.paren)) {
+ diag(0, "Reached internal limit of %zu unclosed parentheses",
+ array_length(ps.paren));
+ ps.nparen--;
+ }
+
+ if (code.len > 0
+ && (ps.prev_lsym == lsym_comma || ps.prev_lsym == lsym_binary_op))
+ buf_add_char(&code, ' ');
+ ps.want_blank = false;
+ buf_add_char(&code, token.s[0]);
+
+ int indent = ind_add(0, code.s, code.len);
+
+ ps.paren[ps.nparen - 1].indent = indent;
+ ps.paren[ps.nparen - 1].cast = cast_no;
+ debug_println("paren_indents[%d] is now %d", ps.nparen - 1, indent);
+}
+
+static void
process_rbracket(void)
{
if (ps.nparen == 0) {
@@ -554,129 +640,15 @@ unbalanced:
}
static void
-process_unary_op(void)
+process_lbrace(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;
+ if (ps.prev_lsym == lsym_rparen && ps.prev_paren_was_cast) {
+ ps.block_init = true;
+ ps.init_or_struct = true;
+ }
- if (ps.want_blank)
- buf_add_char(&code, ' ');
- buf_add_buf(&code, &token);
- ps.want_blank = false;
-}
-
-static void
-process_postfix_op(void)
-{
- buf_add_buf(&code, &token);
- ps.want_blank = true;
-}
-
-static void
-process_question(void)
-{
- ps.quest_level++;
- if (code.len == 0) {
- ps.in_stmt_cont = true;
- ps.in_stmt_or_decl = true;
- ps.in_decl = false;
- }
-}
-
-static void
-process_colon_question(void)
-{
- if (code.len == 0) {
- ps.in_stmt_cont = true;
- ps.in_stmt_or_decl = true;
- ps.in_decl = false;
- }
-}
-
-static void
-process_colon_label(void)
-{
- buf_add_buf(&lab, &code);
- buf_add_char(&lab, ':');
- code.len = 0;
-
- if (ps.seen_case)
- out.line_kind = lk_case_or_default;
- ps.in_stmt_or_decl = false;
- ps.force_nl = ps.seen_case;
- ps.seen_case = false;
- ps.want_blank = false;
-}
-
-static void
-process_colon_other(void)
-{
- buf_add_char(&code, ':');
- ps.want_blank = false;
-}
-
-static void
-process_semicolon(void)
-{
- if (out.line_kind == lk_stmt_head)
- out.line_kind = lk_other;
- if (ps.decl_level == 0)
- ps.init_or_struct = false;
- ps.seen_case = false; /* only needs to be reset on error */
- ps.quest_level = 0; /* only needs to be reset on error */
- if (ps.prev_lsym == lsym_rparen)
- ps.in_func_def_params = false;
- ps.block_init = false;
- ps.block_init_level = 0;
- ps.declaration = ps.declaration == decl_begin ? decl_end : decl_no;
-
- if (ps.in_decl && code.len == 0 && !ps.block_init &&
- !ps.decl_indent_done && ps.line_start_nparen == 0) {
- /* indent stray semicolons in declarations */
- indent_declarator(ps.decl_ind - 1, ps.tabs_to_var);
- }
-
- ps.in_decl = ps.decl_level > 0; /* if we were in a first level
- * structure declaration before, we
- * aren't anymore */
-
- if (ps.nparen > 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.nparen = 0;
- if (ps.spaced_expr_psym != psym_0) {
- parse(ps.spaced_expr_psym);
- ps.spaced_expr_psym = psym_0;
- }
- }
- buf_add_char(&code, ';');
- ps.want_blank = true;
- ps.in_stmt_or_decl = ps.nparen > 0;
- ps.decl_ind = 0;
-
- if (ps.spaced_expr_psym == psym_0) {
- parse(psym_stmt);
- ps.force_nl = true;
- }
-}
-
-static void
-process_lbrace(void)
-{
- if (ps.prev_lsym == lsym_rparen && ps.prev_paren_was_cast) {
- ps.block_init = true;
- ps.init_or_struct = true;
- }
-
- if (out.line_kind == lk_stmt_head)
- out.line_kind = lk_other;
+ if (out.line_kind == lk_stmt_head)
+ out.line_kind = lk_other;
ps.in_stmt_or_decl = false; /* don't indent the {} */
@@ -779,29 +751,151 @@ process_rbrace(void)
}
static void
-process_do(void)
+process_period(void)
{
- ps.in_stmt_or_decl = false;
- ps.in_decl = false;
+ if (code.len > 0 && code.s[code.len - 1] == ',')
+ buf_add_char(&code, ' ');
+ buf_add_char(&code, '.');
+ ps.want_blank = false;
+}
- if (code.len > 0)
- output_line();
+static void
+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;
- ps.force_nl = true;
- parse(psym_do);
+ if (ps.want_blank)
+ buf_add_char(&code, ' ');
+ buf_add_buf(&code, &token);
+ ps.want_blank = false;
}
static void
-process_else(void)
+process_postfix_op(void)
+{
+ buf_add_buf(&code, &token);
+ ps.want_blank = true;
+}
+
+static void
+process_question(void)
+{
+ ps.quest_level++;
+ if (code.len == 0) {
+ ps.in_stmt_cont = true;
+ ps.in_stmt_or_decl = true;
+ ps.in_decl = false;
+ }
+}
+
+static void
+process_colon_question(void)
+{
+ if (code.len == 0) {
+ ps.in_stmt_cont = true;
+ ps.in_stmt_or_decl = true;
+ ps.in_decl = false;
+ }
+}
+
+static void
+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.is_function_definition && !ps.block_init &&
+ !ps.decl_indent_done && ps.line_start_nparen == 0) {
+ /* indent leading commas and not the actual identifiers */
+ indent_declarator(ps.decl_ind - 1, ps.tabs_to_var);
+ }
+
+ buf_add_char(&code, ',');
+
+ if (ps.nparen == 0) {
+ if (ps.block_init_level == 0)
+ ps.block_init = false;
+ int typical_varname_length = 8;
+ if (ps.break_after_comma && (opt.break_after_comma ||
+ ind_add(compute_code_indent(), code.s, code.len)
+ >= opt.max_line_length - typical_varname_length))
+ ps.force_nl = true;
+ }
+}
+
+static void
+process_colon_label(void)
{
+ buf_add_buf(&lab, &code);
+ buf_add_char(&lab, ':');
+ code.len = 0;
+
+ if (ps.seen_case)
+ out.line_kind = lk_case_or_default;
ps.in_stmt_or_decl = false;
+ ps.force_nl = ps.seen_case;
+ ps.seen_case = false;
+ ps.want_blank = false;
+}
- if (code.len > 0
- && !(opt.cuddle_else && code.s[code.len - 1] == '}'))
- output_line();
+static void
+process_colon_other(void)
+{
+ buf_add_char(&code, ':');
+ ps.want_blank = false;
+}
- ps.force_nl = true;
- parse(psym_else);
+static void
+process_semicolon(void)
+{
+ if (out.line_kind == lk_stmt_head)
+ out.line_kind = lk_other;
+ if (ps.decl_level == 0)
+ ps.init_or_struct = false;
+ ps.seen_case = false; /* only needs to be reset on error */
+ ps.quest_level = 0; /* only needs to be reset on error */
+ if (ps.prev_lsym == lsym_rparen)
+ ps.in_func_def_params = false;
+ ps.block_init = false;
+ ps.block_init_level = 0;
+ ps.declaration = ps.declaration == decl_begin ? decl_end : decl_no;
+
+ if (ps.in_decl && code.len == 0 && !ps.block_init &&
+ !ps.decl_indent_done && ps.line_start_nparen == 0) {
+ /* indent stray semicolons in declarations */
+ indent_declarator(ps.decl_ind - 1, ps.tabs_to_var);
+ }
+
+ ps.in_decl = ps.decl_level > 0; /* if we were in a first level
+ * structure declaration before, we
+ * aren't anymore */
+
+ if (ps.nparen > 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.nparen = 0;
+ if (ps.spaced_expr_psym != psym_0) {
+ parse(ps.spaced_expr_psym);
+ ps.spaced_expr_psym = psym_0;
+ }
+ }
+ buf_add_char(&code, ';');
+ ps.want_blank = true;
+ ps.in_stmt_or_decl = ps.nparen > 0;
+ ps.decl_ind = 0;
+
+ if (ps.spaced_expr_psym == psym_0) {
+ parse(psym_stmt);
+ ps.force_nl = true;
+ }
}
static void
@@ -862,130 +956,36 @@ process_ident(lexer_symbol lsym)
}
static void
-process_period(void)
-{
- if (code.len > 0 && code.s[code.len - 1] == ',')
- buf_add_char(&code, ' ');
- buf_add_char(&code, '.');
- ps.want_blank = false;
-}
-
-static void
-process_comma(void)
+process_do(void)
{
- ps.want_blank = code.len > 0; /* only put blank after comma if comma
- * does not start the line */
-
- if (ps.in_decl && !ps.is_function_definition && !ps.block_init &&
- !ps.decl_indent_done && ps.line_start_nparen == 0) {
- /* indent leading commas and not the actual identifiers */
- indent_declarator(ps.decl_ind - 1, ps.tabs_to_var);
- }
+ ps.in_stmt_or_decl = false;
+ ps.in_decl = false;
- buf_add_char(&code, ',');
+ if (code.len > 0)
+ output_line();
- if (ps.nparen == 0) {
- if (ps.block_init_level == 0)
- ps.block_init = false;
- int typical_varname_length = 8;
- if (ps.break_after_comma && (opt.break_after_comma ||
- ind_add(compute_code_indent(), code.s, code.len)
- >= opt.max_line_length - typical_varname_length))
- ps.force_nl = true;
- }
+ ps.force_nl = true;
+ parse(psym_do);
}
-/* move the whole line to the 'label' buffer */
static void
-read_preprocessing_line(void)
+process_else(void)
{
- enum {
- PLAIN, STR, CHR, COMM
- } state = PLAIN;
-
- buf_add_char(&lab, '#');
-
- while (inp_p[0] != '\n' || (state == COMM && !had_eof)) {
- buf_add_char(&lab, inp_next());
- switch (lab.s[lab.len - 1]) {
- case '\\':
- if (state != COMM)
- buf_add_char(&lab, inp_next());
- break;
- case '/':
- if (inp_p[0] == '*' && state == PLAIN) {
- state = COMM;
- buf_add_char(&lab, *inp_p++);
- }
- break;
- case '"':
- if (state == STR)
- state = PLAIN;
- else if (state == PLAIN)
- state = STR;
- break;
- case '\'':
- if (state == CHR)
- state = PLAIN;
- else if (state == PLAIN)
- state = CHR;
- break;
- case '*':
- if (inp_p[0] == '/' && state == COMM) {
- state = PLAIN;
- buf_add_char(&lab, *inp_p++);
- }
- break;
- }
- }
-
- while (lab.len > 0 && ch_isblank(lab.s[lab.len - 1]))
- lab.len--;
-}
+ ps.in_stmt_or_decl = false;
-static void
-process_preprocessing(void)
-{
- if (lab.len > 0 || code.len > 0 || com.len > 0)
+ if (code.len > 0
+ && !(opt.cuddle_else && code.s[code.len - 1] == '}'))
output_line();
- read_preprocessing_line();
-
- const char *dir = lab.s + 1, *line_end = lab.s + lab.len;
- while (dir < line_end && ch_isblank(*dir))
- dir++;
- size_t dir_len = 0;
- while (dir + dir_len < line_end && ch_isalpha(dir[dir_len]))
- dir_len++;
-
- if (dir_len >= 2 && memcmp(dir, "if", 2) == 0) {
- if ((size_t)ifdef_level < array_length(state_stack))
- state_stack[ifdef_level++] = ps;
- else
- diag(1, "#if stack overflow");
- out.line_kind = lk_if;
-
- } else if (dir_len >= 2 && memcmp(dir, "el", 2) == 0) {
- if (ifdef_level <= 0)
- diag(1, dir[2] == 'i'
- ? "Unmatched #elif" : "Unmatched #else");
- else
- ps = state_stack[ifdef_level - 1];
-
- } else if (dir_len == 5 && memcmp(dir, "endif", 5) == 0) {
- if (ifdef_level <= 0)
- diag(1, "Unmatched #endif");
- else
- ifdef_level--;
- out.line_kind = lk_endif;
- }
+ ps.force_nl = true;
+ parse(psym_else);
}
static void
process_lsym(lexer_symbol lsym)
{
switch (lsym) {
- /* INDENT OFF */
+ /* INDENT OFF */
case lsym_preprocessing: process_preprocessing(); break;
case lsym_newline: process_newline(); break;
case lsym_comment: process_comment(); break;
@@ -1015,7 +1015,7 @@ process_lsym(lexer_symbol lsym)
case lsym_if: ps.spaced_expr_psym = psym_if_expr; goto copy_token;
case lsym_switch: ps.spaced_expr_psym = psym_switch_expr; goto copy_token;
case lsym_while: ps.spaced_expr_psym = psym_while_expr; goto copy_token;
- /* INDENT ON */
+ /* INDENT ON */
case lsym_tag:
if (ps.nparen > 0)
Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.181 src/usr.bin/indent/indent.h:1.182
--- src/usr.bin/indent/indent.h:1.181 Fri Jun 9 10:24:55 2023
+++ src/usr.bin/indent/indent.h Fri Jun 9 16:23:43 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.h,v 1.181 2023/06/09 10:24:55 rillig Exp $ */
+/* $NetBSD: indent.h,v 1.182 2023/06/09 16:23:43 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -73,36 +73,40 @@ typedef enum lexer_symbol {
lsym_preprocessing, /* the initial '#' of a preprocessing line */
lsym_newline,
lsym_comment, /* the initial '/ *' or '//' of a comment */
+
lsym_lparen,
- lsym_lbracket,
lsym_rparen,
+ lsym_lbracket,
lsym_rbracket,
lsym_lbrace,
lsym_rbrace,
+
lsym_period,
lsym_unary_op, /* e.g. '*', '&', '-' or leading '++' */
+ lsym_sizeof,
+ lsym_offsetof,
lsym_postfix_op, /* trailing '++' or '--' */
lsym_binary_op, /* e.g. '*', '&', '<<', '&&' or '/=' */
lsym_question, /* the '?' from a '?:' expression */
lsym_colon_question, /* the ':' from a '?:' expression */
+ lsym_comma,
+
+ lsym_typedef,
+ lsym_modifier, /* modifiers for types, functions, variables */
+ lsym_tag, /* 'struct', 'union' or 'enum' */
+ lsym_type_outside_parentheses,
+ lsym_type_in_parentheses,
+ lsym_word, /* identifier, constant or string */
+ lsym_funcname, /* name of a function being defined */
lsym_colon_label, /* the ':' after a label */
lsym_colon_other, /* bit-fields, generic-association (C11),
* enum-type-specifier (C23),
* attribute-prefixed-token (C23),
* pp-prefixed-parameter (C23 6.10) */
- lsym_comma,
lsym_semicolon,
- lsym_typedef,
- lsym_modifier, /* modifiers for types, functions, variables */
- lsym_type_outside_parentheses,
- lsym_type_in_parentheses,
- lsym_tag, /* 'struct', 'union' or 'enum' */
+
lsym_case,
lsym_default,
- lsym_sizeof,
- lsym_offsetof,
- lsym_word, /* identifier, constant or string */
- lsym_funcname, /* name of a function being defined */
lsym_do,
lsym_else,
lsym_for,