/* Zeta API - Z/inspection/C/modules/C99.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_C_modules_C99_H
#define Z_inspection_C_modules_C99_H

#include <Z/inspection/C/modules/C95.h>

#define Z_LANGUAGE_HAS_C99_COMPOUND_LITERAL				   1
#define Z_LANGUAGE_HAS_C99_CONVERSION_OF_NON_LVALUE_ARRAY_TO_POINTER	   1
#define Z_LANGUAGE_HAS_C99_CPP_STYLE_COMMENT				   1
#define Z_LANGUAGE_HAS_C99_DESIGNATED_INITIALIZATION			   1
#define Z_LANGUAGE_HAS_C99_EMPTY_MACRO_ARGUMENT				   1
#define Z_LANGUAGE_HAS_C99_EXTENDED_IDENTIFIER				   1
#define Z_LANGUAGE_HAS_C99_FLEXIBLE_ARRAY_MEMBER			   1
#define Z_LANGUAGE_HAS_C99_FOR_WITH_DECLARATION				   1
#define Z_LANGUAGE_HAS_C99_IDEMPOTENT_TYPE_QUALIFIERS			   1
#define Z_LANGUAGE_HAS_C99_MIXED_DECLARATIONS_AND_CODE			   1
#define Z_LANGUAGE_HAS_C99_NON_CONSTANT_INITIALIZATION_FOR_LOCAL_AGGREGATE 1
#define Z_LANGUAGE_HAS_C99_PREPROCESSOR_ARITHMETIC_DONE_IN_INTMAX	   1
#define Z_LANGUAGE_HAS_C99_RELIABLE_INTEGER_DIVISION			   1
#define Z_LANGUAGE_HAS_C99_REMOVAL_OF_ILL_FORMED_RETURN			   1
#define Z_LANGUAGE_HAS_C99_REMOVAL_OF_IMPLICIT_FUNCTION_DECLARATION	   1
#define Z_LANGUAGE_HAS_C99_REMOVAL_OF_IMPLICIT_INT			   1
#define Z_LANGUAGE_HAS_C99_STATIC_IN_ARRAY_PARAMETER_DECLARATION	   1
#define Z_LANGUAGE_HAS_C99_TRAILING_COMMA_ALLOWED_IN_ENUMERATION	   1
#define Z_LANGUAGE_HAS_C99_TYPE_QUALIFIERS_IN_ARRAY_PARAMETER_DECLARATION  1
#define Z_LANGUAGE_HAS_C99_UNIVERSAL_CHARACTER_NAME			   1
#define Z_LANGUAGE_HAS_C99_VARIADIC_MACRO				   1
#define Z_LANGUAGE_HAS_C99_VLA						   1
#define Z_LANGUAGE_HAS_C99_IDENTIFIER_FUNC				   1
#define Z_LANGUAGE_HAS_C99_LITERAL_HEXADECIMAL_FLOATING_POINT		   1
#define Z_LANGUAGE_HAS_C99_PREPROCESSOR_OPERATOR_PRAGMA			   1
#define Z_LANGUAGE_HAS_C99_SPECIFIER_INLINE				   1
#define Z_LANGUAGE_HAS_C99_STD_PRAGMA_CX_LIMITED_RANGE			   1
#define Z_LANGUAGE_HAS_C99_STD_PRAGMA_FENV_ACCESS			   1
#define Z_LANGUAGE_HAS_C99_STD_PRAGMA_FP_CONTRACT			   1
#define Z_LANGUAGE_HAS_C99_TYPE_BOOL					   1
#define Z_LANGUAGE_HAS_C99_TYPE_LONG_LONG				   1
#define Z_LANGUAGE_HAS_C99_TYPE_QUALIFIER_RESTRICT			   1

#if defined(__STDC_IEC_559_COMPLEX__) && __STDC_IEC_559_COMPLEX__ == 1
#	define Z_LANGUAGE_HAS_C99_TYPE_DOUBLE_COMPLEX	   1
#	define Z_LANGUAGE_HAS_C99_TYPE_FLOAT_COMPLEX	   1
#	define Z_LANGUAGE_HAS_C99_TYPE_LONG_DOUBLE_COMPLEX 1
#	define Z_LANGUAGE_HAS_C99_TYPE_MODIFIER_COMPLEX	   1

#	ifdef _Imaginary_I
#		define Z_LANGUAGE_HAS_C99_TYPE_DOUBLE_IMAGINARY	     1
#		define Z_LANGUAGE_HAS_C99_TYPE_FLOAT_IMAGINARY	     1
#		define Z_LANGUAGE_HAS_C99_TYPE_LONG_DOUBLE_IMAGINARY 1
#		define Z_LANGUAGE_HAS_C99_TYPE_MODIFIER_IMAGINARY    1
#	endif
#endif

#endif /* Z_inspection_C_modules_C99_H */
