NS_TYPEDEF
case NS_TYPEDEF:
node = lookup_symbol(id, NS_TYPEDEF);
node = lookup_symbol(id, NS_TYPEDEF);
case NS_TYPEDEF:
struct symbol *sym = lookup_symbol(token->ident, NS_SYMBOL | NS_TYPEDEF);
if (sym && sym->namespace == NS_TYPEDEF) {
struct symbol *sym = lookup_symbol(token->ident, NS_SYMBOL | NS_TYPEDEF);
return sym && (sym->namespace & NS_TYPEDEF);
struct symbol *s = lookup_symbol(t->ident, NS_TYPEDEF);
NS_TYPEDEF | NS_SYMBOL);
if (!s || !(s->namespace & NS_TYPEDEF))
keyword = lookup_keyword(token->ident, NS_KEYWORD | NS_TYPEDEF);
keyword = lookup_keyword(token->ident, NS_KEYWORD | NS_TYPEDEF);
struct symbol *s = lookup_keyword(token->ident, NS_TYPEDEF);
bind_symbol(decl, ident, is_typedef ? NS_TYPEDEF: NS_SYMBOL);
bind_symbol(decl, ident, is_typedef ? NS_TYPEDEF: NS_SYMBOL);
{ "const", NS_TYPEDEF, .op = &const_op },
{ "__const", NS_TYPEDEF, .op = &const_op },
{ "__const__", NS_TYPEDEF, .op = &const_op },
{ "volatile", NS_TYPEDEF, .op = &volatile_op },
{ "__volatile", NS_TYPEDEF, .op = &volatile_op },
{ "__volatile__", NS_TYPEDEF, .op = &volatile_op },
{ "restrict", NS_TYPEDEF, .op = &restrict_op},
{ "__restrict", NS_TYPEDEF, .op = &restrict_op},
{ "__restrict__", NS_TYPEDEF, .op = &restrict_op},
{ "_Atomic", NS_TYPEDEF, .op = &atomic_op},
{ "typedef", NS_TYPEDEF, .op = &typedef_op },
{ "void", NS_TYPEDEF, .type = &void_ctype, .op = &spec_op},
{ "char", NS_TYPEDEF, .op = &char_op },
{ "short", NS_TYPEDEF, .op = &short_op },
{ "int", NS_TYPEDEF, .op = &int_op },
{ "long", NS_TYPEDEF, .op = &long_op },
{ "float", NS_TYPEDEF, .op = &float_op },
{ "double", NS_TYPEDEF, .op = &double_op },
{ "signed", NS_TYPEDEF, .op = &signed_op },
{ "__signed", NS_TYPEDEF, .op = &signed_op },
{ "__signed__", NS_TYPEDEF, .op = &signed_op },
{ "unsigned", NS_TYPEDEF, .op = &unsigned_op },
{ "__int128", NS_TYPEDEF, .op = &int128_op },
{ "_Bool", NS_TYPEDEF, .type = &bool_ctype, .op = &spec_op },
{ "__builtin_va_list", NS_TYPEDEF, .type = &ptr_ctype, .op = &spec_op },
{ "__builtin_ms_va_list", NS_TYPEDEF, .type = &ptr_ctype, .op = &spec_op },
{ "__int128_t", NS_TYPEDEF, .type = &lllong_ctype, .op = &spec_op },
{ "__uint128_t",NS_TYPEDEF, .type = &ulllong_ctype, .op = &spec_op },
{ "_Float32", NS_TYPEDEF, .type = &float32_ctype, .op = &spec_op },
{ "_Float32x", NS_TYPEDEF, .type = &float32x_ctype, .op = &spec_op },
{ "_Float64", NS_TYPEDEF, .type = &float64_ctype, .op = &spec_op },
{ "_Float64x", NS_TYPEDEF, .type = &float64x_ctype, .op = &spec_op },
{ "_Float128", NS_TYPEDEF, .type = &float128_ctype, .op = &spec_op },
{ "typeof", NS_TYPEDEF, .op = &typeof_op },
{ "__typeof", NS_TYPEDEF, .op = &typeof_op },
{ "__typeof__", NS_TYPEDEF, .op = &typeof_op },
{ "__attribute", NS_TYPEDEF, .op = &attribute_op },
{ "__attribute__", NS_TYPEDEF, .op = &attribute_op },
{ "struct", NS_TYPEDEF, .op = &struct_op },
{ "union", NS_TYPEDEF, .op = &union_op },
{ "enum", NS_TYPEDEF, .op = &enum_op },
{ "inline", NS_TYPEDEF, .op = &inline_op },
{ "__inline", NS_TYPEDEF, .op = &inline_op },
{ "__inline__", NS_TYPEDEF, .op = &inline_op },
{ "_Noreturn", NS_TYPEDEF, .op = &noreturn_op },
{ "_Alignas", NS_TYPEDEF, .op = &alignas_op },
{ "auto", NS_TYPEDEF, .op = &auto_op },
{ "register", NS_TYPEDEF, .op = ®ister_op },
{ "static", NS_TYPEDEF, .op = &static_op },
{ "extern", NS_TYPEDEF, .op = &extern_op },
{ "__thread", NS_TYPEDEF, .op = &thread_op },
{ "_Thread_local", NS_TYPEDEF, .op = &thread_op },
if (ptr->ns == NS_TYPEDEF)
if (ident->reserved && (ns & (NS_TYPEDEF | NS_STRUCT | NS_LABEL | NS_SYMBOL))) {