From edb1e8da5687e05327496ce1fb58dfbf4e55df66 Mon Sep 17 00:00:00 2001 From: tony Date: Fri, 19 Jun 2015 11:12:15 +0800 Subject: [PATCH] +added an mb_schedule_suspend interface --- HISTORY | 3 +++ core/my_basic.c | 59 +++++++++++++++++++++++++++++-------------- core/my_basic.h | 3 ++- output/my_basic_mac | Bin 87152 -> 87416 bytes resource/my_basic.rc | 8 +++--- shell/main.c | 8 +++--- 6 files changed, 53 insertions(+), 28 deletions(-) diff --git a/HISTORY b/HISTORY index ac0e723..85fbc55 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,6 @@ +Jun. 19 2015 +Added an mb_schedule_suspend interface to schedule to suspend the execution + Jun. 15 2015 Fixed a wrong token position marking issue with interactive mode, thanks to Daniel Haensse for pointing it out diff --git a/core/my_basic.c b/core/my_basic.c index 2282663..47c4c5b 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -78,7 +78,7 @@ extern "C" { /** Macros */ #define _VER_MAJOR 1 #define _VER_MINOR 1 -#define _VER_REVISION 55 +#define _VER_REVISION 56 #define _MB_VERSION ((_VER_MAJOR * 0x01000000) + (_VER_MINOR * 0x00010000) + (_VER_REVISION)) /* Uncomment this line to treat warnings as error */ @@ -278,7 +278,7 @@ typedef struct _object_t { unsigned short source_row; unsigned short source_col; #else /* MB_ENABLE_SOURCE_TRACE */ - char source_pos; + char source_pos; #endif /* MB_ENABLE_SOURCE_TRACE */ } _object_t; @@ -316,6 +316,7 @@ typedef struct _parsing_context_t { typedef struct _running_context_t { _ls_node_t* temp_values; _ls_node_t* suspent_point; + int schedule_suspend_tag; _ls_node_t* sub_stack; _var_t* next_loop_var; mb_value_t intermediate_value; @@ -1463,7 +1464,7 @@ _object_t* _operate_operand(mb_interpreter_t* s, _object_t* optr, _object_t* opn #ifdef MB_ENABLE_SOURCE_TRACE _set_error_pos(s, optr->source_pos, optr->source_row, optr->source_col); #else /* MB_ENABLE_SOURCE_TRACE */ - _set_error_pos(s, 0, 0, 0); + _set_error_pos(s, 0, 0, 0); #endif /* MB_ENABLE_SOURCE_TRACE */ } @@ -1901,7 +1902,7 @@ int _append_symbol(mb_interpreter_t* s, char* sym, bool_t* delsym, int pos, unsi #else /* MB_ENABLE_SOURCE_TRACE */ mb_unrefvar(row); mb_unrefvar(col); - obj->source_pos = (char)pos; + obj->source_pos = (char)pos; #endif /* MB_ENABLE_SOURCE_TRACE */ node = _ls_pushback(ast, obj); @@ -1975,7 +1976,7 @@ int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object_t** ob tmp.func = (_func_t*)mb_malloc(sizeof(_func_t)); memset(tmp.func, 0, sizeof(_func_t)); tmp.func->name = sym; - memcpy(&tmp.func->pointer, value, sizeof(tmp.func->pointer)); + memcpy(&tmp.func->pointer, value, sizeof(tmp.func->pointer)); (*obj)->data.func = tmp.func; break; @@ -2713,7 +2714,7 @@ int _dispose_object(_object_t* obj) { obj->source_row = 0; obj->source_col = 0; #else /* MB_ENABLE_SOURCE_TRACE */ - obj->source_pos = 0; + obj->source_pos = 0; #endif /* MB_ENABLE_SOURCE_TRACE */ ++result; @@ -2942,8 +2943,16 @@ int _execute_statement(mb_interpreter_t* s, _ls_node_t** l) { default: break; } + + if(running->schedule_suspend_tag) { + mb_suspend(s, (void**)(&ast)); + result = MB_FUNC_SUSPEND; + running->schedule_suspend_tag = 0; + } + if(result != MB_FUNC_OK && result != MB_FUNC_SUSPEND && result != MB_SUB_RETURN) goto _exit; + if(ast) { obj = (_object_t*)(ast->data); if(_IS_EOS(obj)) { @@ -2959,6 +2968,7 @@ int _execute_statement(mb_interpreter_t* s, _ls_node_t** l) { _handle_error_on_obj(s, SE_RN_COLON_EXPECTED, DON(ast), MB_FUNC_ERR, _exit, result); } } + if(skip_to_eoi && running->skip_to_eoi && running->skip_to_eoi == _ls_back(running->sub_stack)) { running->skip_to_eoi = 0; obj = (_object_t*)(ast->data); @@ -3540,21 +3550,21 @@ _exit: } int mb_has_arg(struct mb_interpreter_t* s, void** l) { - /* Detect whether there is any more argument */ - int result = 0; - _ls_node_t* ast = 0; - _object_t* obj = 0; + /* Detect whether there is any more argument */ + int result = 0; + _ls_node_t* ast = 0; + _object_t* obj = 0; - mb_assert(s && l); + mb_assert(s && l); - ast = (_ls_node_t*)(*l); - if(ast) { - obj = (_object_t*)(ast->data); - if(!_IS_FUNC(obj, _core_close_bracket) && obj->type != _DT_EOS) - result = obj->data.integer; - } + ast = (_ls_node_t*)(*l); + if(ast) { + obj = (_object_t*)(ast->data); + if(!_IS_FUNC(obj, _core_close_bracket) && obj->type != _DT_EOS) + result = obj->data.integer; + } - return result; + return result; } int mb_pop_int(struct mb_interpreter_t* s, void** l, int_t* val) { @@ -3955,7 +3965,7 @@ _exit: int mb_suspend(struct mb_interpreter_t* s, void** l) { /* Suspend current execution and save the context */ int result = MB_FUNC_OK; - _ls_node_t* ast; + _ls_node_t* ast = 0; mb_assert(s && l && *l); @@ -3965,6 +3975,17 @@ int mb_suspend(struct mb_interpreter_t* s, void** l) { return result; } +int mb_schedule_suspend(struct mb_interpreter_t* s) { + /* Schedule to suspend current execution and will save the context */ + int result = MB_FUNC_OK; + + mb_assert(s); + + s->running_context->schedule_suspend_tag = 1; + + return result; +} + int mb_debug_get(struct mb_interpreter_t* s, const char* n, mb_value_t* val) { /* Get the value of an identifier */ int result = MB_FUNC_OK; diff --git a/core/my_basic.h b/core/my_basic.h index 31277e1..ef80adc 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -47,7 +47,7 @@ extern "C" { #endif /* MB_ENABLE_ALLOC_STAT */ #ifndef MB_ENABLE_SOURCE_TRACE -# define MB_ENABLE_SOURCE_TRACE +# define MB_ENABLE_SOURCE_TRACE #endif /* MB_ENABLE_SOURCE_TRACE */ #ifndef MB_COMPACT_MODE @@ -278,6 +278,7 @@ MBAPI int mb_load_string(struct mb_interpreter_t* s, const char* l); MBAPI int mb_load_file(struct mb_interpreter_t* s, const char* f); MBAPI int mb_run(struct mb_interpreter_t* s); MBAPI int mb_suspend(struct mb_interpreter_t* s, void** l); +MBAPI int mb_schedule_suspend(struct mb_interpreter_t* s); MBAPI int mb_debug_get(struct mb_interpreter_t* s, const char* n, mb_value_t* val); MBAPI int mb_debug_set(struct mb_interpreter_t* s, const char* n, mb_value_t val); diff --git a/output/my_basic_mac b/output/my_basic_mac index 61fec144253c049b6fe624f65e3fa9d44b7a77e1..8eee60b93d422159c090f0915af31b2aa7f16c1f 100755 GIT binary patch delta 29013 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 diff --git a/resource/my_basic.rc b/resource/my_basic.rc index 591692b..2cda7fb 100755 --- a/resource/my_basic.rc +++ b/resource/my_basic.rc @@ -36,8 +36,8 @@ IDI_ICON_MAIN ICON "icon.ico" VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,55,0 - PRODUCTVERSION 1,1,55,0 + FILEVERSION 1,1,56,0 + PRODUCTVERSION 1,1,56,0 FILEFLAGSMASK 0x17L # ifdef _DEBUG FILEFLAGS 0x1L @@ -55,13 +55,13 @@ VALUE "Comments", "MY-BASIC" VALUE "CompanyName", "W. Renxin" VALUE "FileDescription", "MY-BASIC interpreter" - VALUE "FileVersion", "1, 1, 55, 0" + VALUE "FileVersion", "1, 1, 56, 0" VALUE "InternalName", "my_basic" VALUE "LegalCopyright", "Copyright (C) 2011 - 2015 W. Renxin" VALUE "LegalTrademarks", "MY-BASIC" VALUE "OriginalFilename", "my_basic.exe" VALUE "ProductName", "MY-BASIC" - VALUE "ProductVersion", "1, 1, 55, 0" + VALUE "ProductVersion", "1, 1, 56, 0" END END BLOCK "VarFileInfo" diff --git a/shell/main.c b/shell/main.c index 78e5da8..0e36f38 100755 --- a/shell/main.c +++ b/shell/main.c @@ -110,7 +110,7 @@ static void _append_line(_code_line_t* code, char* txt) { code->size += _LINE_INC_STEP; code->lines = (char**)realloc(code->lines, sizeof(char*) * code->size); } - l = strlen(txt); + l = (int)strlen(txt); buf = (char*)malloc(l + 2); memcpy(buf, txt, l); buf[l] = '\n'; @@ -267,7 +267,7 @@ static void _list_program(const char* sn, const char* cn) { if(lsn == 0 && lcn == 0) { long i = 0; for(i = 0; i < c->count; ++i) { - printf("%d]%s\n", i + 1, c->lines[i]); + printf("%ld]%s\n", i + 1, c->lines[i]); } } else { long i = 0; @@ -288,7 +288,7 @@ static void _list_program(const char* sn, const char* cn) { if(i >= c->count) break; - printf("%d]%s\n", i + 1, c->lines[i]); + printf("%ld]%s\n", i + 1, c->lines[i]); } } } @@ -339,7 +339,7 @@ static void _insert_program(const char* no) { static void _alter_program(const char* no) { long lno = 0; - int i = 0; + long i = 0; mb_assert(no); lno = atoi(no); if(lno < 1 || lno > c->count) {