/* ** cdecl -- C gibberish translator ** src/literals.h ** ** Copyright (C) 2017-2021 Paul J. Lucas ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ #ifndef cdecl_literals_H #define cdecl_literals_H /** * @file * Declares constants for cdecl and C/C++ language literals. */ // local #include "pjl_config.h" /* must go first */ #include "c_lang.h" /// @cond DOXYGEN_IGNORE _GL_INLINE_HEADER_BEGIN #ifndef C_LITERALS_INLINE # define C_LITERALS_INLINE _GL_INLINE #endif /* C_LITERALS_INLINE */ /// @endcond /** * @defgroup literals-group Literal Strings * Declares constants for cdecl and C/C++ language literals. * @{ */ ////////// literals /////////////////////////////////////////////////////////// // A literal starting with "H_" is pseudo-English for the same literal starting // with "L_" and are spelled the same except that '-' replaces '_' ("H_" for // "hyphen"). // If you add a new literal and it is: // // + A cdecl command only, update CDECL_KEYWORDS in lexer.l and // AC_CDECL_COMMANDS in autocomplete.c (if you want it auto-completable). // // + A cdecl command that is also a C/C++ keyword -OR- a C/C++ keyword only, // update C_KEYWORDS in c_keywords.c. // english extern char const L_ALIGN[]; extern char const L_ALIGNED[]; extern char const L_ALL[]; extern char const L_ARRAY[]; extern char const L_AS[]; extern char const L_BITS[]; extern char const L_BYTES[]; extern char const L_CAST[]; extern char const L_COMMAND[]; // synonym for "commands" extern char const L_COMMANDS[]; extern char const L_DECLARE[]; extern char const L_DEFAULTED[]; // synonym for "default" extern char const L_DEFINE[]; extern char const L_DELETED[]; // synonym for "delete" extern char const L_ENGLISH[]; extern char const L_EVAL[]; // synonym for "evaluation" extern char const L_EVALUATION[]; extern char const L_EXIT[]; extern char const L_EXPLAIN[]; extern char const L_EXPR[]; // synonym for "expression" extern char const L_EXPRESSION[]; extern char const L_FUNC[]; // synonym for "function" extern char const L_FUNCTION[]; extern char const L_HELP[]; extern char const L_INIT[]; // synonym for "initialization" extern char const L_INITIALIZATION[]; extern char const L_INTO[]; extern char const L_LINKAGE[]; extern char const L_MBR[]; // synonym for "member" extern char const L_MEMBER[]; extern char const L_NO[]; extern char const H_NON_MBR[]; // synonym for "non-member" extern char const H_NON_MEMBER[]; extern char const L_OF[]; extern char const L_OPTIONS[]; extern char const L_POINTER[]; extern char const L_PREDEF[]; // synonym for "predefined" extern char const L_PREDEFINED[]; extern char const L_PTR[]; // synonym for "pointer" extern char const L_Q[]; // synonym for "quit" extern char const L_QUIT[]; extern char const L_REF[]; // synonym for "reference" extern char const L_REFERENCE[]; extern char const L_RET[]; // synonym for "returning" extern char const L_RETURNING[]; extern char const L_RVALUE[]; extern char const L_SET_COMMAND[]; // L_SET is synonym for SEEK_SET extern char const L_SHOW[]; extern char const L_TO[]; extern char const L_USER[]; extern char const L_VECTOR[]; // synonym for "array" extern char const L_WIDTH[]; // K&R extern char const L_AUTO[]; extern char const L_AUTOMATIC[]; // synonym for "auto", "__auto_type" extern char const L_BREAK[]; extern char const L_CASE[]; extern char const L_CHAR[]; extern char const L_CHARACTER[]; // English for "char" extern char const L_CONTINUE[]; extern char const L_DEFAULT[]; extern char const L_DO[]; extern char const L_DOUBLE[]; extern char const H_DOUBLE_PRECISION[]; // English for "double" extern char const L_ELSE[]; extern char const L_EXTERN[]; extern char const L_EXTERNAL[]; // English for "extern" extern char const L_FLOAT[]; extern char const H_FLOATING_POINT[]; // English for "float" extern char const L_FOR[]; extern char const L_GOTO[]; extern char const L_IF[]; extern char const L_INT[]; extern char const L_INTEGER[]; // English for "int" extern char const L_LONG[]; extern char const L_REGISTER[]; extern char const L_RETURN[]; extern char const L_SHORT[]; extern char const L_SIZEOF[]; extern char const L_STATIC[]; extern char const L_STRUCT[]; extern char const L_STRUCTURE[]; // English for "struct" extern char const L_SWITCH[]; extern char const L_TYPE[]; // English for "typedef" extern char const L_TYPEDEF[]; extern char const L_UNION[]; extern char const L_UNSIGNED[]; extern char const L_WHILE[]; // C89 extern char const L_ASM[]; extern char const L_CONST[]; extern char const L_CONSTANT[]; // English for "const" extern char const L_ELLIPSIS[]; // ... extern char const L_ENUM[]; extern char const L_ENUMERATION[]; // English for "enum" extern char const L_SIGNED[]; extern char const L_VARARGS[]; // synonym for "..." extern char const L_VARIADIC[]; // synonym for "..." extern char const L_VOID[]; extern char const L_VOLATILE[]; // C99 extern char const L__BOOL[]; extern char const L__COMPLEX[]; extern char const L_COMPLEX[]; // synonym for "_Complex" extern char const L__IMAGINARY[]; extern char const L_IMAGINARY[]; // synonym for "_Imaginary" extern char const L_INLINE[]; extern char const L_LEN[]; // synonym for "length" extern char const L_LENGTH[]; // for "variable [length] array" extern char const L_RESTRICT[]; extern char const L_RESTRICTED[]; // synonym for "restrict" extern char const L_VAR[]; // synonym for "variable" extern char const L_VARIABLE[]; // for "variable [length] array" extern char const L_WCHAR_T[]; // C11 extern char const L__ALIGNAS[]; extern char const L__ALIGNOF[]; extern char const L__ATOMIC[]; extern char const L_ATOMIC[]; // synonym for "_Atomic" extern char const L__GENERIC[]; extern char const L__NORETURN[]; extern char const H_NO_RETURN[]; // English for "_Noreturn" extern char const H_NON_RETURNING[]; // English for "_Noreturn" extern char const L__STATIC_ASSERT[]; extern char const L__THREAD_LOCAL[]; extern char const L_THREAD[], L_LOCAL[]; extern char const H_THREAD_LOCAL[]; // English for "_Thread_local" // C++ extern char const L_BOOL[]; extern char const L_CATCH[]; extern char const L_CLASS[]; extern char const L_CONSTRUCTOR[]; extern char const L_CONST_CAST[]; extern char const L_CONV[]; // synonym for "conversion" extern char const L_CONVERSION[]; extern char const L_CTOR[]; // synonym for "constructor" extern char const L_DELETE[]; extern char const L_DESTRUCTOR[]; extern char const L_DTOR[]; // synonym for "destructor" extern char const L_DYNAMIC[]; extern char const L_DYNAMIC_CAST[]; extern char const L_EXPLICIT[]; extern char const L_FALSE[]; extern char const L_FRIEND[]; extern char const L_MUTABLE[]; extern char const L_NAMESPACE[]; extern char const L_NEW[]; extern char const H_NON_THROWING[]; // English for "throw" extern char const L_OPER[]; // synonym for "operator" extern char const L_OPERATOR[]; extern char const L_PRIVATE[]; extern char const L_PROTECTED[]; extern char const L_PUBLIC[]; extern char const L_PURE[]; extern char const L_REINTERPRET[]; extern char const L_REINTERPRET_CAST[]; extern char const L_SCOPE[]; extern char const L_STATIC_CAST[]; extern char const L_TEMPLATE[]; extern char const L_THIS[]; extern char const L_THROW[]; extern char const L_TRUE[]; extern char const L_TRY[]; extern char const L_TYPEID[]; extern char const L_TYPENAME[]; extern char const L_USING[]; extern char const L_VIRTUAL[]; // C++11 extern char const L_ALIGNAS[]; extern char const L_ALIGNOF[]; extern char const L_CARRIES_DEPENDENCY[]; extern char const L_CARRIES[], L_DEPENDENCY[]; extern char const H_CARRIES_DEPENDENCY[]; // English for "carries_dependency" extern char const L_CONSTEXPR[]; extern char const L_DECLTYPE[]; extern char const L_FINAL[]; extern char const L_NOEXCEPT[]; extern char const L_EXCEPT[]; extern char const L_NORETURN[]; extern char const L_LITERAL[]; extern char const H_NO_EXCEPT[]; // English for "noexcept" extern char const H_NO_EXCEPTION[]; // English for "noexcept" extern char const L_NULLPTR[]; extern char const L_OVERRIDE[]; extern char const L_OVERRIDDEN[]; // English for "override" extern char const L_STATIC_ASSERT[]; extern char const L_THREAD_LOCAL[]; extern char const H_USER_DEF[]; // synonym for "user-defined" extern char const H_USER_DEFINED[]; // C11 & C++11 extern char const L_CHAR16_T[]; extern char const L_CHAR32_T[]; // C2X & C++14 extern char const L_DEPRECATED[]; extern char const L___DEPRECATED__[]; // C++17 extern char const L_MAYBE_UNUSED[]; extern char const L_MAYBE[], L_UNUSED[]; extern char const H_MAYBE_UNUSED[]; // English for "maybe_unused" extern char const L___MAYBE_UNUSED__[]; extern char const L_NODISCARD[]; extern char const L_DISCARD[]; extern char const H_NO_DISCARD[]; // English for "nodiscard" extern char const L___NODISCARD__[]; extern char const H_NON_DISCARDABLE[]; // English for "nodiscard" // C++20 extern char const L_CHAR8_T[]; extern char const L_CONCEPT[]; extern char const L_CONSTEVAL[]; extern char const L_CONSTINIT[]; extern char const L_CO_AWAIT[]; extern char const L_CO_RETURN[]; extern char const L_CO_YIELD[]; extern char const L_EXPORT[]; extern char const L_EXPORTED[]; // English for "export" extern char const L_NO_UNIQUE_ADDRESS[]; extern char const L_UNIQUE[], L_ADDRESS[]; extern char const H_NO_UNIQUE_ADDRESS[]; // English for "no_unique_address" extern char const H_NON_UNIQUE_ADDRESS[]; // English for "no_unique_address" extern char const L_REQUIRES[]; // Alternative tokens extern char const L_AND[]; // && extern char const L_AND_EQ[]; // &= extern char const L_BITAND[]; // & extern char const L_BITOR[]; // | extern char const L_COMPL[]; // ~ extern char const L_NOT[]; // ! extern char const L_NOT_EQ[]; // != extern char const L_OR[]; // || extern char const L_OR_EQ[]; // |= extern char const L_XOR[]; // ^ extern char const L_XOR_EQ[]; // ^= // Embedded C extensions extern char const L_EMC__ACCUM[]; extern char const L_EMC_ACCUM[]; // synonym for "_Accum" extern char const L_EMC__FRACT[]; extern char const L_EMC_FRACT[]; // synonym for "_Fract" extern char const L_EMC__SAT[]; extern char const L_EMC_SAT[]; // synonym for "_Sat" extern char const L_EMC_SATURATED[]; // English for "_Sat" // Unified Parallel C extensions extern char const L_UPC_RELAXED[]; extern char const L_UPC_SHARED[]; extern char const L_UPC_STRICT[]; // GNU extensions extern char const L_GNU___ATTRIBUTE__[]; extern char const L_GNU___AUTO_TYPE[]; extern char const L_GNU___COMPLEX[]; extern char const L_GNU___COMPLEX__[]; extern char const L_GNU___CONST[]; extern char const L_GNU___INLINE[]; extern char const L_GNU___INLINE__[]; extern char const L_GNU___RESTRICT[]; extern char const L_GNU___RESTRICT__[]; extern char const L_GNU___SIGNED[]; extern char const L_GNU___SIGNED__[]; extern char const L_GNU___THREAD[]; extern char const L_GNU___VOLATILE[]; extern char const L_GNU___VOLATILE__[]; // Apple extensions extern char const L_APPLE___BLOCK[]; // storage class extern char const L_APPLE_BLOCK[]; // Engligh for '^' // Microsoft extensions // // Only some of these keywords have both two and one leading underscore; see // . extern char const L_MSC__ASM[]; extern char const L_MSC___ASM[]; extern char const L_MSC__CDECL[]; extern char const L_MSC___CDECL[]; extern char const L_MSC_CDECL[]; // English for "__cdecl" extern char const L_MSC___CLRCALL[]; extern char const L_MSC_CLRCALL[]; // English for "__clrcall" extern char const L_MSC__DECLSPEC[]; extern char const L_MSC___DECLSPEC[]; extern char const L_MSC__FASTCALL[]; extern char const L_MSC___FASTCALL[]; extern char const L_MSC_FASTCALL[]; // English for "__fastcall" extern char const L_MSC__FORCEINLINE[]; extern char const L_MSC___FORCEINLINE[]; extern char const L_MSC__INLINE[]; extern char const L_MSC__RESTRICT[]; extern char const L_MSC__STDCALL[]; extern char const L_MSC___STDCALL[]; extern char const L_MSC_STDCALL[]; // English for "__stdcall" extern char const L_MSC___THISCALL[]; extern char const L_MSC_THISCALL[]; // English for "__thiscall" extern char const L_MSC__VECTORCALL[]; extern char const L_MSC___VECTORCALL[]; extern char const L_MSC_VECTORCALL[]; // English for "__vectorcall" extern char const L_MSC_WINAPI[]; // synonym for "__stdcall" ////////// extern functions /////////////////////////////////////////////////// /** * Gets the alignas literal for the current language. * * @return Returns either `_Alignas` (for C) or `alignas` (for C++). */ C_LITERALS_INLINE PJL_WARN_UNUSED_RESULT char const* alignas_lang( void ) { return OPT_LANG_IS(C_ANY) ? L__ALIGNAS : L_ALIGNAS; } /////////////////////////////////////////////////////////////////////////////// /** @} */ #endif /* cdecl_literals_H */ /* vim:set et sw=2 ts=2: */