handle __ symbols differently (so we don't duplicate entries in the table)
and add non_null.
This commit is contained in:
parent
1e92e63851
commit
b29ce927f5
@ -1,5 +1,5 @@
|
||||
%{
|
||||
/* $NetBSD: cgram.y,v 1.87 2016/12/29 19:40:21 christos Exp $ */
|
||||
/* $NetBSD: cgram.y,v 1.88 2016/12/29 23:54:29 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
|
||||
@ -35,7 +35,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#if defined(__RCSID) && !defined(lint)
|
||||
__RCSID("$NetBSD: cgram.y,v 1.87 2016/12/29 19:40:21 christos Exp $");
|
||||
__RCSID("$NetBSD: cgram.y,v 1.88 2016/12/29 23:54:29 christos Exp $");
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -214,6 +214,7 @@ anonymize(sym_t *s)
|
||||
%token <y_type> T_AT_MAY_ALIAS
|
||||
%token <y_type> T_AT_MODE
|
||||
%token <y_type> T_AT_NORETURN
|
||||
%token <y_type> T_AT_NON_NULL
|
||||
%token <y_type> T_AT_NO_INSTRUMENT_FUNCTION
|
||||
%token <y_type> T_AT_PACKED
|
||||
%token <y_type> T_AT_PURE
|
||||
@ -513,6 +514,7 @@ type_attribute_spec:
|
||||
| T_AT_ALIGNED T_LPARN constant T_RPARN
|
||||
| T_AT_SENTINEL T_LPARN constant T_RPARN
|
||||
| T_AT_FORMAT_ARG T_LPARN constant T_RPARN
|
||||
| T_AT_NON_NULL T_LPARN constant T_RPARN
|
||||
| T_AT_MODE T_LPARN T_NAME T_RPARN
|
||||
| T_AT_ALIAS T_LPARN string T_RPARN
|
||||
| T_AT_SECTION T_LPARN string T_RPARN
|
||||
|
@ -1,5 +1,5 @@
|
||||
%{
|
||||
/* $NetBSD: scan.l,v 1.72 2016/12/29 19:40:35 christos Exp $ */
|
||||
/* $NetBSD: scan.l,v 1.73 2016/12/29 23:54:29 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
|
||||
@ -35,7 +35,7 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#if defined(__RCSID) && !defined(lint)
|
||||
__RCSID("$NetBSD: scan.l,v 1.72 2016/12/29 19:40:35 christos Exp $");
|
||||
__RCSID("$NetBSD: scan.l,v 1.73 2016/12/29 23:54:29 christos Exp $");
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -203,132 +203,84 @@ static struct kwtab {
|
||||
u_int kw_c99 : 1; /* c99 keyword */
|
||||
u_int kw_gcc : 1; /* GCC keyword */
|
||||
u_int kw_attr : 1; /* GCC attribute, keyword */
|
||||
u_int kw_deco : 3; /* name[1] __name[2] __name__[4] */
|
||||
} kwtab[] = {
|
||||
{ "__alignof__", T_ALIGNOF, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__attribute__",T_ATTRIBUTE, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "__attribute",T_ATTRIBUTE, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "__packed__", T_AT_PACKED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "packed", T_AT_PACKED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__alias__", T_AT_ALIAS, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "alias", T_AT_ALIAS, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__aligned__",T_AT_ALIGNED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "aligned", T_AT_ALIGNED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__transparent_union__",T_AT_TUNION,0,0, 0, 0, 0, 1, 1 },
|
||||
{ "transparent_union",T_AT_TUNION,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__unused__", T_AT_UNUSED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "unused", T_AT_UNUSED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__used__", T_AT_USED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "used", T_AT_USED, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__always_inline__", T_AT_ALWAYS_INLINE,
|
||||
0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "always_inline", T_AT_ALWAYS_INLINE,
|
||||
0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__gnu_inline__",T_AT_GNU_INLINE,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "gnu_inline", T_AT_GNU_INLINE,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__constructor__",T_AT_CONSTRUCTOR,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "constructor",T_AT_CONSTRUCTOR,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__deprecated__",T_AT_DEPRECATED,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "deprecated", T_AT_DEPRECATED,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__may_alias__",T_AT_MAY_ALIAS,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "may_alias", T_AT_MAY_ALIAS, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "format", T_AT_FORMAT, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__format__", T_AT_FORMAT, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "printf", T_AT_FORMAT_PRINTF,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__printf__", T_AT_FORMAT_PRINTF,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "scanf", T_AT_FORMAT_SCANF,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__scanf__", T_AT_FORMAT_SCANF,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "strfmon", T_AT_FORMAT_STRFMON,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__strfmon__",T_AT_FORMAT_STRFMON,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "strftime", T_AT_FORMAT_STRFTIME,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__strftime__",T_AT_FORMAT_STRFTIME,0,0, 0, 0, 0, 1, 1 },
|
||||
{ "pure", T_AT_PURE, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__pure__", T_AT_PURE, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "noreturn", T_AT_NORETURN, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__noreturn__",T_AT_NORETURN, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "_Bool", T_TYPE, 0, BOOL, 0, 0,1,0,0,1 },
|
||||
{ "_Complex", T_TYPE, 0, COMPLEX,0, 0,1,0,0,1 },
|
||||
{ "_Generic", T_GENERIC, 0, 0, 0, 0,1,0,0,1 },
|
||||
{ "alias", T_AT_ALIAS, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "aligned", T_AT_ALIGNED, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "alignof", T_ALIGNOF, 0, 0, 0, 0,0,0,0,4 },
|
||||
{ "always_inline", T_AT_ALWAYS_INLINE, 0,0, 0, 0,0,1,1,5 },
|
||||
{ "asm", T_ASM, 0, 0, 0, 0,0,1,0,7 },
|
||||
{ "attribute", T_ATTRIBUTE, 0, 0, 0, 0,0,1,0,6 },
|
||||
{ "auto", T_SCLASS, AUTO, 0, 0, 0,0,0,0,1 },
|
||||
{ "break", T_BREAK, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "case", T_CASE, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "char", T_TYPE, 0, CHAR, 0, 0,0,0,0,1 },
|
||||
{ "cold", T_AT_COLD, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "const", T_QUAL, 0, 0, CONST, 1,0,0,0,7 },
|
||||
{ "constructor",T_AT_CONSTRUCTOR,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "continue", T_CONTINUE, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "default", T_DEFAULT, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "deprecated", T_AT_DEPRECATED,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "do", T_DO, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "double", T_TYPE, 0, DOUBLE, 0, 0,0,0,0,1 },
|
||||
{ "else", T_ELSE, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "enum", T_ENUM, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "extension", T_EXTENSION, 0, 0, 0, 0,0,1,0,4 },
|
||||
{ "extern", T_SCLASS, EXTERN, 0, 0, 0,0,0,0,1 },
|
||||
{ "float", T_TYPE, 0, FLOAT, 0, 0,0,0,0,1 },
|
||||
{ "for", T_FOR, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "format", T_AT_FORMAT, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "format_arg", T_AT_FORMAT_ARG,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "gnu_inline", T_AT_GNU_INLINE,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "goto", T_GOTO, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "if", T_IF, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "imag", T_IMAG, 0, 0, 0, 0,1,0,0,4 },
|
||||
{ "inline", T_SCLASS, INLINE, 0, 0, 0,1,0,0,7 },
|
||||
{ "int", T_TYPE, 0, INT, 0, 0,0,0,0,1 },
|
||||
{ "long", T_TYPE, 0, LONG, 0, 0,0,0,0,1 },
|
||||
{ "may_alias", T_AT_MAY_ALIAS, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "mode", T_AT_MODE, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "no_instrument_function", T_AT_NO_INSTRUMENT_FUNCTION,
|
||||
0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__no_instrument_function", T_AT_NO_INSTRUMENT_FUNCTION,
|
||||
0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__no_instrument_function__", T_AT_NO_INSTRUMENT_FUNCTION,
|
||||
0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "sentinel", T_AT_SENTINEL, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__sentinel__",T_AT_SENTINEL, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "format_arg", T_AT_FORMAT_ARG,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__format_arg__", T_AT_FORMAT_ARG,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "returns_twice", T_AT_RETURNS_TWICE,0,0, 0, 0, 0, 1, 1 },
|
||||
{ "__returns_twice__", T_AT_RETURNS_TWICE,0,0, 0, 0, 0, 1, 1 },
|
||||
{ "cold", T_AT_COLD, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__cold__", T_AT_COLD, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "asm", T_ASM, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "__asm", T_ASM, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__asm__", T_ASM, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "auto", T_SCLASS, AUTO, 0, 0, 0, 0, 0, 0 },
|
||||
{ "break", T_BREAK, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "_Bool", T_TYPE, 0, BOOL, 0, 0, 1, 0, 0 },
|
||||
{ "case", T_CASE, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "char", T_TYPE, 0, CHAR, 0, 0, 0, 0, 0 },
|
||||
{ "const", T_QUAL, 0, 0, CONST, 1, 0, 0, 0 },
|
||||
{ "_Complex", T_TYPE, 0, COMPLEX,0, 0, 1, 0, 0 },
|
||||
{ "__const__", T_QUAL, 0, 0, CONST, 0, 0, 0, 0 },
|
||||
{ "__const", T_QUAL, 0, 0, CONST, 0, 0, 0, 0 },
|
||||
{ "continue", T_CONTINUE, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "default", T_DEFAULT, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "do", T_DO, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "double", T_TYPE, 0, DOUBLE, 0, 0, 0, 0, 0 },
|
||||
{ "else", T_ELSE, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "enum", T_ENUM, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__extension__", T_EXTENSION, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "extern", T_SCLASS, EXTERN, 0, 0, 0, 0, 0, 0 },
|
||||
{ "float", T_TYPE, 0, FLOAT, 0, 0, 0, 0, 0 },
|
||||
{ "for", T_FOR, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "_Generic", T_GENERIC, 0, 0, 0, 0, 1, 0, 0 },
|
||||
{ "goto", T_GOTO, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "if", T_IF, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__imag__", T_IMAG, 0, 0, 0, 0, 1, 0, 0 },
|
||||
{ "inline", T_SCLASS, INLINE, 0, 0, 0, 1, 0, 0 },
|
||||
{ "__inline__", T_SCLASS, INLINE, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__inline", T_SCLASS, INLINE, 0, 0, 0, 0, 0, 0 },
|
||||
{ "int", T_TYPE, 0, INT, 0, 0, 0, 0, 0 },
|
||||
{ "__symbolrename", T_SYMBOLRENAME, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "long", T_TYPE, 0, LONG, 0, 0, 0, 0, 0 },
|
||||
{ "mode", T_AT_MODE, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__mode", T_AT_MODE, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__mode__", T_AT_MODE, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__real__", T_REAL, 0, 0, 0, 0, 1, 0, 0 },
|
||||
{ "register", T_SCLASS, REG, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__restrict__",T_QUAL, 0, 0, RESTRICT, 0, 1, 0, 0 },
|
||||
{ "restrict", T_QUAL, 0, 0, RESTRICT, 0, 1, 0, 0 },
|
||||
{ "return", T_RETURN, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "__packed", T_PACKED, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "section", T_AT_SECTION, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__section", T_AT_SECTION, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__section__",T_AT_SECTION, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "short", T_TYPE, 0, SHORT, 0, 0, 0, 0, 0 },
|
||||
{ "signed", T_TYPE, 0, SIGNED, 0, 1, 0, 0, 0 },
|
||||
{ "__signed__", T_TYPE, 0, SIGNED, 0, 0, 0, 0, 0 },
|
||||
{ "__signed", T_TYPE, 0, SIGNED, 0, 0, 0, 0, 0 },
|
||||
{ "sizeof", T_SIZEOF, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "static", T_SCLASS, STATIC, 0, 0, 0, 0, 0, 0 },
|
||||
{ "struct", T_SOU, 0, STRUCT, 0, 0, 0, 0, 0 },
|
||||
{ "switch", T_SWITCH, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ "typedef", T_SCLASS, TYPEDEF, 0, 0, 0, 0, 0, 0 },
|
||||
{ "typeof", T_TYPEOF, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "__typeof", T_TYPEOF, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "__typeof__", T_TYPEOF, 0, 0, 0, 0, 0, 1, 0 },
|
||||
{ "union", T_SOU, 0, UNION, 0, 0, 0, 0, 0 },
|
||||
{ "unsigned", T_TYPE, 0, UNSIGN, 0, 0, 0, 0, 0 },
|
||||
{ "void", T_TYPE, 0, VOID, 0, 0, 0, 0, 0 },
|
||||
{ "volatile", T_QUAL, 0, 0, VOLATILE, 1, 0, 0, 0 },
|
||||
{ "__volatile__", T_QUAL, 0, 0, VOLATILE, 0, 0, 0, 0 },
|
||||
{ "__volatile", T_QUAL, 0, 0, VOLATILE, 0, 0, 0, 0 },
|
||||
{ "visibility", T_AT_VISIBILITY,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__visibility",T_AT_VISIBILITY,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__visibility__",T_AT_VISIBILITY,0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "weak", T_AT_WEAK, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__weak", T_AT_WEAK, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "__weak__", T_AT_WEAK, 0, 0, 0, 0, 0, 1, 1 },
|
||||
{ "while", T_WHILE, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ NULL, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||
0, 0, 0, 0,0,1,1,5 },
|
||||
{ "non_null", T_AT_NON_NULL, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "noreturn", T_AT_NORETURN, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "packed", T_AT_PACKED, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "packed", T_PACKED, 0, 0, 0, 0,0,0,0,2 },
|
||||
{ "printf", T_AT_FORMAT_PRINTF,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "pure", T_AT_PURE, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "real", T_REAL, 0, 0, 0, 0,1,0,0,4 },
|
||||
{ "register", T_SCLASS, REG, 0, 0, 0,0,0,0,1 },
|
||||
{ "restrict", T_QUAL, 0, 0, RESTRICT, 0,1,0,0,5 },
|
||||
{ "return", T_RETURN, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "returns_twice", T_AT_RETURNS_TWICE,0,0, 0, 0,0,1,1,5 },
|
||||
{ "scanf", T_AT_FORMAT_SCANF,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "section", T_AT_SECTION, 0, 0, 0, 0,0,1,1,7 },
|
||||
{ "sentinel", T_AT_SENTINEL, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "short", T_TYPE, 0, SHORT, 0, 0,0,0,0,1 },
|
||||
{ "signed", T_TYPE, 0, SIGNED, 0, 1,0,0,0,3 },
|
||||
{ "sizeof", T_SIZEOF, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "static", T_SCLASS, STATIC, 0, 0, 0,0,0,0,1 },
|
||||
{ "strfmon", T_AT_FORMAT_STRFMON,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "strftime", T_AT_FORMAT_STRFTIME,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "struct", T_SOU, 0, STRUCT, 0, 0,0,0,0,1 },
|
||||
{ "switch", T_SWITCH, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ "symbolrename", T_SYMBOLRENAME, 0, 0, 0, 0,0,0,0,2 },
|
||||
{ "transparent_union",T_AT_TUNION,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "typedef", T_SCLASS, TYPEDEF, 0, 0, 0,0,0,0,1 },
|
||||
{ "typeof", T_TYPEOF, 0, 0, 0, 0,0,1,0,5 },
|
||||
{ "union", T_SOU, 0, UNION, 0, 0,0,0,0,1 },
|
||||
{ "unsigned", T_TYPE, 0, UNSIGN, 0, 0,0,0,0,1 },
|
||||
{ "unused", T_AT_UNUSED, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "used", T_AT_USED, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "visibility", T_AT_VISIBILITY,0, 0, 0, 0,0,1,1,5 },
|
||||
{ "void", T_TYPE, 0, VOID, 0, 0,0,0,0,1 },
|
||||
{ "volatile", T_QUAL, 0, 0, VOLATILE, 1,0,0,0,7 },
|
||||
{ "weak", T_AT_WEAK, 0, 0, 0, 0,0,1,1,5 },
|
||||
{ "while", T_WHILE, 0, 0, 0, 0,0,0,0,1 },
|
||||
{ NULL, 0, 0, 0, 0, 0,0,0,0,0 }
|
||||
};
|
||||
|
||||
/* Symbol table */
|
||||
@ -350,27 +302,38 @@ static sbuf_t *sbfrlst;
|
||||
symt_t symtyp;
|
||||
|
||||
|
||||
/*
|
||||
* All keywords are written to the symbol table. This saves us looking
|
||||
* in a extra table for each name we found.
|
||||
*/
|
||||
void
|
||||
initscan(void)
|
||||
static void
|
||||
addkw(struct kwtab *kw, int deco)
|
||||
{
|
||||
struct kwtab *kw;
|
||||
sym_t *sym;
|
||||
size_t h, i;
|
||||
uint64_t uq;
|
||||
size_t h;
|
||||
char buf[256];
|
||||
const char *name;
|
||||
|
||||
if (!(kw->kw_deco & deco))
|
||||
return;
|
||||
|
||||
switch (deco) {
|
||||
case 1:
|
||||
name = kw->kw_name;
|
||||
break;
|
||||
case 2:
|
||||
snprintf(buf, sizeof(buf), "__%s", kw->kw_name);
|
||||
name = strdup(buf);
|
||||
break;
|
||||
case 4:
|
||||
snprintf(buf, sizeof(buf), "__%s__", kw->kw_name);
|
||||
name = strdup(buf);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
|
||||
if (name == NULL)
|
||||
err(1, "Can't init symbol table");
|
||||
|
||||
for (kw = kwtab; kw->kw_name != NULL; kw++) {
|
||||
if ((kw->kw_c89 || kw->kw_c99) && tflag)
|
||||
continue;
|
||||
if (kw->kw_c99 && !(Sflag || gflag))
|
||||
continue;
|
||||
if (kw->kw_gcc && !gflag)
|
||||
continue;
|
||||
sym = getblk(sizeof (sym_t));
|
||||
sym->s_name = kw->kw_name;
|
||||
sym->s_name = name;
|
||||
sym->s_keyw = kw;
|
||||
sym->s_value.v_quad = kw->kw_token;
|
||||
if (kw->kw_token == T_TYPE || kw->kw_token == T_SOU) {
|
||||
@ -387,6 +350,29 @@ initscan(void)
|
||||
symtab[h] = sym;
|
||||
}
|
||||
|
||||
/*
|
||||
* All keywords are written to the symbol table. This saves us looking
|
||||
* in a extra table for each name we found.
|
||||
*/
|
||||
void
|
||||
initscan(void)
|
||||
{
|
||||
struct kwtab *kw;
|
||||
size_t i;
|
||||
uint64_t uq;
|
||||
|
||||
for (kw = kwtab; kw->kw_name != NULL; kw++) {
|
||||
if ((kw->kw_c89 || kw->kw_c99) && tflag)
|
||||
continue;
|
||||
if (kw->kw_c99 && !(Sflag || gflag))
|
||||
continue;
|
||||
if (kw->kw_gcc && !gflag)
|
||||
continue;
|
||||
addkw(kw, 1);
|
||||
addkw(kw, 2);
|
||||
addkw(kw, 4);
|
||||
}
|
||||
|
||||
/* initialize bit-masks for quads */
|
||||
for (i = 0; i < sizeof (uint64_t) * CHAR_BIT; i++) {
|
||||
qbmasks[i] = (uint64_t)1 << i;
|
||||
|
Loading…
Reference in New Issue
Block a user