@ -42,13 +42,19 @@
//
// See end of file for license information.
# ifdef STB_C_LEXER_IMPLEMENTATION
# ifndef STB_C_LEXER_DEFINITIONS
// to change the default parsing rules, copy the following lines
// into your C/C++ file *before* including this, and then replace
// the Y's with N's for the ones you don't want.
// the Y's with N's for the ones you don't want. This needs to be
// set to the same values for every place in your program where
// stb_c_lexer.h is included.
// --BEGIN--
# if defined(Y) || defined(N)
# error "Can only use stb_c_lexer in contexts where the preprocessor symbols 'Y' and 'N' are not defined"
# endif
# define STB_C_LEX_C_DECIMAL_INTS Y // "0|[1-9][0-9]*" CLEX_intlit
# define STB_C_LEX_C_HEX_INTS Y // "0x[0-9a-fA-F]+" CLEX_intlit
# define STB_C_LEX_C_OCTAL_INTS Y // "[0-7]+" CLEX_intlit
@ -97,7 +103,6 @@
# define STB_C_LEXER_DEFINITIONS // This line prevents the header file from replacing your definitions
// --END--
# endif
# endif
# ifndef INCLUDE_STB_C_LEXER_H
@ -167,35 +172,11 @@ extern void stb_c_lexer_get_location(const stb_lexer *lexer, const char *where,
}
# endif
# endif // INCLUDE_STB_C_LEXER_H
# ifdef STB_C_LEXER_IMPLEMENTATION
# if defined(Y) || defined(N)
# error "Can only use stb_c_lexer in contexts where the preprocessor symbols 'Y' and 'N' are not defined"
# endif
// Hacky definitions so we can easily #if on them
# define Y(x) 1
# define N(x) 0
# if STB_C_LEX_INTEGERS_AS_DOUBLES(x)
typedef double stb__clex_int ;
# define intfield real_number
# define STB__clex_int_as_double
# else
typedef long stb__clex_int ;
# define intfield int_number
# endif
// Convert these config options to simple conditional #defines so we can more
// easily test them once we've change the meaning of Y/N
# if STB_C_LEX_PARSE_SUFFIXES(x)
# define STB__clex_parse_suffixes
# endif
// Config variable that influence which lexer tokens get declared need to go here
# if STB_C_LEX_C_DECIMAL_INTS(x) || STB_C_LEX_C_HEX_INTS(x) || STB_C_LEX_DEFINE_ALL_TOKEN_NAMES(x)
# define STB__clex_define_int
# endif
@ -204,35 +185,6 @@ typedef long stb__clex_int;
# define STB__clex_define_shifts
# endif
# if STB_C_LEX_C99_HEX_FLOATS(x)
# define STB__clex_hex_floats
# endif
# if STB_C_LEX_C_HEX_INTS(x)
# define STB__clex_hex_ints
# endif
# if STB_C_LEX_C_DECIMAL_INTS(x)
# define STB__clex_decimal_ints
# endif
# if STB_C_LEX_C_OCTAL_INTS(x)
# define STB__clex_octal_ints
# endif
# if STB_C_LEX_C_DECIMAL_FLOATS(x)
# define STB__clex_decimal_floats
# endif
# if STB_C_LEX_DISCARD_PREPROCESSOR(x)
# define STB__clex_discard_preprocessor
# endif
# if STB_C_LEX_USE_STDLIB(x) && (!defined(STB__clex_hex_floats) || __STDC_VERSION__ >= 199901L)
# define STB__CLEX_use_stdlib
# include <stdlib.h>
# endif
// Now pick a definition of Y/N that's conducive to
// defining the enum of token names.
# if STB_C_LEX_DEFINE_ALL_TOKEN_NAMES(x) || defined(STB_C_LEXER_SELF_TEST)
@ -287,12 +239,68 @@ enum
CLEX_first_unused_token
# undef Y
# define Y(a) a
} ;
# undef Y
# undef N
# endif // INCLUDE_STB_C_LEXER_H
# ifdef STB_C_LEXER_IMPLEMENTATION
// Hacky definitions so we can easily #if on them
# define Y(x) 1
# define N(x) 0
# if STB_C_LEX_INTEGERS_AS_DOUBLES(x)
typedef double stb__clex_int ;
# define intfield real_number
# define STB__clex_int_as_double
# else
typedef long stb__clex_int ;
# define intfield int_number
# endif
// Convert these config options to simple conditional #defines so we can more
// easily test them once we've change the meaning of Y/N
# if STB_C_LEX_PARSE_SUFFIXES(x)
# define STB__clex_parse_suffixes
# endif
# if STB_C_LEX_C99_HEX_FLOATS(x)
# define STB__clex_hex_floats
# endif
# if STB_C_LEX_C_HEX_INTS(x)
# define STB__clex_hex_ints
# endif
# if STB_C_LEX_C_DECIMAL_INTS(x)
# define STB__clex_decimal_ints
# endif
# if STB_C_LEX_C_OCTAL_INTS(x)
# define STB__clex_octal_ints
# endif
# if STB_C_LEX_C_DECIMAL_FLOATS(x)
# define STB__clex_decimal_floats
# endif
# if STB_C_LEX_DISCARD_PREPROCESSOR(x)
# define STB__clex_discard_preprocessor
# endif
# if STB_C_LEX_USE_STDLIB(x) && (!defined(STB__clex_hex_floats) || __STDC_VERSION__ >= 199901L)
# define STB__CLEX_use_stdlib
# include <stdlib.h>
# endif
// Now for the rest of the file we'll use the basic definition where
// where Y expands to its contents and N expands to nothing
# undef Y
# define Y(a) a
# undef N
# define N(a)