+added mb_get_gc_enabled and mb_set_gc_enabled functions.

This commit is contained in:
Wang Renxin 2017-05-15 22:46:28 +08:00
parent c855bea20c
commit 3ba4fdec26
4 changed files with 27 additions and 0 deletions

View File

@ -1,3 +1,6 @@
May. 15 2017
Added mb_get_gc_enabled and mb_set_gc_enabled functions
May. 14 2017
Added a clear_parser parameter to the mb_run function
Added an extra end of running checking after stepped

Binary file not shown.

View File

@ -393,6 +393,7 @@ typedef struct _gc_t {
_ht_node_t* collected_table;
_ht_node_t* valid_table;
unsigned char collecting;
bool_t enabled_collecting;
} _gc_t;
typedef struct _calculation_operator_info_t {
@ -6543,6 +6544,10 @@ static void _gc_collect_garbage(mb_interpreter_t* s, int depth) {
gc = &s->gc;
/* Check whether it's paused */
if(!gc->enabled_collecting)
return;
/* Avoid infinity loop */
if(gc->collecting)
return;
@ -11300,6 +11305,7 @@ int mb_close(struct mb_interpreter_t** s) {
_tidy_scope_chain(*s);
_dispose_scope_chain(*s);
(*s)->gc.enabled_collecting = true;
_gc_collect_garbage(*s, -1);
_ht_destroy((*s)->gc.table);
_ht_destroy((*s)->gc.recursive_table);
@ -13610,6 +13616,22 @@ _exit:
return result;
}
/* Get whether GC is enabled */
bool_t mb_get_gc_enabled(struct mb_interpreter_t* s) {
if(!s) return false;
return s->gc.enabled_collecting;
}
/* Sets whether GC is enabled */
int mb_set_gc_enabled(struct mb_interpreter_t* s, bool_t gc) {
if(!s) return MB_FUNC_ERR;
s->gc.enabled_collecting = gc;
return MB_FUNC_OK;
}
/* Trigger GC */
int mb_gc(struct mb_interpreter_t* s, int_t* collected) {
int_t diff = 0;

View File

@ -667,6 +667,8 @@ MBAPI int mb_set_error_handler(struct mb_interpreter_t* s, mb_error_handler_t h)
MBAPI int mb_set_printer(struct mb_interpreter_t* s, mb_print_func_t p);
MBAPI int mb_set_inputer(struct mb_interpreter_t* s, mb_input_func_t p);
MBAPI bool_t mb_get_gc_enabled(struct mb_interpreter_t* s);
MBAPI int mb_set_gc_enabled(struct mb_interpreter_t* s, bool_t gc);
MBAPI int mb_gc(struct mb_interpreter_t* s, int_t* collected/* = NULL*/);
MBAPI int mb_get_userdata(struct mb_interpreter_t* s, void** d);
MBAPI int mb_set_userdata(struct mb_interpreter_t* s, void* d);