summaryrefslogtreecommitdiff
path: root/src/mcpp-semantic.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-semantic.h
parent124b140798456778e2a96851cc7268aa9a726698 (diff)
downloadmcpu-cpp-1.0.2.tar.xz
Version 1.0.21.0.2
Diffstat (limited to 'src/mcpp-semantic.h')
-rw-r--r--src/mcpp-semantic.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/mcpp-semantic.h b/src/mcpp-semantic.h
new file mode 100644
index 0000000..efa793e
--- /dev/null
+++ b/src/mcpp-semantic.h
@@ -0,0 +1,67 @@
+#ifndef __MCPU_CPP_SEMANTIC_H__
+#define __MCPU_CPP_SEMANTIC_H__ 1
+
+#include <defs.h>
+
+typedef struct mcpp_options mcpp_options;
+typedef struct mcpp_integer mcpp_integer;
+struct mcpp_integer
+{
+ __mpu_uint64_t value;
+ int unsignedp;
+};
+
+typedef struct mcpp_semantic_context mcpp_semantic_context;
+struct mcpp_semantic_context
+{
+ const char *filename;
+ unsigned line_number;
+ const mcpp_options *options;
+ int failed;
+};
+
+void mcpp_semantic_context_init( mcpp_semantic_context *context,
+ const char *filename,
+ unsigned line_number,
+ const mcpp_options *options );
+void mcpp_semantic_error( mcpp_semantic_context *context,
+ const char *message );
+void mcpp_semantic_warning( mcpp_semantic_context *context,
+ const char *message );
+int mcpp_semantic_failed( const mcpp_semantic_context *context );
+
+mcpp_integer mcpp_semantic_make( __mpu_uint64_t value, int unsignedp );
+int mcpp_semantic_true( mcpp_integer value );
+
+mcpp_integer mcpp_semantic_neg( mcpp_integer value );
+mcpp_integer mcpp_semantic_not( mcpp_integer value );
+mcpp_integer mcpp_semantic_compl( mcpp_integer value );
+
+mcpp_integer mcpp_semantic_mul( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_div( mcpp_semantic_context *context,
+ mcpp_integer left, mcpp_integer right,
+ int evaluate );
+mcpp_integer mcpp_semantic_mod( mcpp_semantic_context *context,
+ mcpp_integer left, mcpp_integer right,
+ int evaluate );
+mcpp_integer mcpp_semantic_add( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_sub( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_lshift( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_rshift( mcpp_integer left, mcpp_integer right );
+
+mcpp_integer mcpp_semantic_equal( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_notequal( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_less( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_greater( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_leq( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_geq( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_bitand( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_bitxor( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_bitor( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_and( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_or( mcpp_integer left, mcpp_integer right );
+mcpp_integer mcpp_semantic_conditional( mcpp_integer condition,
+ mcpp_integer yes,
+ mcpp_integer no );
+
+#endif /* __MCPU_CPP_SEMANTIC_H__ */