/* Zeta API - Z/inspection/compiler/modules/TinyCC.h
 ______  ______________  ___
|__   / |  ___|___  ___|/   \
  /  /__|  __|   |  |  /  -  \
 /______|_____|  |__| /__/ \__\
Copyright (C) 2006-2024 Manuel Sainz de Baranda y Goñi.
Released under the terms of the GNU Lesser General Public License v3. */

#ifndef Z_inspection_compiler_modules_TinyCC_H
#define Z_inspection_compiler_modules_TinyCC_H

/* MARK: - Identification */

#define Z_COMPILER_IS_TINY_CC 1
#define Z_COMPILER_NAME	      Z_COMPILER_NAME_TINY_CC

#define Z_COMPILER_VERSION \
	Z_VERSION(__TINYC__ / 1000, (__TINYC__ % 1000) / 100, __TINYC__ % 100)

/*#define Z_COMPILER_VERSION_STRING*/

/* MARK: - ISA */

#if defined(__x86_64__)
#	define Z_COMPILER_ISA Z_ISA_X86_64

#elif	defined(__i386	) \
	defined(__i386__) \
	defined(i386	)

#	define Z_COMPILER_ISA Z_ISA_X86_32

#elif defined(__aarch64__)
#	define Z_COMPILER_ISA Z_ISA_AARCH64

#elif	defined(__arm  ) \
	defined(__arm__) \
	defined(arm    )

#	define Z_COMPILER_ISA Z_ISA_AARCH32

#elif defined(__C67__)
/*#	define Z_COMPILER_ISA Z_ISA_C67*/
#endif

#ifdef __ARMEL__
#	define Z_COMPILER_ISA_INTEGRAL_ENDIANNESS Z_ENDIANNESS_LITTLE
#endif

/* MARK: - OS */

#if	defined(__linux	 ) || \
	defined(__linux__)

#	define Z_COMPILER_OS Z_OS_LINUX

#elif	defined(_WIN32) || \
	defined(_WIN64)

#	define Z_COMPILER_OS Z_OS_WINDOWS

#elif	defined(__FreeBSD__	  ) || \
	defined(__FreeBSD_kernel__)

#	define Z_COMPILER_OS Z_OS_FREE_BSD

#elif defined(__NetBSD__)
#	define Z_COMPILER_OS Z_OS_NET_BSD

#elif defined(__OpenBSD__)
#	define Z_COMPILER_OS Z_OS_OPEN_BSD
#endif

/* MARK: - Bit field order */

/*#define Z_COMPILER_BIT_FIELD_ORDER_ALL*/
/*#define Z_COMPILER_BIT_FIELD_ORDER_8BIT*/
/*#define Z_COMPILER_BIT_FIELD_ORDER_16BIT*/
/*#define Z_COMPILER_BIT_FIELD_ORDER_32BIT*/
/*#define Z_COMPILER_BIT_FIELD_ORDER_64BIT*/
/*#define Z_COMPILER_BIT_FIELD_ORDER_128BIT*/

/* MARK: - Data model */

#if defined(__ILP32__)
#	define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_ILP32

#elif defined(__LLP64__)
#	define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_LLP64

#elif defined(__LP64__)
#	define Z_COMPILER_DATA_MODEL Z_DATA_MODEL_LP64
#endif

/* MARK: - Language: C78 */

/*#define Z_COMPILER_HAS_C_OLD_STYLE_FUNCTION*/
#define Z_COMPILER_HAS_C_OPERATOR_SIZEOF	1
#define Z_COMPILER_HAS_C_STORAGE_CLASS_AUTO	1
#define Z_COMPILER_HAS_C_STORAGE_CLASS_EXTERN	1
#define Z_COMPILER_HAS_C_STORAGE_CLASS_REGISTER 1
#define Z_COMPILER_HAS_C_STORAGE_CLASS_STATIC	1
#define Z_COMPILER_HAS_C_TYPE_DOUBLE		1
#define Z_COMPILER_HAS_C_TYPE_FLOAT		1

/* MARK: - Language: C89 */

#define Z_COMPILER_HAS_C89_CONSTANT_INITIALIZATION_FOR_LOCAL_AGGREGATE 1
#define Z_COMPILER_HAS_C89_CONSTANT_INITIALIZATION_FOR_UNION	       1
#define Z_COMPILER_HAS_C89_CONSTRUCT_AS_FUNCTION_ARGUMENT	       1
#define Z_COMPILER_HAS_C89_CONSTRUCT_RETURN			       1
#define Z_COMPILER_HAS_C89_CONSTRUCT_ASSIGNMENT			       1
#define Z_COMPILER_HAS_C89_CONSTRUCT_NAMESPACE			       1
#define Z_COMPILER_HAS_C89_ENUMERATION				       1
#define Z_COMPILER_HAS_C89_FUNCTION_POINTER_AUTODEREFERENCING	       1
#define Z_COMPILER_HAS_C89_FUNCTION_PROTOTYPE			       1
#define Z_COMPILER_HAS_C89_INTEGRAL_SWITCH			       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_INDENTATION		       1
#define Z_COMPILER_HAS_C89_REMOVAL_OF_ENTRY_AS_KEYWORD		       1
#define Z_COMPILER_HAS_C89_REMOVAL_OF_LONG_FLOAT_AS_TYPE	       1
#define Z_COMPILER_HAS_C89_STRING_LITERAL_CONCATENATION		       1
#define Z_COMPILER_HAS_C89_TRIGRAPHS				       1
#define Z_COMPILER_HAS_C89_VALUE_PRESERVING_UNSIGNED_CONVERSION	       1
#define Z_COMPILER_HAS_C89_ESCAPE_SEQUENCE_ALERT		       1
#define Z_COMPILER_HAS_C89_ESCAPE_SEQUENCE_HEXADECIMAL		       1
#define Z_COMPILER_HAS_C89_ESCAPE_SEQUENCE_VERTICAL_TAB		       1
#define Z_COMPILER_HAS_C89_LITERAL_FLOAT			       1
#define Z_COMPILER_HAS_C89_LITERAL_UNSIGNED			       1
#define Z_COMPILER_HAS_C89_LITERAL_WCHAR_T_CHARACTER		       1
#define Z_COMPILER_HAS_C89_LITERAL_WCHAR_T_STRING		       1
#define Z_COMPILER_HAS_C89_OPERATOR_UNARY_PLUS			       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_NULL		       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_ELIF		       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_ERROR		       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_LINE		       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_DIRECTIVE_PRAGMA	       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_OPERATOR_DEFINED	       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_OPERATOR_PASTING	       1
#define Z_COMPILER_HAS_C89_PREPROCESSOR_OPERATOR_STRINGIZING	       1
#define Z_COMPILER_HAS_C89_TYPE_LONG_DOUBLE			       1
#define Z_COMPILER_HAS_C89_TYPE_UNSIGNED_CHAR			       1
#define Z_COMPILER_HAS_C89_TYPE_UNSIGNED_LONG			       1
#define Z_COMPILER_HAS_C89_TYPE_UNSIGNED_SHORT			       1
#define Z_COMPILER_HAS_C89_TYPE_VOID				       1
#define Z_COMPILER_HAS_C89_TYPE_VOID_POINTER			       1
#define Z_COMPILER_HAS_C89_TYPE_MODIFIER_SIGNED			       1
#define Z_COMPILER_HAS_C89_TYPE_QUALIFIER_CONST			       1
#define Z_COMPILER_HAS_C89_TYPE_QUALIFIER_VOLATILE		       1

/* MARK: - Language: C95 */

/*#define Z_COMPILER_HAS_C95_DIGRAPHS*/

/* MARK: - Language: C99 */

/*#define Z_COMPILER_HAS_C99_COMPOUND_LITERAL*/
/*#define Z_COMPILER_HAS_C99_CONVERSION_OF_NON_LVALUE_ARRAY_TO_POINTER*/
/*#define Z_COMPILER_HAS_C99_CPP_STYLE_COMMENT*/
/*#define Z_COMPILER_HAS_C99_DESIGNATED_INITIALIZATION*/
/*#define Z_COMPILER_HAS_C99_EMPTY_MACRO_ARGUMENT*/
/*#define Z_COMPILER_HAS_C99_EXTENDED_IDENTIFIER*/
/*#define Z_COMPILER_HAS_C99_FLEXIBLE_ARRAY_MEMBER*/
/*#define Z_COMPILER_HAS_C99_FOR_WITH_DECLARATION*/
/*#define Z_COMPILER_HAS_C99_IDEMPOTENT_TYPE_QUALIFIERS*/
/*#define Z_COMPILER_HAS_C99_MIXED_DECLARATIONS_AND_CODE*/
/*#define Z_COMPILER_HAS_C99_NON_CONSTANT_INITIALIZATION_FOR_LOCAL_AGGREGATE*/
/*#define Z_COMPILER_HAS_C99_PREPROCESSOR_ARITHMETIC_DONE_IN_INTMAX*/
/*#define Z_COMPILER_HAS_C99_RELIABLE_INTEGER_DIVISION*/
/*#define Z_COMPILER_HAS_C99_REMOVAL_OF_ILL_FORMED_RETURN*/
/*#define Z_COMPILER_HAS_C99_REMOVAL_OF_IMPLICIT_FUNCTION_DECLARATION*/
/*#define Z_COMPILER_HAS_C99_REMOVAL_OF_IMPLICIT_INT*/
/*#define Z_COMPILER_HAS_C99_STATIC_IN_ARRAY_PARAMETER_DECLARATION*/
/*#define Z_COMPILER_HAS_C99_TRAILING_COMMA_ALLOWED_IN_ENUMERATION*/
/*#define Z_COMPILER_HAS_C99_TYPE_QUALIFIERS_IN_ARRAY_PARAMETER_DECLARATION*/
/*#define Z_COMPILER_HAS_C99_UNIVERSAL_CHARACTER_NAME*/
/*#define Z_COMPILER_HAS_C99_VARIADIC_MACRO*/
/*#define Z_COMPILER_HAS_C99_VLA*/
/*#define Z_COMPILER_HAS_C99_IDENTIFIER_FUNC*/
/*#define Z_COMPILER_HAS_C99_LITERAL_HEXADECIMAL_FLOATING_POINT*/
/*#define Z_COMPILER_HAS_C99_PREPROCESSOR_OPERATOR_PRAGMA*/
/*#define Z_COMPILER_HAS_C99_SPECIFIER_INLINE*/
/*#define Z_COMPILER_HAS_C99_STD_PRAGMA_CX_LIMITED_RANGE*/
/*#define Z_COMPILER_HAS_C99_STD_PRAGMA_FENV_ACCESS*/
/*#define Z_COMPILER_HAS_C99_STD_PRAGMA_FP_CONTRACT*/
/*#define Z_COMPILER_HAS_C99_TYPE_BOOL*/
/*#define Z_COMPILER_HAS_C99_TYPE_DOUBLE_COMPLEX*/
/*#define Z_COMPILER_HAS_C99_TYPE_DOUBLE_IMAGINARY*/
/*#define Z_COMPILER_HAS_C99_TYPE_FLOAT_COMPLEX*/
/*#define Z_COMPILER_HAS_C99_TYPE_FLOAT_IMAGINARY*/
/*#define Z_COMPILER_HAS_C99_TYPE_LONG_DOUBLE_COMPLEX*/
/*#define Z_COMPILER_HAS_C99_TYPE_LONG_DOUBLE_IMAGINARY*/
/*#define Z_COMPILER_HAS_C99_TYPE_LONG_LONG*/
/*#define Z_COMPILER_HAS_C99_TYPE_MODIFIER_COMPLEX*/
/*#define Z_COMPILER_HAS_C99_TYPE_MODIFIER_IMAGINARY*/
/*#define Z_COMPILER_HAS_C99_TYPE_QUALIFIER_RESTRICT*/

#endif /* Z_inspection_compiler_modules_TinyCC_H */
