Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/xlint/lint1 lint: add debug logging for symbol kinds...
details: https://anonhg.NetBSD.org/src/rev/cd57ca61708d
branches: trunk
changeset: 377400:cd57ca61708d
user: rillig <rillig%NetBSD.org@localhost>
date: Mon Jul 10 19:00:33 2023 +0000
description:
lint: add debug logging for symbol kinds in the parser
An identifier can refer to a variable, type, member, tag or label.
Switching between these namespaces is tightly coupled with the
evaluation order of the grammar rules.
diffstat:
usr.bin/xlint/lint1/cgram.y | 48 ++++++++++++++++++++++----------------------
usr.bin/xlint/lint1/lex.c | 8 +++---
usr.bin/xlint/lint1/lint1.h | 11 +++++++++-
3 files changed, 38 insertions(+), 29 deletions(-)
diffs (253 lines):
diff -r 2afcb4807ccc -r cd57ca61708d usr.bin/xlint/lint1/cgram.y
--- a/usr.bin/xlint/lint1/cgram.y Mon Jul 10 18:22:31 2023 +0000
+++ b/usr.bin/xlint/lint1/cgram.y Mon Jul 10 19:00:33 2023 +0000
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.448 2023/07/10 11:46:14 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.449 2023/07/10 19:00:33 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.448 2023/07/10 11:46:14 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.449 2023/07/10 19:00:33 rillig Exp $");
#endif
#include <limits.h>
@@ -469,7 +469,7 @@ primary_expression:
/* GCC primary-expression, see c_parser_postfix_expression */
/* TODO: C99 7.17p3 allows not only an identifier but a designator. */
| T_BUILTIN_OFFSETOF T_LPAREN type_name T_COMMA identifier T_RPAREN {
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
$$ = build_offsetof($3, getsym($5));
}
;
@@ -592,11 +592,11 @@ gcc_statement_expr_item:
point_or_arrow: /* helper for 'postfix_expression' */
T_POINT {
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
$$ = POINT;
}
| T_ARROW {
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
$$ = ARROW;
}
;
@@ -963,14 +963,14 @@ struct_or_union_specifier: /* C99 6.7.2.
$$ = complete_struct_or_union($3);
}
| struct_or_union error {
- symtyp = FVFT;
+ set_symtyp(FVFT);
$$ = gettyp(INT);
}
;
struct_or_union: /* C99 6.7.2.1 */
T_STRUCT_OR_UNION {
- symtyp = FTAG;
+ set_symtyp(FTAG);
begin_declaration_level($1 == STRUCT ? DLK_STRUCT : DLK_UNION);
dcs->d_sou_size_in_bits = 0;
dcs->d_sou_align_in_bits = CHAR_SIZE;
@@ -987,7 +987,7 @@ braced_struct_declaration_list: /* see C
struct_declaration_lbrace: /* see C99 6.7.2.1 */
T_LBRACE {
- symtyp = FVFT;
+ set_symtyp(FVFT);
}
;
@@ -1010,15 +1010,15 @@ struct_declaration: /* C99 6.7.2.1 */
begin_type_qualifier_list end_type {
/* ^^ There is no check for the missing type-specifier. */
/* too late, i know, but getsym() compensates it */
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
} notype_struct_declarators type_attribute_opt T_SEMI {
- symtyp = FVFT;
+ set_symtyp(FVFT);
$$ = $4;
}
| begin_type_specifier_qualifier_list end_type {
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
} type_struct_declarators type_attribute_opt T_SEMI {
- symtyp = FVFT;
+ set_symtyp(FVFT);
$$ = $4;
}
| begin_type_qualifier_list end_type type_attribute_opt T_SEMI {
@@ -1028,7 +1028,7 @@ struct_declaration: /* C99 6.7.2.1 */
}
| begin_type_specifier_qualifier_list end_type type_attribute_opt
T_SEMI {
- symtyp = FVFT;
+ set_symtyp(FVFT);
if (!allow_c11 && !allow_gcc)
/* anonymous struct/union members is a C11 feature */
warning(49);
@@ -1044,7 +1044,7 @@ struct_declaration: /* C99 6.7.2.1 */
$$ = NULL;
}
| error T_SEMI {
- symtyp = FVFT;
+ set_symtyp(FVFT);
$$ = NULL;
}
;
@@ -1054,7 +1054,7 @@ notype_struct_declarators:
$$ = declare_member($1);
}
| notype_struct_declarators {
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
} T_COMMA type_struct_declarator {
$$ = concat_symbols($1, declare_member($4));
}
@@ -1065,7 +1065,7 @@ type_struct_declarators:
$$ = declare_member($1);
}
| type_struct_declarators {
- symtyp = FMEMBER;
+ set_symtyp(FMEMBER);
} T_COMMA type_struct_declarator {
$$ = concat_symbols($1, declare_member($4));
}
@@ -1077,7 +1077,7 @@ notype_struct_declarator:
$$ = set_bit_field_width($1, to_int_constant($3, true));
}
| {
- symtyp = FVFT;
+ set_symtyp(FVFT);
} T_COLON constant_expr { /* C99 6.7.2.1 */
$$ = set_bit_field_width(NULL, to_int_constant($3, true));
}
@@ -1089,7 +1089,7 @@ type_struct_declarator:
$$ = set_bit_field_width($1, to_int_constant($3, true));
}
| {
- symtyp = FVFT;
+ set_symtyp(FVFT);
} T_COLON constant_expr {
$$ = set_bit_field_width(NULL, to_int_constant($3, true));
}
@@ -1111,14 +1111,14 @@ enum_specifier: /* C99 6.7.2.2 */
$$ = complete_enum($4);
}
| enum error {
- symtyp = FVFT;
+ set_symtyp(FVFT);
$$ = gettyp(INT);
}
;
enum: /* helper for C99 6.7.2.2 */
T_ENUM {
- symtyp = FTAG;
+ set_symtyp(FTAG);
begin_declaration_level(DLK_ENUM);
}
;
@@ -1131,7 +1131,7 @@ enum_declaration: /* helper for C99 6.7
enum_decl_lbrace: /* helper for C99 6.7.2.2 */
T_LBRACE {
- symtyp = FVFT;
+ set_symtyp(FVFT);
enumval = 0;
}
;
@@ -1724,7 +1724,7 @@ labeled_statement: /* C99 6.8.1 */
label:
T_NAME T_COLON {
- symtyp = FLABEL;
+ set_symtyp(FLABEL);
named_label(getsym($1));
}
| T_CASE constant_expr T_COLON {
@@ -1931,7 +1931,7 @@ jump_statement: /* C99 6.8.6 */
stmt_goto(getsym($2));
}
| goto error T_SEMI {
- symtyp = FVFT;
+ set_symtyp(FVFT);
}
| T_CONTINUE T_SEMI {
stmt_continue();
@@ -1949,7 +1949,7 @@ jump_statement: /* C99 6.8.6 */
goto: /* see C99 6.8.6 */
T_GOTO {
- symtyp = FLABEL;
+ set_symtyp(FLABEL);
}
;
diff -r 2afcb4807ccc -r cd57ca61708d usr.bin/xlint/lint1/lex.c
--- a/usr.bin/xlint/lint1/lex.c Mon Jul 10 18:22:31 2023 +0000
+++ b/usr.bin/xlint/lint1/lex.c Mon Jul 10 19:00:33 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.173 2023/07/10 09:51:30 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.174 2023/07/10 19:00:33 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: lex.c,v 1.173 2023/07/10 09:51:30 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.174 2023/07/10 19:00:33 rillig Exp $");
#endif
#include <ctype.h>
@@ -1309,7 +1309,7 @@ getsym(sbuf_t *sb)
if (sym != NULL) {
lint_assert(sym->s_kind == symtyp);
- symtyp = FVFT;
+ set_symtyp(FVFT);
free(sb);
return sym;
}
@@ -1340,7 +1340,7 @@ getsym(sbuf_t *sb)
if ((sym->s_kind = symtyp) != FLABEL)
sym->s_type = gettyp(INT);
- symtyp = FVFT;
+ set_symtyp(FVFT);
if (!in_gcc_attribute) {
symtab_add(sym);
diff -r 2afcb4807ccc -r cd57ca61708d usr.bin/xlint/lint1/lint1.h
--- a/usr.bin/xlint/lint1/lint1.h Mon Jul 10 18:22:31 2023 +0000
+++ b/usr.bin/xlint/lint1/lint1.h Mon Jul 10 19:00:33 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.182 2023/07/09 12:15:07 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.183 2023/07/10 19:00:33 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -606,3 +606,12 @@ is_member(const sym_t *sym)
{
return sym->s_scl == STRUCT_MEMBER || sym->s_scl == UNION_MEMBER;
}
+
+static inline void
+set_symtyp(symt_t symt)
+{
+ if (yflag)
+ debug_step("%s: %s -> %s", __func__,
+ symt_name(symtyp), symt_name(symt));
+ symtyp = symt;
+}
Home |
Main Index |
Thread Index |
Old Index