*refactored the tag of memory allocation.

This commit is contained in:
Wang Renxin 2017-11-05 14:17:21 +08:00
parent 61effb8d4b
commit 5e52e72cf7
2 changed files with 11 additions and 8 deletions

View File

@ -1314,7 +1314,7 @@ static void _resize_dynamic_buffer(_dynamic_buffer_t* buf, size_t es, size_t c);
#define _WCHAR_BUF_PTR(b) ((b).pointer.wcharp)
#endif /* MB_CP_VC && MB_ENABLE_UNICODE */
#define _MB_CHECK_MEM_TAG_SIZE(y, s) ((mb_mem_tag_t)(s) == (s))
#define _MB_CHECK_MEM_TAG_SIZE(y, s) ((y)(mb_mem_tag_t)(s) == (s))
#define _MB_WRITE_MEM_TAG_SIZE(t, s) (*((mb_mem_tag_t*)((char*)(t) - _MB_MEM_TAG_SIZE)) = (mb_mem_tag_t)(s))
#define _MB_READ_MEM_TAG_SIZE(t) (*((mb_mem_tag_t*)((char*)(t) - _MB_MEM_TAG_SIZE)))
@ -14352,6 +14352,7 @@ char* mb_memdup(const char* val, unsigned size) {
if(val != 0) {
result = (char*)mb_malloc(size);
if(result)
memcpy(result, val, size);
}

View File

@ -300,6 +300,14 @@ extern "C" {
# define mb_unrefvar(__v) ((void)(__v))
#endif /* mb_unrefvar */
#ifndef mb_mem_tag_t
typedef unsigned short mb_mem_tag_t;
#endif /* mb_mem_tag_t */
#ifndef mb_bytes_size
# define mb_bytes_size (mb_max(mb_max(mb_max(sizeof(void*), sizeof(unsigned long)), sizeof(int_t)), sizeof(real_t)))
#endif /* mb_bytes_size */
#ifndef mb_make_nil
# define mb_make_nil(__v) do { memset(&(__v).value.bytes, 0, sizeof(mb_val_bytes_t)); (__v).type = MB_DT_NIL; } while(0)
#endif /* mb_make_nil */
@ -340,10 +348,6 @@ extern "C" {
# define mb_int_val(__v, __d) do { if((__v).type == MB_DT_INT) (__d) = (__v).value.integer; else if((__v).type == MB_DT_REAL) (__d) = (int_t)((__v).value.float_point); else (__d) = ~((int_t)0); } while(0)
#endif /* mb_int_val */
#ifndef mb_bytes_size
# define mb_bytes_size (mb_max(mb_max(mb_max(sizeof(void*), sizeof(unsigned long)), sizeof(int_t)), sizeof(real_t)))
#endif /* mb_bytes_size */
#ifndef MB_CODES
# define MB_CODES
# define MB_FUNC_OK 0
@ -569,8 +573,6 @@ typedef struct mb_value_t {
mb_value_u value;
} mb_value_t;
typedef unsigned short mb_mem_tag_t;
typedef int (* mb_func_t)(struct mb_interpreter_t*, void**);
typedef int (* mb_has_routine_arg_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, unsigned*, void*);
typedef int (* mb_pop_routine_arg_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, unsigned*, void*, mb_value_t*);