From bcb7c25a2419571e8e49791b5d70058250678cfd Mon Sep 17 00:00:00 2001 From: paladin-t Date: Fri, 4 Mar 2016 13:33:19 +0800 Subject: [PATCH] *polished code. --- core/my_basic.c | 44 ++++++++++++++++++++++++++++-------------- output/my_basic.exe | Bin 366592 -> 366592 bytes sample/yard/level.bas | 4 +++- sample/yard/utils.bas | 9 +++++++++ 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/core/my_basic.c b/core/my_basic.c index bb65ea5..7748de5 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -757,7 +757,7 @@ typedef struct mb_interpreter_t { _ls_node_t* sub_stack; _ls_node_t* suspent_point; int schedule_suspend_tag; - _ls_node_t* temp_values; + _ls_node_t* edge_destroy_objects; _ls_node_t* lazy_destroy_objects; _gc_t gc; int_t no_eat_comma_mark; @@ -1650,6 +1650,8 @@ static int _create_internal_object_from_public_value(mb_value_t* pbl, _object_t* static int _compare_public_value_and_internal_object(mb_value_t* pbl, _object_t* itn); static void _try_clear_intermediate_value(void* data, void* extra, mb_interpreter_t* s); static void _remove_if_exist(void* data, void* extra, _ls_node_t* ls); +static void _destroy_edge_objects(mb_interpreter_t* s); +static void _mark_edge_destroy_string(mb_interpreter_t* s, char* ch); static void _destroy_lazy_objects(mb_interpreter_t* s); static void _mark_lazy_destroy_string(mb_interpreter_t* s, char* ch); static void _assign_public_value(mb_value_t* tgt, mb_value_t* src); @@ -8936,14 +8938,33 @@ static void _remove_if_exist(void* data, void* extra, _ls_node_t* ls) { _ls_try_remove(ls, obj, _ls_cmp_data, 0); } +static void _destroy_edge_objects(mb_interpreter_t* s) { + /* Destroy edge destroying objects */ + _ls_foreach(s->edge_destroy_objects, _destroy_object); + _ls_clear(s->edge_destroy_objects); +} + +static void _mark_edge_destroy_string(mb_interpreter_t* s, char* ch) { + /* Mark a string as an edge destroying object */ + _object_t* temp_obj = 0; + + mb_assert(s && ch); + + temp_obj = _create_object(); + temp_obj->type = _DT_STRING; + temp_obj->ref = false; + temp_obj->data.string = ch; + _ls_pushback(s->edge_destroy_objects, temp_obj); +} + static void _destroy_lazy_objects(mb_interpreter_t* s) { - /* Destroy lazy releasing objects */ + /* Destroy lazy destroying objects */ _ls_foreach(s->lazy_destroy_objects, _destroy_object); _ls_clear(s->lazy_destroy_objects); } static void _mark_lazy_destroy_string(mb_interpreter_t* s, char* ch) { - /* Mark a string as lazy releasing destroy */ + /* Mark a string as a lazy destroying object */ _object_t* temp_obj = 0; mb_assert(s && ch); @@ -10161,7 +10182,7 @@ int mb_open(struct mb_interpreter_t** s) { (*s)->parsing_context = _reset_parsing_context((*s)->parsing_context); - (*s)->temp_values = _ls_create(); + (*s)->edge_destroy_objects = _ls_create(); (*s)->lazy_destroy_objects = _ls_create(); (*s)->gc.table = _ht_create(0, _ht_cmp_ref, _ht_hash_ref, _do_nothing_on_object); @@ -10232,8 +10253,8 @@ int mb_close(struct mb_interpreter_t** s) { (*s)->gc.recursive_table = 0; (*s)->gc.collected_table = 0; - _ls_foreach((*s)->temp_values, _destroy_object); - _ls_destroy((*s)->temp_values); + _ls_foreach((*s)->edge_destroy_objects, _destroy_object); + _ls_destroy((*s)->edge_destroy_objects); _ls_foreach((*s)->lazy_destroy_objects, _destroy_object); _ls_destroy((*s)->lazy_destroy_objects); @@ -10618,12 +10639,8 @@ int mb_pop_value(struct mb_interpreter_t* s, void** l, mb_value_t* val) { goto _exit; if(val_ptr->type == _DT_STRING && !val_ptr->ref) { - _ls_foreach(s->temp_values, _destroy_object); - _ls_clear(s->temp_values); - - val_ptr = _create_object(); - memcpy(val_ptr, &val_obj, sizeof(_object_t)); - _ls_pushback(s->temp_values, val_ptr); + _destroy_edge_objects(s); + _mark_edge_destroy_string(s, val_ptr->data.string); } _REF(val_ptr) @@ -11728,8 +11745,7 @@ int mb_run(struct mb_interpreter_t* s) { } while(ast); _exit: - _ls_foreach(s->temp_values, _destroy_object); - _ls_clear(s->temp_values); + _destroy_edge_objects(s); return result; } diff --git a/output/my_basic.exe b/output/my_basic.exe index 4005932a1821bd0c6994e300fc9908d02e083d84..762c9197dc200c333d98b5a61b2ec259b25923a2 100755 GIT binary patch delta 19570 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 delta 19617 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 game_status.playing then diff --git a/sample/yard/utils.bas b/sample/yard/utils.bas index cc707b5..06ec903 100644 --- a/sample/yard/utils.bas +++ b/sample/yard/utils.bas @@ -11,6 +11,15 @@ def cls() endif enddef +def to_lower_case(c) + _asc = asc(c) + if _asc >= asc("A") and _asc <= asc("Z") then + _asc = _asc + asc("a") - asc("A") + endif + + return chr(_asc) +enddef + def bit_and(a, b) c = 0 for i = 0 to 31