From 9b725b32fc2bc16c65c18ec94dc5734873d398bf Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Thu, 7 Jul 2016 13:09:58 +0800 Subject: [PATCH] +added function overriding support for referenced usertype. --- core/my_basic.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/my_basic.h b/core/my_basic.h index fa1e032..a622442 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -473,9 +473,18 @@ typedef enum mb_meta_func_u { MB_MF_SUB = 1 << 2, MB_MF_MUL = 1 << 3, MB_MF_DIV = 1 << 4, - MB_MF_NEG = 1 << 5 + MB_MF_NEG = 1 << 5, + MB_MF_CALC = MB_MF_IS | MB_MF_ADD | MB_MF_SUB | MB_MF_MUL | MB_MF_DIV | MB_MF_NEG, + MB_MF_COLL = 1 << 6, + MB_MF_FUNC = 1 << 7 } mb_meta_func_u; +typedef enum mb_meta_status_u { + MB_MS_NONE = 0, + MB_MS_DONE = 1 << 0, + MB_MS_RETURNED = 1 << 1 +} mb_meta_status_u; + typedef unsigned char mb_val_bytes_t[mb_max(mb_max(sizeof(void*), sizeof(unsigned long)), mb_max(sizeof(int_t), sizeof(real_t)))]; typedef union mb_value_u { @@ -525,6 +534,7 @@ typedef unsigned int (* mb_hash_func_t)(struct mb_interpreter_t*, void*); typedef int (* mb_cmp_func_t)(struct mb_interpreter_t*, void*, void*); typedef int (* mb_fmt_func_t)(struct mb_interpreter_t*, void*, char*, unsigned); typedef int (* mb_meta_operator_t)(struct mb_interpreter_t*, void**, mb_value_t*, mb_value_t*, mb_value_t*); +typedef mb_meta_status_u (* mb_meta_func_t)(struct mb_interpreter_t*, void**, const char*); typedef char* (* mb_memory_allocate_func_t)(unsigned); typedef void (* mb_memory_free_func_t)(char*); @@ -582,7 +592,7 @@ MBAPI int mb_make_ref_value(struct mb_interpreter_t* s, void* val, mb_value_t* o MBAPI int mb_get_ref_value(struct mb_interpreter_t* s, void** l, mb_value_t val, void** out); MBAPI int mb_ref_value(struct mb_interpreter_t* s, void** l, mb_value_t val); MBAPI int mb_unref_value(struct mb_interpreter_t* s, void** l, mb_value_t val); -MBAPI int mb_override_value(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_meta_func_u m, mb_meta_operator_t f); +MBAPI int mb_override_value(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_meta_func_u m, void* f); MBAPI int mb_dispose_value(struct mb_interpreter_t* s, mb_value_t val); MBAPI int mb_get_routine(struct mb_interpreter_t* s, void** l, const char* n, mb_value_t* val);