[BACK]Return to scan.l CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / usr.bin / xlint / lint1

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/usr.bin/xlint/lint1/scan.l between version 1.72 and 1.73

version 1.72, 2016/12/29 19:40:35 version 1.73, 2016/12/29 23:54:29
Line 203  static struct kwtab {
Line 203  static struct kwtab {
         u_int   kw_c99 : 1;     /* c99 keyword */          u_int   kw_c99 : 1;     /* c99 keyword */
         u_int   kw_gcc : 1;     /* GCC keyword */          u_int   kw_gcc : 1;     /* GCC keyword */
         u_int   kw_attr : 1;    /* GCC attribute, keyword */          u_int   kw_attr : 1;    /* GCC attribute, keyword */
           u_int   kw_deco : 3;    /* name[1] __name[2] __name__[4] */
 } kwtab[] = {  } kwtab[] = {
         { "__alignof__", T_ALIGNOF,     0,      0,      0,        0, 0, 0, 0 },          { "_Bool",      T_TYPE,         0,      BOOL,   0,        0,1,0,0,1 },
         { "__attribute__",T_ATTRIBUTE,  0,      0,      0,        0, 0, 1, 0 },          { "_Complex",   T_TYPE,         0,      COMPLEX,0,        0,1,0,0,1 },
         { "__attribute",T_ATTRIBUTE,    0,      0,      0,        0, 0, 1, 0 },          { "_Generic",   T_GENERIC,      0,      0,      0,        0,1,0,0,1 },
         { "__packed__", T_AT_PACKED,    0,      0,      0,        0, 0, 1, 1 },          { "alias",      T_AT_ALIAS,     0,      0,      0,        0,0,1,1,5 },
         { "packed",     T_AT_PACKED,    0,      0,      0,        0, 0, 1, 1 },          { "aligned",    T_AT_ALIGNED,   0,      0,      0,        0,0,1,1,5 },
         { "__alias__",  T_AT_ALIAS,     0,      0,      0,        0, 0, 1, 1 },          { "alignof",    T_ALIGNOF,      0,      0,      0,        0,0,0,0,4 },
         { "alias",      T_AT_ALIAS,     0,      0,      0,        0, 0, 1, 1 },          { "always_inline", T_AT_ALWAYS_INLINE, 0,0,     0,        0,0,1,1,5 },
         { "__aligned__",T_AT_ALIGNED,   0,      0,      0,        0, 0, 1, 1 },          { "asm",        T_ASM,          0,      0,      0,        0,0,1,0,7 },
         { "aligned",    T_AT_ALIGNED,   0,      0,      0,        0, 0, 1, 1 },          { "attribute",  T_ATTRIBUTE,    0,      0,      0,        0,0,1,0,6 },
         { "__transparent_union__",T_AT_TUNION,0,0,      0,        0, 0, 1, 1 },          { "auto",       T_SCLASS,       AUTO,   0,      0,        0,0,0,0,1 },
         { "transparent_union",T_AT_TUNION,0,    0,      0,        0, 0, 1, 1 },          { "break",      T_BREAK,        0,      0,      0,        0,0,0,0,1 },
         { "__unused__", T_AT_UNUSED,    0,      0,      0,        0, 0, 1, 1 },          { "case",       T_CASE,         0,      0,      0,        0,0,0,0,1 },
         { "unused",     T_AT_UNUSED,    0,      0,      0,        0, 0, 1, 1 },          { "char",       T_TYPE,         0,      CHAR,   0,        0,0,0,0,1 },
         { "__used__",   T_AT_USED,      0,      0,      0,        0, 0, 1, 1 },          { "cold",       T_AT_COLD,      0,      0,      0,        0,0,1,1,5 },
         { "used",       T_AT_USED,      0,      0,      0,        0, 0, 1, 1 },          { "const",      T_QUAL,         0,      0,      CONST,    1,0,0,0,7 },
         { "__always_inline__", T_AT_ALWAYS_INLINE,          { "constructor",T_AT_CONSTRUCTOR,0,     0,      0,        0,0,1,1,5 },
                                         0,      0,      0,        0, 0, 1, 1 },          { "continue",   T_CONTINUE,     0,      0,      0,        0,0,0,0,1 },
         { "always_inline", T_AT_ALWAYS_INLINE,          { "default",    T_DEFAULT,      0,      0,      0,        0,0,0,0,1 },
                                         0,      0,      0,        0, 0, 1, 1 },          { "deprecated", T_AT_DEPRECATED,0,      0,      0,        0,0,1,1,5 },
         { "__gnu_inline__",T_AT_GNU_INLINE,0,   0,      0,        0, 0, 1, 1 },          { "do",         T_DO,           0,      0,      0,        0,0,0,0,1 },
         { "gnu_inline", T_AT_GNU_INLINE,0,      0,      0,        0, 0, 1, 1 },          { "double",     T_TYPE,         0,      DOUBLE, 0,        0,0,0,0,1 },
         { "__constructor__",T_AT_CONSTRUCTOR,0, 0,      0,        0, 0, 1, 1 },          { "else",       T_ELSE,         0,      0,      0,        0,0,0,0,1 },
         { "constructor",T_AT_CONSTRUCTOR,0,     0,      0,        0, 0, 1, 1 },          { "enum",       T_ENUM,         0,      0,      0,        0,0,0,0,1 },
         { "__deprecated__",T_AT_DEPRECATED,0,   0,      0,        0, 0, 1, 1 },          { "extension",  T_EXTENSION,    0,      0,      0,        0,0,1,0,4 },
         { "deprecated", T_AT_DEPRECATED,0,      0,      0,        0, 0, 1, 1 },          { "extern",     T_SCLASS,       EXTERN, 0,      0,        0,0,0,0,1 },
         { "__may_alias__",T_AT_MAY_ALIAS,0,     0,      0,        0, 0, 1, 1 },          { "float",      T_TYPE,         0,      FLOAT,  0,        0,0,0,0,1 },
         { "may_alias",  T_AT_MAY_ALIAS, 0,      0,      0,        0, 0, 1, 1 },          { "for",        T_FOR,          0,      0,      0,        0,0,0,0,1 },
         { "format",     T_AT_FORMAT,    0,      0,      0,        0, 0, 1, 1 },          { "format",     T_AT_FORMAT,    0,      0,      0,        0,0,1,1,5 },
         { "__format__", T_AT_FORMAT,    0,      0,      0,        0, 0, 1, 1 },          { "format_arg", T_AT_FORMAT_ARG,0,      0,      0,        0,0,1,1,5 },
         { "printf",     T_AT_FORMAT_PRINTF,0,   0,      0,        0, 0, 1, 1 },          { "gnu_inline", T_AT_GNU_INLINE,0,      0,      0,        0,0,1,1,5 },
         { "__printf__", T_AT_FORMAT_PRINTF,0,   0,      0,        0, 0, 1, 1 },          { "goto",       T_GOTO,         0,      0,      0,        0,0,0,0,1 },
         { "scanf",      T_AT_FORMAT_SCANF,0,    0,      0,        0, 0, 1, 1 },          { "if",         T_IF,           0,      0,      0,        0,0,0,0,1 },
         { "__scanf__",  T_AT_FORMAT_SCANF,0,    0,      0,        0, 0, 1, 1 },          { "imag",       T_IMAG,         0,      0,      0,        0,1,0,0,4 },
         { "strfmon",    T_AT_FORMAT_STRFMON,0,  0,      0,        0, 0, 1, 1 },          { "inline",     T_SCLASS,       INLINE, 0,      0,        0,1,0,0,7 },
         { "__strfmon__",T_AT_FORMAT_STRFMON,0,  0,      0,        0, 0, 1, 1 },          { "int",        T_TYPE,         0,      INT,    0,        0,0,0,0,1 },
         { "strftime",   T_AT_FORMAT_STRFTIME,0, 0,      0,        0, 0, 1, 1 },          { "long",       T_TYPE,         0,      LONG,   0,        0,0,0,0,1 },
         { "__strftime__",T_AT_FORMAT_STRFTIME,0,0,      0,        0, 0, 1, 1 },          { "may_alias",  T_AT_MAY_ALIAS, 0,      0,      0,        0,0,1,1,5 },
         { "pure",       T_AT_PURE,      0,      0,      0,        0, 0, 1, 1 },          { "mode",       T_AT_MODE,      0,      0,      0,        0,0,1,1,5 },
         { "__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 },  
         { "no_instrument_function", T_AT_NO_INSTRUMENT_FUNCTION,          { "no_instrument_function", T_AT_NO_INSTRUMENT_FUNCTION,
                                         0,      0,      0,        0, 0, 1, 1 },                                          0,      0,      0,        0,0,1,1,5 },
         { "__no_instrument_function", T_AT_NO_INSTRUMENT_FUNCTION,          { "non_null",   T_AT_NON_NULL,  0,      0,      0,        0,0,1,1,5 },
                                         0,      0,      0,        0, 0, 1, 1 },          { "noreturn",   T_AT_NORETURN,  0,      0,      0,        0,0,1,1,5 },
         { "__no_instrument_function__", T_AT_NO_INSTRUMENT_FUNCTION,          { "packed",     T_AT_PACKED,    0,      0,      0,        0,0,1,1,5 },
                                         0,      0,      0,        0, 0, 1, 1 },          { "packed",     T_PACKED,       0,      0,      0,        0,0,0,0,2 },
         { "sentinel",   T_AT_SENTINEL,  0,      0,      0,        0, 0, 1, 1 },          { "printf",     T_AT_FORMAT_PRINTF,0,   0,      0,        0,0,1,1,5 },
         { "__sentinel__",T_AT_SENTINEL, 0,      0,      0,        0, 0, 1, 1 },          { "pure",       T_AT_PURE,      0,      0,      0,        0,0,1,1,5 },
         { "format_arg", T_AT_FORMAT_ARG,0,      0,      0,        0, 0, 1, 1 },          { "real",       T_REAL,         0,      0,      0,        0,1,0,0,4 },
         { "__format_arg__", T_AT_FORMAT_ARG,0,  0,      0,        0, 0, 1, 1 },          { "register",   T_SCLASS,       REG,    0,      0,        0,0,0,0,1 },
         { "returns_twice", T_AT_RETURNS_TWICE,0,0,      0,        0, 0, 1, 1 },          { "restrict",   T_QUAL,         0,      0,      RESTRICT, 0,1,0,0,5 },
         { "__returns_twice__", T_AT_RETURNS_TWICE,0,0,  0,        0, 0, 1, 1 },          { "return",     T_RETURN,       0,      0,      0,        0,0,0,0,1 },
         { "cold",       T_AT_COLD,      0,      0,      0,        0, 0, 1, 1 },          { "returns_twice", T_AT_RETURNS_TWICE,0,0,      0,        0,0,1,1,5 },
         { "__cold__",   T_AT_COLD,      0,      0,      0,        0, 0, 1, 1 },          { "scanf",      T_AT_FORMAT_SCANF,0,    0,      0,        0,0,1,1,5 },
         { "asm",        T_ASM,          0,      0,      0,        0, 0, 1, 0 },          { "section",    T_AT_SECTION,   0,      0,      0,        0,0,1,1,7 },
         { "__asm",      T_ASM,          0,      0,      0,        0, 0, 0, 0 },          { "sentinel",   T_AT_SENTINEL,  0,      0,      0,        0,0,1,1,5 },
         { "__asm__",    T_ASM,          0,      0,      0,        0, 0, 0, 0 },          { "short",      T_TYPE,         0,      SHORT,  0,        0,0,0,0,1 },
         { "auto",       T_SCLASS,       AUTO,   0,      0,        0, 0, 0, 0 },          { "signed",     T_TYPE,         0,      SIGNED, 0,        1,0,0,0,3 },
         { "break",      T_BREAK,        0,      0,      0,        0, 0, 0, 0 },          { "sizeof",     T_SIZEOF,       0,      0,      0,        0,0,0,0,1 },
         { "_Bool",      T_TYPE,         0,      BOOL,   0,        0, 1, 0, 0 },          { "static",     T_SCLASS,       STATIC, 0,      0,        0,0,0,0,1 },
         { "case",       T_CASE,         0,      0,      0,        0, 0, 0, 0 },          { "strfmon",    T_AT_FORMAT_STRFMON,0,  0,      0,        0,0,1,1,5 },
         { "char",       T_TYPE,         0,      CHAR,   0,        0, 0, 0, 0 },          { "strftime",   T_AT_FORMAT_STRFTIME,0, 0,      0,        0,0,1,1,5 },
         { "const",      T_QUAL,         0,      0,      CONST,    1, 0, 0, 0 },          { "struct",     T_SOU,          0,      STRUCT, 0,        0,0,0,0,1 },
         { "_Complex",   T_TYPE,         0,      COMPLEX,0,        0, 1, 0, 0 },          { "switch",     T_SWITCH,       0,      0,      0,        0,0,0,0,1 },
         { "__const__",  T_QUAL,         0,      0,      CONST,    0, 0, 0, 0 },          { "symbolrename", T_SYMBOLRENAME, 0,    0,      0,        0,0,0,0,2 },
         { "__const",    T_QUAL,         0,      0,      CONST,    0, 0, 0, 0 },          { "transparent_union",T_AT_TUNION,0,    0,      0,        0,0,1,1,5 },
         { "continue",   T_CONTINUE,     0,      0,      0,        0, 0, 0, 0 },          { "typedef",    T_SCLASS,       TYPEDEF, 0,     0,        0,0,0,0,1 },
         { "default",    T_DEFAULT,      0,      0,      0,        0, 0, 0, 0 },          { "typeof",     T_TYPEOF,       0,      0,      0,        0,0,1,0,5 },
         { "do",         T_DO,           0,      0,      0,        0, 0, 0, 0 },          { "union",      T_SOU,          0,      UNION,  0,        0,0,0,0,1 },
         { "double",     T_TYPE,         0,      DOUBLE, 0,        0, 0, 0, 0 },          { "unsigned",   T_TYPE,         0,      UNSIGN, 0,        0,0,0,0,1 },
         { "else",       T_ELSE,         0,      0,      0,        0, 0, 0, 0 },          { "unused",     T_AT_UNUSED,    0,      0,      0,        0,0,1,1,5 },
         { "enum",       T_ENUM,         0,      0,      0,        0, 0, 0, 0 },          { "used",       T_AT_USED,      0,      0,      0,        0,0,1,1,5 },
         { "__extension__", T_EXTENSION, 0,      0,      0,        0, 0, 1, 0 },          { "visibility", T_AT_VISIBILITY,0,      0,      0,        0,0,1,1,5 },
         { "extern",     T_SCLASS,       EXTERN, 0,      0,        0, 0, 0, 0 },          { "void",       T_TYPE,         0,      VOID,   0,        0,0,0,0,1 },
         { "float",      T_TYPE,         0,      FLOAT,  0,        0, 0, 0, 0 },          { "volatile",   T_QUAL,         0,      0,      VOLATILE, 1,0,0,0,7 },
         { "for",        T_FOR,          0,      0,      0,        0, 0, 0, 0 },          { "weak",       T_AT_WEAK,      0,      0,      0,        0,0,1,1,5 },
         { "_Generic",   T_GENERIC,      0,      0,      0,        0, 1, 0, 0 },          { "while",      T_WHILE,        0,      0,      0,        0,0,0,0,1 },
         { "goto",       T_GOTO,         0,      0,      0,        0, 0, 0, 0 },          { NULL,         0,              0,      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 }  
 };  };
   
 /* Symbol table */  /* Symbol table */
Line 350  static sbuf_t  *sbfrlst;
Line 302  static sbuf_t  *sbfrlst;
 symt_t  symtyp;  symt_t  symtyp;
   
   
   static void
   addkw(struct kwtab *kw, int deco)
   {
           sym_t *sym;
           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");
   
           sym = getblk(sizeof (sym_t));
           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) {
                   sym->s_tspec = kw->kw_tspec;
           } else if (kw->kw_token == T_SCLASS) {
                   sym->s_scl = kw->kw_scl;
           } else if (kw->kw_token == T_QUAL) {
                   sym->s_tqual = kw->kw_tqual;
           }
           h = hash(sym->s_name);
           if ((sym->s_link = symtab[h]) != NULL)
                   symtab[h]->s_rlink = &sym->s_link;
           sym->s_rlink = &symtab[h];
           symtab[h] = sym;
   }
   
 /*  /*
  * All keywords are written to the symbol table. This saves us looking   * All keywords are written to the symbol table. This saves us looking
  * in a extra table for each name we found.   * in a extra table for each name we found.
Line 358  void
Line 358  void
 initscan(void)  initscan(void)
 {  {
         struct  kwtab *kw;          struct  kwtab *kw;
         sym_t   *sym;          size_t  i;
         size_t  h, i;  
         uint64_t uq;          uint64_t uq;
   
         for (kw = kwtab; kw->kw_name != NULL; kw++) {          for (kw = kwtab; kw->kw_name != NULL; kw++) {
Line 369  initscan(void)
Line 368  initscan(void)
                         continue;                          continue;
                 if (kw->kw_gcc && !gflag)                  if (kw->kw_gcc && !gflag)
                         continue;                          continue;
                 sym = getblk(sizeof (sym_t));                  addkw(kw, 1);
                 sym->s_name = kw->kw_name;                  addkw(kw, 2);
                 sym->s_keyw = kw;                  addkw(kw, 4);
                 sym->s_value.v_quad = kw->kw_token;  
                 if (kw->kw_token == T_TYPE || kw->kw_token == T_SOU) {  
                         sym->s_tspec = kw->kw_tspec;  
                 } else if (kw->kw_token == T_SCLASS) {  
                         sym->s_scl = kw->kw_scl;  
                 } else if (kw->kw_token == T_QUAL) {  
                         sym->s_tqual = kw->kw_tqual;  
                 }  
                 h = hash(sym->s_name);  
                 if ((sym->s_link = symtab[h]) != NULL)  
                         symtab[h]->s_rlink = &sym->s_link;  
                 sym->s_rlink = &symtab[h];  
                 symtab[h] = sym;  
         }          }
   
         /* initialize bit-masks for quads */          /* initialize bit-masks for quads */

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.73

CVSweb <webmaster@jp.NetBSD.org>