#ifndef __MCPU_CPP_SEMANTIC_H__ #define __MCPU_CPP_SEMANTIC_H__ 1 #include 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__ */