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-semantic.h | |
| parent | 124b140798456778e2a96851cc7268aa9a726698 (diff) | |
| download | mcpu-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.h | 67 |
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__ */ |
