diff options
| author | kx <kx@radix-linux.su> | 2026-10-01 12:02:28 +0300 |
|---|---|---|
| committer | kx <kx@radix-linux.su> | 2026-10-01 12:02:28 +0300 |
| commit | ba1b04d64bdfaf377915b22f77520216ebe47674 (patch) | |
| tree | 044343035c28b2b04ca9725f26e9b7c39342d19c /src/mcpp-macro.h | |
| parent | 124b140798456778e2a96851cc7268aa9a726698 (diff) | |
| download | mcpu-cpp-1.0.2.tar.xz | |
Version 1.0.21.0.2
Diffstat (limited to 'src/mcpp-macro.h')
| -rw-r--r-- | src/mcpp-macro.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/mcpp-macro.h b/src/mcpp-macro.h new file mode 100644 index 0000000..719972c --- /dev/null +++ b/src/mcpp-macro.h @@ -0,0 +1,126 @@ +#ifndef __MCPU_CPP_MACRO_H__ +#define __MCPU_CPP_MACRO_H__ 1 + +#include <defs.h> +#include <mcpp-language.h> +#include <mcpp-text.h> + +#define MCPU_CPP_MACRO_BUCKETS 257 +#define MCPU_CPP_MACRO_EXPANSION_LIMIT 400 + +enum mcpu_macro_origin +{ + MCPU_MACRO_ORIGIN_SOURCE = 0, + MCPU_MACRO_ORIGIN_BUILTIN, + MCPU_MACRO_ORIGIN_COMMAND_LINE +}; + + +enum mcpu_macro_builtin +{ + MCPU_MACRO_BUILTIN_NONE = 0, + MCPU_MACRO_BUILTIN_FILE, + MCPU_MACRO_BUILTIN_LINE, + MCPU_MACRO_BUILTIN_DATE, + MCPU_MACRO_BUILTIN_TIME, + MCPU_MACRO_BUILTIN_BASE_FILE, + MCPU_MACRO_BUILTIN_INCLUDE_LEVEL, + MCPU_MACRO_BUILTIN_REAL_MAX, + MCPU_MACRO_BUILTIN_REAL_MIN, + MCPU_MACRO_BUILTIN_REAL_EPSILON, + MCPU_MACRO_BUILTIN_REAL_MAX_EXP, + MCPU_MACRO_BUILTIN_REAL_MIN_EXP, + MCPU_MACRO_BUILTIN_REAL_MAX_10_EXP, + MCPU_MACRO_BUILTIN_REAL_MIN_10_EXP +}; + +typedef struct mcpp_options mcpp_options; +typedef struct mcpu_macro_expansion_context mcpu_macro_expansion_context; +struct mcpu_macro_expansion_context +{ + const char *filename; + const char *base_filename; + unsigned line_number; + size_t include_level; + const char *date; + const char *time; + const mcpp_options *options; +}; + +typedef struct mcpu_macro mcpu_macro; +struct mcpu_macro +{ + __mpu_char16_t *name; + size_t name_length; + + int nargs; + int variadic; + __mpu_char16_t **argnames; + size_t *argname_lengths; + + __mpu_char16_t *replacement; + size_t replacement_length; + + enum mcpu_macro_builtin builtin; + enum mcpu_macro_origin origin; + unsigned builtin_bits; + int expanding; + mcpu_macro *next; +}; + +typedef struct mcpu_macro_table mcpu_macro_table; +struct mcpu_macro_table +{ + mcpu_macro *bucket[MCPU_CPP_MACRO_BUCKETS]; +}; + +void mcpu_macro_table_init( mcpu_macro_table *table ); +void mcpu_macro_table_free( mcpu_macro_table *table ); +mcpu_macro *mcpu_macro_find( mcpu_macro_table *table, + const __mpu_char16_t *name, + size_t name_length ); +int mcpu_macro_define_object( mcpu_macro_table *table, + const __mpu_char16_t *name, + size_t name_length, + const __mpu_char16_t *replacement, + size_t replacement_length, + enum mcpu_macro_origin origin ); +int mcpu_macro_define_builtin( mcpu_macro_table *table, + const __mpu_char16_t *name, + size_t name_length, + enum mcpu_macro_builtin builtin ); +int mcpu_macro_define_sized_builtin( mcpu_macro_table *table, + const __mpu_char16_t *name, + size_t name_length, + enum mcpu_macro_builtin builtin, + unsigned bits ); +int mcpu_macro_define_function( mcpu_macro_table *table, + const __mpu_char16_t *name, + size_t name_length, + const __mpu_char16_t *const *argnames, + const size_t *argname_lengths, + size_t nargs, int variadic, + const __mpu_char16_t *replacement, + size_t replacement_length, + enum mcpu_macro_origin origin ); +int mcpu_macro_definition_equal( const mcpu_macro *macro, + int nargs, int variadic, + const __mpu_char16_t *const *argnames, + const size_t *argname_lengths, + const __mpu_char16_t *replacement, + size_t replacement_length ); +int mcpu_macro_undef( mcpu_macro_table *table, + const __mpu_char16_t *name, + size_t name_length ); +int mcpu_macro_dump( const mcpu_macro_table *table, FILE *stream, + int include_predefined ); +int mcpu_macro_dump_text( const mcpu_macro_table *table, mcpu_text *output, + const char *line_filename ); +int mcpu_macro_expand( mcpu_macro_table *table, + const __mpu_char16_t *input, + size_t length, + enum mcpu_language language, + const mcpu_macro_expansion_context *context, + mcpu_text *output ); + +#endif /* __MCPU_CPP_MACRO_H__ */ |
