*improved the stepped handler.

This commit is contained in:
Wang Renxin 2017-01-17 15:22:26 +08:00
parent ed3f2f791a
commit 69eb74ae35
5 changed files with 20 additions and 8 deletions

View File

@ -1,3 +1,6 @@
Jan. 17 2017
Improved the stepped handler
Jan. 7 2017 Jan. 7 2017
Added dot symbol accessing of functions for referenced usertype Added dot symbol accessing of functions for referenced usertype

Binary file not shown.

View File

@ -1809,7 +1809,7 @@ static _object_t* _eval_var_in_print(mb_interpreter_t* s, _object_t** val_ptr, _
/** Interpretation */ /** Interpretation */
static void _stepped(mb_interpreter_t* s, _ls_node_t* ast); static int _stepped(mb_interpreter_t* s, _ls_node_t* ast);
static int _execute_statement(mb_interpreter_t* s, _ls_node_t** l, bool_t force_next); static int _execute_statement(mb_interpreter_t* s, _ls_node_t** l, bool_t force_next);
static int _common_end_looping(mb_interpreter_t* s, _ls_node_t** l); static int _common_end_looping(mb_interpreter_t* s, _ls_node_t** l);
static int _common_keep_looping(mb_interpreter_t* s, _ls_node_t** l, _var_t* var_loop); static int _common_keep_looping(mb_interpreter_t* s, _ls_node_t** l, _var_t* var_loop);
@ -9919,7 +9919,8 @@ static _object_t* _eval_var_in_print(mb_interpreter_t* s, _object_t** val_ptr, _
/** Interpretation */ /** Interpretation */
/* Callback a stepped debug handler, this function is called each step */ /* Callback a stepped debug handler, this function is called each step */
static void _stepped(mb_interpreter_t* s, _ls_node_t* ast) { static int _stepped(mb_interpreter_t* s, _ls_node_t* ast) {
int result = MB_FUNC_OK;
_object_t* obj = 0; _object_t* obj = 0;
mb_assert(s); mb_assert(s);
@ -9928,14 +9929,16 @@ static void _stepped(mb_interpreter_t* s, _ls_node_t* ast) {
if(ast && ast->data) { if(ast && ast->data) {
obj = (_object_t*)ast->data; obj = (_object_t*)ast->data;
#ifdef MB_ENABLE_SOURCE_TRACE #ifdef MB_ENABLE_SOURCE_TRACE
s->debug_stepped_handler(s, (void**)&ast, s->source_file, obj->source_pos, obj->source_row, obj->source_col); result = s->debug_stepped_handler(s, (void**)&ast, s->source_file, obj->source_pos, obj->source_row, obj->source_col);
#else /* MB_ENABLE_SOURCE_TRACE */ #else /* MB_ENABLE_SOURCE_TRACE */
s->debug_stepped_handler(s, (void**)&ast, s->source_file, obj->source_pos, 0, 0); result = s->debug_stepped_handler(s, (void**)&ast, s->source_file, obj->source_pos, 0, 0);
#endif /* MB_ENABLE_SOURCE_TRACE */ #endif /* MB_ENABLE_SOURCE_TRACE */
} else { } else {
s->debug_stepped_handler(s, (void**)&ast, s->source_file, -1, 0, 0); result = s->debug_stepped_handler(s, (void**)&ast, s->source_file, -1, 0, 0);
} }
} }
return result;
} }
/* Execute the ast, this is the core execution function */ /* Execute the ast, this is the core execution function */
@ -10144,7 +10147,11 @@ _exit:
*l = ast; *l = ast;
_stepped(s, ast); do {
int ret = _stepped(s, ast);
if(result == MB_FUNC_OK)
result = ret;
} while(0);
return result; return result;
} }

View File

@ -536,7 +536,7 @@ 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_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*); typedef int (* mb_pop_routine_arg_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, unsigned*, void*, mb_value_t*);
typedef int (* mb_routine_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, void*, mb_has_routine_arg_func_t, mb_pop_routine_arg_func_t); typedef int (* mb_routine_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, void*, mb_has_routine_arg_func_t, mb_pop_routine_arg_func_t);
typedef void (* mb_debug_stepped_handler_t)(struct mb_interpreter_t*, void**, char*, int, unsigned short, unsigned short); typedef int (* mb_debug_stepped_handler_t)(struct mb_interpreter_t*, void**, char*, int, unsigned short, unsigned short);
typedef void (* mb_error_handler_t)(struct mb_interpreter_t*, enum mb_error_e, char*, char*, int, unsigned short, unsigned short, int); typedef void (* mb_error_handler_t)(struct mb_interpreter_t*, enum mb_error_e, char*, char*, int, unsigned short, unsigned short, int);
typedef int (* mb_print_func_t)(const char*, ...); typedef int (* mb_print_func_t)(const char*, ...);
typedef int (* mb_input_func_t)(char*, int); typedef int (* mb_input_func_t)(char*, int);

View File

@ -1437,13 +1437,15 @@ static int beep(struct mb_interpreter_t* s, void** l) {
** Callbacks and handlers ** Callbacks and handlers
*/ */
static void _on_stepped(struct mb_interpreter_t* s, void** l, char* f, int p, unsigned short row, unsigned short col) { static int _on_stepped(struct mb_interpreter_t* s, void** l, char* f, int p, unsigned short row, unsigned short col) {
mb_unrefvar(s); mb_unrefvar(s);
mb_unrefvar(l); mb_unrefvar(l);
mb_unrefvar(f); mb_unrefvar(f);
mb_unrefvar(p); mb_unrefvar(p);
mb_unrefvar(row); mb_unrefvar(row);
mb_unrefvar(col); mb_unrefvar(col);
return MB_FUNC_OK;
} }
static void _on_error(struct mb_interpreter_t* s, mb_error_e e, char* m, char* f, int p, unsigned short row, unsigned short col, int abort_code) { static void _on_error(struct mb_interpreter_t* s, mb_error_e e, char* m, char* f, int p, unsigned short row, unsigned short col, int abort_code) {