Module Name: src Committed By: rillig Date: Wed Jul 12 10:08:12 UTC 2023
Modified Files: src/usr.bin/xlint/lint1: lex.c Log Message: lint: condense keyword table This prepares for modelling 'inline' not as a storage class, but more correctly as a function specifier. To generate a diff of this commit: cvs rdiff -u -r1.174 -r1.175 src/usr.bin/xlint/lint1/lex.c 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/xlint/lint1/lex.c diff -u src/usr.bin/xlint/lint1/lex.c:1.174 src/usr.bin/xlint/lint1/lex.c:1.175 --- src/usr.bin/xlint/lint1/lex.c:1.174 Mon Jul 10 19:00:33 2023 +++ src/usr.bin/xlint/lint1/lex.c Wed Jul 12 10:08:11 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lex.c,v 1.174 2023/07/10 19:00:33 rillig Exp $ */ +/* $NetBSD: lex.c,v 1.175 2023/07/12 10:08:11 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.174 2023/07/10 19:00:33 rillig Exp $"); +__RCSID("$NetBSD: lex.c,v 1.175 2023/07/12 10:08:11 rillig Exp $"); #endif #include <ctype.h> @@ -75,33 +75,36 @@ bool in_system_header; * not defined, it would be interpreted as an implicit function call, leading * to a parse error. */ -#define kwdef(name, token, scl, tspec, tqual, since, gcc, deco) \ +#define kwdef(name, token, detail, since, gcc, deco) \ { \ - name, token, scl, tspec, tqual, \ + name, token, detail, \ (since) == 90, \ /* CONSTCOND */ (since) == 99 || (since) == 11, \ (gcc) > 0, \ ((deco) & 1) != 0, ((deco) & 2) != 0, ((deco) & 4) != 0, \ } #define kwdef_token(name, token, since, gcc, deco) \ - kwdef(name, token, 0, 0, 0, since, gcc, deco) + kwdef(name, token, {false}, since, gcc, deco) #define kwdef_sclass(name, sclass, since, gcc, deco) \ - kwdef(name, T_SCLASS, sclass, 0, 0, since, gcc, deco) + kwdef(name, T_SCLASS, .u.kw_scl = (sclass), since, gcc, deco) #define kwdef_type(name, tspec, since) \ - kwdef(name, T_TYPE, 0, tspec, 0, since, 0, 1) + kwdef(name, T_TYPE, .u.kw_tspec = (tspec), since, 0, 1) #define kwdef_tqual(name, tqual, since, gcc, deco) \ - kwdef(name, T_QUAL, 0, 0, tqual, since, gcc, deco) + kwdef(name, T_QUAL, .u.kw_tqual = (tqual), since, gcc, deco) #define kwdef_keyword(name, token) \ - kwdef(name, token, 0, 0, 0, 78, 0, 1) + kwdef(name, token, {false}, 78, 0, 1) /* During initialization, these keywords are written to the symbol table. */ static const struct keyword { const char *kw_name; int kw_token; /* token returned by yylex() */ - scl_t kw_scl; /* storage class if kw_token is T_SCLASS */ - tspec_t kw_tspec; /* type specifier if kw_token is T_TYPE or - * T_STRUCT_OR_UNION */ - tqual_t kw_tqual; /* type qualifier if kw_token is T_QUAL */ + union { + bool kw_dummy; + scl_t kw_scl; /* if kw_token is T_SCLASS */ + tspec_t kw_tspec; /* if kw_token is T_TYPE or + * T_STRUCT_OR_UNION */ + tqual_t kw_tqual; /* if kw_token is T_QUAL */ + } u; bool kw_c90:1; /* available in C90 mode */ bool kw_c99_or_c11:1; /* available in C99 or C11 mode */ bool kw_gcc:1; /* available in GCC mode */ @@ -150,11 +153,11 @@ static const struct keyword { kwdef_tqual( "restrict", RESTRICT, 99,0,7), kwdef_keyword( "return", T_RETURN), kwdef_type( "short", SHORT, 78), - kwdef( "signed", T_TYPE, 0, SIGNED, 0, 90,0,3), + kwdef( "signed", T_TYPE, .u.kw_tspec = SIGNED, 90,0,3), kwdef_keyword( "sizeof", T_SIZEOF), kwdef_sclass( "static", STATIC, 78,0,1), kwdef_keyword( "_Static_assert", T_STATIC_ASSERT), - kwdef("struct", T_STRUCT_OR_UNION, 0, STRUCT, 0, 78,0,1), + kwdef("struct", T_STRUCT_OR_UNION, .u.kw_tspec = STRUCT, 78,0,1), kwdef_keyword( "switch", T_SWITCH), kwdef_token( "__symbolrename", T_SYMBOLRENAME, 78,0,1), kwdef_tqual( "__thread", THREAD, 78,1,1), @@ -165,7 +168,7 @@ static const struct keyword { #ifdef INT128_SIZE kwdef_type( "__uint128_t", UINT128, 99), #endif - kwdef("union", T_STRUCT_OR_UNION, 0, UNION, 0, 78,0,1), + kwdef("union", T_STRUCT_OR_UNION, .u.kw_tspec = UNION, 78,0,1), kwdef_type( "unsigned", UNSIGN, 78), kwdef_type( "void", VOID, 78), kwdef_tqual( "volatile", VOLATILE, 90,0,7), @@ -345,11 +348,11 @@ add_keyword(const struct keyword *kw, bo int tok = kw->kw_token; sym->u.s_keyword.sk_token = tok; if (tok == T_TYPE || tok == T_STRUCT_OR_UNION) - sym->u.s_keyword.sk_tspec = kw->kw_tspec; + sym->u.s_keyword.sk_tspec = kw->u.kw_tspec; if (tok == T_SCLASS) - sym->s_scl = kw->kw_scl; + sym->s_scl = kw->u.kw_scl; if (tok == T_QUAL) - sym->u.s_keyword.sk_qualifier = kw->kw_tqual; + sym->u.s_keyword.sk_qualifier = kw->u.kw_tqual; symtab_add(sym); }