You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
486 lines
7.9 KiB
486 lines
7.9 KiB
import os,sys,re |
|
|
|
kar_types = frozenset([ |
|
"char", |
|
"signed char", |
|
"unsigned char", |
|
"int", |
|
"signed", |
|
"signed int", |
|
"unsigned", |
|
"unsigned int", |
|
"short", |
|
"short int", |
|
"short signed", |
|
"short signed int", |
|
"short unsigned", |
|
"short unsigned int", |
|
"signed short", |
|
"signed short int", |
|
"unsigned short", |
|
"unsigned short int", |
|
"long", |
|
"long int", |
|
"long signed", |
|
"long signed int", |
|
"long unsigned", |
|
"long unsigned int", |
|
"signed long", |
|
"signed long int", |
|
"unsigned long", |
|
"unsigned long int", |
|
"float", |
|
"double", |
|
]) |
|
|
|
ansi_types = frozenset([ |
|
"void", |
|
"wchar_t", |
|
"wint_t", |
|
"size_t", |
|
"long double", |
|
]) |
|
|
|
c99_types = frozenset([ |
|
"long long", |
|
"long long int", |
|
"long long signed", |
|
"long long signed int", |
|
"long long unsigned", |
|
"long long unsigned int", |
|
"signed long long", |
|
"signed long long int", |
|
"unsigned long long", |
|
"unsigned long long int", |
|
"char16_t", |
|
"char32_t", |
|
"errno_t", |
|
"int8_t", |
|
"int16_t", |
|
"int32_t", |
|
"int64_t", |
|
"int_fast8_t", |
|
"int_fast16_t", |
|
"int_fast32_t", |
|
"int_fast64_t", |
|
"int_least16_t", |
|
"int_least32_t", |
|
"int_least64_t", |
|
"int_least8_t", |
|
"uint_fast16_t", |
|
"uint_fast32_t", |
|
"uint_fast64_t", |
|
"uint_fast8_t", |
|
"uint_least16_t", |
|
"uint_least32_t", |
|
"uint_least64_t", |
|
"uint_least8_t", |
|
"intmax_t", |
|
"intptr_t", |
|
"ptrdiff_t", |
|
"ssize_t", |
|
"uint16_t", |
|
"uint32_t", |
|
"uint64_t", |
|
"uint64_t", |
|
"uint8_t", |
|
"uintmax_t", |
|
"uintptr_t", |
|
]) |
|
|
|
c11_types = frozenset([ |
|
"atomic_bool", |
|
"atomic_char", |
|
"atomic_schar", |
|
"atomic_uchar", |
|
"atomic_short", |
|
"atomic_ushort", |
|
"atomic_int", |
|
"atomic_uint", |
|
"atomic_long", |
|
"atomic_ulong", |
|
"atomic_llong", |
|
"atomic_ullong", |
|
"atomic_char16_t", |
|
"atomic_char32_t", |
|
"atomic_wchar_t", |
|
"atomic_int_least8_t", |
|
"atomic_uint_least8_t", |
|
"atomic_int_least16_t", |
|
"atomic_uint_least16_t", |
|
"atomic_int_least32_t", |
|
"atomic_uint_least32_t", |
|
"atomic_int_least64_t", |
|
"atomic_uint_least64_t", |
|
"atomic_int_fast8_t", |
|
"atomic_uint_fast8_t", |
|
"atomic_int_fast16_t", |
|
"atomic_uint_fast16_t", |
|
"atomic_int_fast32_t", |
|
"atomic_uint_fast32_t", |
|
"atomic_int_fast64_t", |
|
"atomic_uint_fast64_t", |
|
"atomic_intptr_t", |
|
"atomic_uintptr_t", |
|
"atomic_size_t", |
|
"atomic_ptrdiff_t", |
|
"atomic_intmax_t", |
|
"atomic_uintmax_t", |
|
]) |
|
|
|
gnu_types = frozenset([ |
|
"__int128", |
|
"signed __int128", |
|
"unsigned __int128", |
|
]) |
|
|
|
cxx17_types = frozenset([ |
|
"bool", |
|
]) |
|
|
|
cosmo_types = frozenset([ |
|
"bool32", |
|
"int128_t", |
|
"int_fast128_t", |
|
"int_least128_t", |
|
"uint128_t", |
|
]) |
|
|
|
x86intrin_types = frozenset([ |
|
"__m1", |
|
"__m2", |
|
"__m64", |
|
"__m128", |
|
"__m128_u", |
|
"__m128d", |
|
"__m128d_u", |
|
"__m128i", |
|
"__m128i_u", |
|
"__v16qi", |
|
"__v16qs", |
|
"__v16qu", |
|
"__v1di", |
|
"__v2df", |
|
"__v2di", |
|
"__v2du", |
|
"__v2sf", |
|
"__v2si", |
|
"__v4hi", |
|
"__v4sf", |
|
"__v4si", |
|
"__v4su", |
|
"__v8hi", |
|
"__v8hu", |
|
"__v8qi", |
|
]) |
|
|
|
################################################################################ |
|
|
|
kar_kws = frozenset([ |
|
"auto", |
|
"if", |
|
"break", |
|
"case", |
|
"while", |
|
"continue", |
|
"default", |
|
"return", |
|
"do", |
|
"signed", |
|
"else", |
|
"sizeof", |
|
"extern", |
|
"struct", |
|
"switch", |
|
"for", |
|
"goto", |
|
"union", |
|
]) |
|
|
|
ansi_kws = frozenset([ |
|
"auto", |
|
"if", |
|
"break", |
|
"case", |
|
"volatile", |
|
"while", |
|
"const", |
|
"register", |
|
"continue", |
|
"default", |
|
"return", |
|
"do", |
|
"double", |
|
"signed", |
|
"else", |
|
"sizeof", |
|
"static", |
|
"extern", |
|
"struct", |
|
"float", |
|
"switch", |
|
"for", |
|
"typedef", |
|
"goto", |
|
"union", |
|
"typedef", |
|
"enum", |
|
]) |
|
|
|
c99_kws= frozenset([ |
|
"_Bool", |
|
"_Complex", |
|
"_Imaginary", |
|
"inline", |
|
"restrict", |
|
]) |
|
|
|
c11_kws = frozenset([ |
|
"_Alignas", |
|
"_Alignof", |
|
"_Atomic", |
|
"_Generic", |
|
"_Noreturn", |
|
"_Static_assert", |
|
"_Thread_local", |
|
]) |
|
|
|
cxx17_kws = frozenset([ |
|
"alignas", |
|
"alignof", |
|
"asm", |
|
"auto", |
|
"bool", |
|
"break", |
|
"case", |
|
"catch", |
|
"class", |
|
"const", |
|
"const_cast", |
|
"constexpr", |
|
"continue", |
|
"decltype", |
|
"default", |
|
"delete", |
|
"do", |
|
"double", |
|
"dynamic_cast", |
|
"else", |
|
"enum", |
|
"explicit", |
|
"export", |
|
"extern", |
|
"false", |
|
"float", |
|
"for", |
|
"friend", |
|
"goto", |
|
"if", |
|
"inline", |
|
"mutable", |
|
"namespace", |
|
"new", |
|
"noexcept", |
|
"nullptr", |
|
"operator", |
|
"private", |
|
"protected", |
|
"public", |
|
"register", |
|
"reinterpret_cast", |
|
"return", |
|
"short", |
|
"signed", |
|
"sizeof", |
|
"static", |
|
"static_assert", |
|
"static_cast", |
|
"struct", |
|
"switch", |
|
"template", |
|
"this", |
|
"thread_local", |
|
"throw", |
|
"true", |
|
"try", |
|
"typedef", |
|
"typeid", |
|
"typename", |
|
"union", |
|
"using", |
|
"virtual", |
|
"virtual", |
|
"volatile", |
|
"volatile", |
|
"while", |
|
]) |
|
|
|
cosmo_kws = frozenset([ |
|
"pass", |
|
"alignas", |
|
"aligned", |
|
"alignof", |
|
"artificial", |
|
"attributeallocalign", |
|
"attributeallocsize", |
|
"autotype", |
|
"byanymeansnecessary", |
|
"compatfn", |
|
"decltype", |
|
"externinline", |
|
"firstclass", |
|
"flattenout", |
|
"forcealignargpointer", |
|
"forceinline", |
|
"frownedupon", |
|
"hasatleast", |
|
"hidden", |
|
"initarray", |
|
"interruptfn", |
|
"mallocesque", |
|
"mayalias", |
|
"memcpyesque", |
|
"nocallback", |
|
"nodebuginfo", |
|
"nodiscard", |
|
"noinline", |
|
"noinstrument", |
|
"nointerpose", |
|
"nooptimize", |
|
"noprune", |
|
"noreturn", |
|
"nosideeffect", |
|
"nothrow", |
|
"nothrow", |
|
"null", |
|
"nullterminated", |
|
"paramsnonnull", |
|
"preinitarray", |
|
"printfesque", |
|
"privileged", |
|
"pureconst", |
|
"reallocesque", |
|
"relegated", |
|
"returnsnonnull", |
|
"returnspointerwithnoaliases", |
|
"returnstwice", |
|
"scanfesque", |
|
"strftimeesque", |
|
"strlenesque", |
|
"testonly", |
|
"textexit", |
|
"textreal", |
|
"textstartup", |
|
"textwindows", |
|
"thatispacked", |
|
"threadlocal", |
|
"typeof", |
|
"unreachable", |
|
"warnifused", |
|
"winstruct", |
|
"nocallersavedregisters", |
|
"pass", |
|
"alignas", |
|
"aligned", |
|
"alignof", |
|
"artificial", |
|
"attributeallocalign", |
|
"attributeallocsize", |
|
"autotype", |
|
"byanymeansnecessary", |
|
"compatfn", |
|
"decltype", |
|
"externinline", |
|
"firstclass", |
|
"flattenout", |
|
"forcealignargpointer", |
|
"forceinline", |
|
"frownedupon", |
|
"hasatleast", |
|
"hidden", |
|
"initarray", |
|
"interruptfn", |
|
"mallocesque", |
|
"mayalias", |
|
"memcpyesque", |
|
"nocallback", |
|
"nodebuginfo", |
|
"nodiscard", |
|
"noinline", |
|
"noinstrument", |
|
"nointerpose", |
|
"nooptimize", |
|
"noprune", |
|
"noreturn", |
|
"nosideeffect", |
|
"nothrow", |
|
"nothrow", |
|
"null", |
|
"nullterminated", |
|
"paramsnonnull", |
|
"preinitarray", |
|
"printfesque", |
|
"privileged", |
|
"pureconst", |
|
"reallocesque", |
|
"relegated", |
|
"returnsnonnull", |
|
"returnspointerwithnoaliases", |
|
"returnstwice", |
|
"scanfesque", |
|
"strftimeesque", |
|
"strlenesque", |
|
"testonly", |
|
"textexit", |
|
"textreal", |
|
"textstartup", |
|
"textwindows", |
|
"thatispacked", |
|
"threadlocal", |
|
"typeof", |
|
"unreachable", |
|
"warnifused", |
|
"winstruct", |
|
"nocallersavedregisters", |
|
]) |
|
|
|
################################################################################ |
|
|
|
typegroups = (("kar", kar_types), |
|
("ansi", ansi_types), |
|
("c99", c99_types), |
|
("c11", c11_types), |
|
("gnu", gnu_types), |
|
("cxx17", cxx17_types), |
|
("cosmo", cosmo_types), |
|
("x86intrin", x86intrin_types)) |
|
|
|
kwgroups = (("kar", kar_kws), |
|
("ansi", ansi_kws), |
|
("c99", c99_kws), |
|
("c11", c11_kws), |
|
("cxx17", cxx17_kws), |
|
("cosmo", cosmo_kws)) |
|
|
|
types = reduce(lambda a,b: a|b[1], typegroups, set()) |
|
kws = reduce(lambda a,b: a|b[1], kwgroups, set()) |
|
|
|
################################################################################ |
|
|
|
for name, gg, nonono in (("cosmo-c-types", typegroups, kws), |
|
("cosmo-c-keywords", kwgroups, types)): |
|
first = True |
|
sys.stdout.write("""\ |
|
(defconst %s-regex |
|
(let (""" % name) |
|
for k, vs in gg: |
|
sys.stdout.write(("""%s(%s (list %s)) |
|
""" % ("" if first else "\n ", k, """ |
|
""".join('"%s"' % repr(s)[1:][:-1] |
|
for s in vs - nonono))).rstrip()) |
|
first = False |
|
sys.stdout.write(""") |
|
(concat "\\<" (regexp-opt (append """) |
|
sys.stdout.write(""" |
|
""".join(k for k,_ in gg)) |
|
sys.stdout.write(""")) "\\>")))\n\n""")
|
|
|