summaryrefslogtreecommitdiff
path: root/src/mcpp-macro.h
diff options
context:
space:
mode:
authorkx <kx@radix-linux.su>2026-10-01 12:02:28 +0300
committerkx <kx@radix-linux.su>2026-10-01 12:02:28 +0300
commitba1b04d64bdfaf377915b22f77520216ebe47674 (patch)
tree044343035c28b2b04ca9725f26e9b7c39342d19c /src/mcpp-macro.h
parent124b140798456778e2a96851cc7268aa9a726698 (diff)
downloadmcpu-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.h126
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__ */