From 48403dc1a00bc97b521e89eeeebf17f42ee1ba45 Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Sun, 11 Mar 2018 12:32:58 +0800 Subject: [PATCH] *fixed a string assignment issue with class member. --- HISTORY | 3 +++ core/my_basic.c | 15 +++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/HISTORY b/HISTORY index 2bf5235..d132d25 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,6 @@ +Mar. 11 2018 +Fixed a string assignment issue with class member + Mar. 9 2018 Fixed a GC bug with ranged FOR loop Fixed a stepping bug in the IF statement diff --git a/core/my_basic.c b/core/my_basic.c index 79f1467..9eed3da 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -15304,7 +15304,6 @@ static int _core_let(mb_interpreter_t* s, void** l) { unsigned arr_idx = 0; bool_t literally = false; _object_t* val = 0; - bool_t freed = false; #ifdef MB_ENABLE_COLLECTION_LIB int_t idx = 0; mb_value_t key; @@ -15428,15 +15427,9 @@ static int _core_let(mb_interpreter_t* s, void** l) { } #endif /* MB_ENABLE_COLLECTION_LIB */ #ifdef MB_ENABLE_CLASS - if(evar && evar->pathing && evar->data->type == _DT_STRING && !(var->data->type == _DT_STRING && evar->data->data.string != var->data->data.string)) { - _dispose_object(evar->data); - evar = 0; - freed = true; - } _proc_extra_var: #endif /* MB_ENABLE_CLASS */ - if(!freed) - _dispose_object(var->data); + _dispose_object(var->data); var->data->type = val->type; #ifdef MB_ENABLE_COLLECTION_LIB if(val->type == _DT_LIST_IT || val->type == _DT_DICT_IT) @@ -15464,8 +15457,10 @@ _proc_extra_var: } #ifdef MB_ENABLE_CLASS if(evar && evar->pathing) { - if(var->data->type == _DT_STRING) - var->data->is_ref = true; + if(var->data->type == _DT_STRING) { + var->data->data.string = mb_strdup(var->data->data.string, strlen(var->data->data.string) + 1); + var->data->is_ref = false; + } var = evar; evar = 0; refc++;