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