#ifndef CCM_CCM_H #define CCM_CCM_H #include "commons.h" #include "vec.h" #include "value.h" #include "err.h" #include "sym.h" typedef size_t CCM; typedef struct { int id; value_t* value; } ccm_entry_t; typedef struct { sym_t sym; err_t err; vec_t values; vec_t stack; vec_t globals; int id_counter; } ccm_t; void ccm_init(ccm_t* self); void ccm_entry_free(ccm_entry_t* self); void ccm_free(ccm_t* self); size_t ccm_str(ccm_t* self, char* buffer, size_t size); value_t* ccm_find_value(ccm_t* self, size_t addr); size_t ccm_add_value(ccm_t* self, value_t* value); size_t ccm_store_global(ccm_t* self, CCM value); CCM ccm_load_global(ccm_t* self, size_t addr); CCM ccm_from_value(ccm_t* self, value_t* value); value_t* ccm_to_value(ccm_t* self, CCM value); int ccm_is_num(ccm_t* self, CCM value); double ccm_from_num(ccm_t* self, CCM value); CCM ccm_to_num(ccm_t* self, double value, int line); int ccm_is_tuple(ccm_t* self, CCM value); vec_t* ccm_from_tuple(ccm_t* self, CCM value); CCM ccm_to_tuple(ccm_t* self, vec_t* values, int line); int ccm_is_boolean(ccm_t* self, CCM value); int ccm_from_boolean(ccm_t* self, CCM value); CCM ccm_to_boolean(ccm_t* self, int value, int line); int ccm_is_str(ccm_t* self, CCM value); char* ccm_from_str(ccm_t* self, CCM value); CCM ccm_to_str(ccm_t* self, char* value, int line); int ccm_is_array(ccm_t* self, CCM value); vec_t* ccm_from_array(ccm_t* self, CCM value); CCM ccm_to_array(ccm_t* self, vec_t* value, int line); int ccm_is_ref(ccm_t* self, CCM value); size_t ccm_from_ref(ccm_t* self, CCM value); CCM ccm_to_ref(ccm_t* self, size_t value, int line); void ccm_push(ccm_t* self, CCM value); CCM ccm_pop(ccm_t* self); CCM ccm_top(ccm_t* self, int depth); void ccm_set(ccm_t* self, CCM value, int addr); CCM ccm_get(ccm_t* self, int addr); void ccm_in(ccm_t* self); void ccm_add(ccm_t* self); void ccm_sub(ccm_t* self); void ccm_usub(ccm_t* self); void ccm_mul(ccm_t* self); void ccm_div(ccm_t* self); void ccm_mod(ccm_t* self); void ccm_pow(ccm_t* self); void ccm_not(ccm_t* self); void ccm_eq(ccm_t* self); void ccm_ne(ccm_t* self); void ccm_lt(ccm_t* self); void ccm_le(ccm_t* self); void ccm_gt(ccm_t* self); void ccm_ge(ccm_t* self); #endif