From c5df541e2bf95366684befe1d7eb5f6337647fce Mon Sep 17 00:00:00 2001 From: paladin-t Date: Fri, 26 Feb 2016 13:06:52 +0800 Subject: [PATCH] +added a ME keyword to represent a class instance itself; +added shallow cloning support; *fixed an overrided function copying issue. --- HISTORY | 7 ++- MY-BASIC Quick Reference.pdf | Bin 227122 -> 226997 bytes core/my_basic.c | 114 ++++++++++++++++++++++++++--------- core/my_basic.h | 1 + output/my_basic.exe | Bin 363520 -> 364032 bytes 5 files changed, 91 insertions(+), 31 deletions(-) diff --git a/HISTORY b/HISTORY index 7323058..8323f5e 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,8 @@ +Feb. 26 2016 +Added a ME keyword to represent a class instance itself +Added shallow cloning support +Fixed an overrided function copying issue + Feb. 25 2016 Improved importing directory detection Fixed a bug with the END and RETURN statement with FOR loop @@ -13,7 +18,7 @@ Added an mb_override_value function Added meta function overriding support for referenced usertype Feb. 22 2016 -Added array clone support +Added array cloning support Added array accessing support of a class instance Added a RAISE statement to the shell Fixed an iterator disposing issue caused by referencing a collection weakly diff --git a/MY-BASIC Quick Reference.pdf b/MY-BASIC Quick Reference.pdf index a0f9a7467cdbcdd538eff45f6507678b5f4e219f..97ccbeb7ea1910f9de55ca22593f8a4e81f5dcb9 100644 GIT binary patch delta 14402 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 diff --git a/core/my_basic.c b/core/my_basic.c index 2e17b2e..fd8aa75 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -148,6 +148,9 @@ extern "C" { #ifdef MB_ENABLE_CLASS # define _IS_CLASS(__o) ((__o) && ((_object_t*)(__o))->type == _DT_CLASS) # define _GET_CLASS(__o) ((!__o) ? 0 : (_IS_CLASS(__o) ? (__o) : (_IS_VAR(__o) && _IS_CLASS((__o)->data.variable->data) ? (__o)->data.variable->data : 0))) +# define _IS_ME(__v) (!!(__v)->isme) +#else /* MB_ENABLE_CLASS */ +# define _IS_ME(__v) false #endif /* MB_ENABLE_CLASS */ #define _IS_ROUTINE(__o) ((__o) && ((_object_t*)(__o))->type == _DT_ROUTINE) #define _GET_ROUTINE(__o) ((!__o) ? 0 : (_IS_ROUTINE(__o) ? (__o) : (_IS_VAR(__o) && _IS_ROUTINE((__o)->data.variable->data) ? (__o)->data.variable->data : 0))) @@ -263,6 +266,7 @@ static const char* _ERR_DESC[] = { "Class expected", "Duplicate class", "Wrong meta class", + "Cannot change ME", "Invalid lambda", "List expected", "Collection expected", @@ -326,6 +330,7 @@ typedef struct _var_t { struct _object_t* data; #ifdef MB_ENABLE_CLASS int pathing; + bool_t isme; #endif /* MB_ENABLE_CLASS */ } _var_t; @@ -439,6 +444,7 @@ typedef struct _label_t { } _label_t; #ifdef MB_ENABLE_CLASS +# define _CLASS_ME "ME" # define _CLASS_HASH_FUNC "HASH" # define _CLASS_COMPARE_FUNC "COMPARE" # define _CLASS_TO_STRING_FUNC "TOSTRING" @@ -1593,7 +1599,7 @@ static _var_t* _search_var_in_scope_chain(mb_interpreter_t* s, _var_t* i); static _var_t* _create_var(_object_t** oobj, const char* n, size_t ns, bool_t dup_name); static _object_t* _create_object(void); -static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bool_t toupval); +static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bool_t toupval, bool_t deep); static int _dispose_object(_object_t* obj); static int _destroy_object(void* data, void* extra); static int _destroy_object_with_extra(void* data, void* extra); @@ -4521,6 +4527,13 @@ static int _create_symbol(mb_interpreter_t* s, _ls_node_t* l, char* sym, _object (*obj)->ref = true; *delsym = true; } else { + if(strcmp(sym, _CLASS_ME) == 0) { + _handle_error_now(s, SE_RN_CANNOT_CHANGE_ME, s->source_file, MB_FUNC_ERR); + (*obj)->ref = true; + *delsym = true; + + goto _exit; + } tmp.var = (_var_t*)mb_malloc(sizeof(_var_t)); memset(tmp.var, 0, sizeof(_var_t)); tmp.var->name = sym; @@ -6672,7 +6685,7 @@ static int _clone_to_list(void* data, void* extra, _list_t* coll) { tgt = _create_object(); obj = (_object_t*)data; - _clone_object(coll->ref.s, obj, tgt, false); + _clone_object(coll->ref.s, obj, tgt, false, false); _push_list(coll, 0, tgt); _REF(tgt) @@ -6690,11 +6703,11 @@ static int _clone_to_dict(void* data, void* extra, _dict_t* coll) { ktgt = _create_object(); kobj = (_object_t*)extra; - _clone_object(coll->ref.s, kobj, ktgt, false); + _clone_object(coll->ref.s, kobj, ktgt, false, false); vtgt = _create_object(); vobj = (_object_t*)data; - _clone_object(coll->ref.s, vobj, vtgt, false); + _clone_object(coll->ref.s, vobj, vtgt, false, false); _set_dict(coll, 0, 0, ktgt, vtgt); _REF(ktgt) @@ -6726,6 +6739,8 @@ static int _copy_list_to_array(void* data, void* extra, _array_helper_t* h) { static void _init_class(mb_interpreter_t* s, _class_t* instance, char* n) { /* Initialize a class */ _running_context_t* running = 0; + _object_t* meobj = 0; + _var_t* me = 0; mb_assert(s && instance && n); @@ -6738,6 +6753,13 @@ static void _init_class(mb_interpreter_t* s, _class_t* instance, char* n) { instance->meta_list = _ls_create(); instance->scope = _create_running_context(true); instance->created_from = instance; + + me = _create_var(&meobj, _CLASS_ME, strlen(_CLASS_ME) + 1, true); + me->data->type = _DT_CLASS; + me->data->data.instance = instance; + me->pathing = 1; + me->isme = true; + _ht_set_or_insert(instance->scope->var_dict, me->name, meobj); } static void _begin_class(mb_interpreter_t* s) { @@ -6898,8 +6920,10 @@ static int _clone_clsss_field(void* data, void* extra, void* n) { switch(obj->type) { case _DT_VAR: var = obj->data.variable; - ret = _duplicate_parameter(var, 0, instance->scope); - _clone_object(instance->ref.s, obj, ret->data.variable->data, false); + if(!_IS_ME(var)) { + ret = _duplicate_parameter(var, 0, instance->scope); + _clone_object(instance->ref.s, obj, ret->data.variable->data, false, false); + } break; case _DT_ARRAY: @@ -6908,7 +6932,7 @@ static int _clone_clsss_field(void* data, void* extra, void* n) { ret = _create_object(); ret->type = _DT_ARRAY; ret->ref = false; - _clone_object(instance->ref.s, obj, ret, false); + _clone_object(instance->ref.s, obj, ret, false, false); _ht_set_or_insert(instance->scope->var_dict, ret->data.array->name, ret); } @@ -7403,7 +7427,7 @@ static int _fill_with_upvalue(void* data, void* extra, void* p) { _object_t* ovar = 0; _var_t* var = _create_var(&ovar, n, 0, true); obj = (_object_t*)nori->data; - _clone_object(tuple->s, obj, var->data, true); + _clone_object(tuple->s, obj, var->data, true, true); _REF(var->data) if(_IS_ROUTINE(obj) && obj->data.routine->type != _IT_LAMBDA) { ovar->ref = true; @@ -7983,7 +8007,7 @@ static _object_t* _create_object(void) { return result; } -static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bool_t toupval) { +static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bool_t toupval, bool_t deep) { /* Clone the data of an object */ int result = 0; @@ -7996,7 +8020,7 @@ static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bo tgt->type = obj->type; switch(obj->type) { case _DT_VAR: - _clone_object(s, obj->data.variable->data, tgt, toupval); + _clone_object(s, obj->data.variable->data, tgt, toupval, deep); break; case _DT_STRING: @@ -8011,6 +8035,7 @@ static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bo obj->data.usertype_ref->dtor, obj->data.usertype_ref->clone, obj->data.usertype_ref->hash, obj->data.usertype_ref->cmp, obj->data.usertype_ref->fmt ); + memcpy(&tgt->data.usertype_ref->overrides, &obj->data.usertype_ref->overrides, sizeof(_override_func_info_t)); _ref(&tgt->data.usertype_ref->ref, tgt->data.usertype_ref); break; @@ -8021,14 +8046,26 @@ static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bo break; case _DT_ARRAY: - tgt->data.array = _clone_array(s, obj->data.array); + if(deep) { + tgt->data.array = _clone_array(s, obj->data.array); + } else { + tgt->data.array = obj->data.array; +#ifdef MB_ENABLE_ARRAY_REF + _ref(&obj->data.array->ref, obj->data.array); +#endif /* MB_ENABLE_ARRAY_REF */ + } break; #ifdef MB_ENABLE_COLLECTION_LIB case _DT_LIST: - tgt->data.list = _create_list(obj->data.list->ref.s); - _ref(&tgt->data.list->ref, tgt->data.list); - _LS_FOREACH(obj->data.list->list, _do_nothing_on_object, _clone_to_list, tgt->data.list); + if(deep) { + tgt->data.list = _create_list(obj->data.list->ref.s); + _ref(&tgt->data.list->ref, tgt->data.list); + _LS_FOREACH(obj->data.list->list, _do_nothing_on_object, _clone_to_list, tgt->data.list); + } else { + tgt->data.list = obj->data.list; + _ref(&obj->data.list->ref, obj->data.list); + } break; case _DT_LIST_IT: @@ -8036,9 +8073,14 @@ static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bo break; case _DT_DICT: - tgt->data.dict = _create_dict(obj->data.dict->ref.s); - _ref(&tgt->data.dict->ref, tgt->data.dict); - _HT_FOREACH(obj->data.dict->dict, _do_nothing_on_object, _clone_to_dict, tgt->data.dict); + if(deep) { + tgt->data.dict = _create_dict(obj->data.dict->ref.s); + _ref(&tgt->data.dict->ref, tgt->data.dict); + _HT_FOREACH(obj->data.dict->dict, _do_nothing_on_object, _clone_to_dict, tgt->data.dict); + } else { + tgt->data.dict = obj->data.dict; + _ref(&obj->data.dict->ref, obj->data.dict); + } break; case _DT_DICT_IT: @@ -8053,12 +8095,17 @@ static int _clone_object(mb_interpreter_t* s, _object_t* obj, _object_t* tgt, bo break; #ifdef MB_ENABLE_CLASS case _DT_CLASS: - tgt->data.instance = (_class_t*)mb_malloc(sizeof(_class_t)); - _init_class(s, tgt->data.instance, mb_strdup(obj->data.instance->name, 0)); - tgt->data.instance->created_from = obj->data.instance->created_from; - _push_scope_by_class(s, tgt->data.instance->scope); - _traverse_class(obj->data.instance, _clone_clsss_field, _clone_class_meta_link, _META_LIST_MAX_DEPTH, false, tgt->data.instance, 0); - _pop_scope(s, false); + if(deep) { + tgt->data.instance = (_class_t*)mb_malloc(sizeof(_class_t)); + _init_class(s, tgt->data.instance, mb_strdup(obj->data.instance->name, 0)); + tgt->data.instance->created_from = obj->data.instance->created_from; + _push_scope_by_class(s, tgt->data.instance->scope); + _traverse_class(obj->data.instance, _clone_clsss_field, _clone_class_meta_link, _META_LIST_MAX_DEPTH, false, tgt->data.instance, 0); + _pop_scope(s, false); + } else { + tgt->data.instance = obj->data.instance; + _ref(&obj->data.instance->ref, obj->data.instance); + } break; #endif /* MB_ENABLE_CLASS */ @@ -8119,7 +8166,10 @@ static int _dispose_object(_object_t* obj) { var = (_var_t*)obj->data.variable; safe_free(var->name); mb_assert(var->data->type != _DT_VAR); - _destroy_object(var->data, 0); + if(_IS_ME(var)) + _destroy_object_capsule_only(var->data, 0); + else + _destroy_object(var->data, 0); safe_free(var); } @@ -12374,9 +12424,13 @@ static int _core_let(mb_interpreter_t* s, void** l) { if(result != MB_FUNC_OK) goto _exit; } else if(obj->type == _DT_VAR) { - evar = obj->data.variable; - var = _search_var_in_scope_chain(s, obj->data.variable); - if(var == evar) evar = 0; + if(_IS_ME(obj->data.variable)) { + _handle_error_on_obj(s, SE_RN_CANNOT_CHANGE_ME, s->source_file, DON(ast), MB_FUNC_ERR, _exit, result); + } else { + evar = obj->data.variable; + var = _search_var_in_scope_chain(s, obj->data.variable); + if(var == evar) evar = 0; + } } else { _handle_error_on_obj(s, SE_RN_VAR_OR_ARRAY_EXPECTED, s->source_file, DON(ast), MB_FUNC_ERR, _exit, result); } @@ -13521,7 +13575,7 @@ static int _core_new(mb_interpreter_t* s, void** l) { /* Fall through */ case MB_DT_CLASS: _public_value_to_internal_object(&arg, &obj); - _clone_object(s, &obj, &tgt, false); + _clone_object(s, &obj, &tgt, false, true); ret.type = MB_DT_CLASS; ret.value.instance = tgt.data.instance; @@ -15546,14 +15600,14 @@ static int _coll_clone(mb_interpreter_t* s, void** l) { switch(coll.type) { case MB_DT_LIST: _public_value_to_internal_object(&coll, &ocoll); - _clone_object(s, &ocoll, &otgt, false); + _clone_object(s, &ocoll, &otgt, false, true); ret.type = MB_DT_LIST; ret.value.list = otgt.data.list; break; case MB_DT_DICT: _public_value_to_internal_object(&coll, &ocoll); - _clone_object(s, &ocoll, &otgt, false); + _clone_object(s, &ocoll, &otgt, false, true); ret.type = MB_DT_DICT; ret.value.dict = otgt.data.dict; diff --git a/core/my_basic.h b/core/my_basic.h index cabc8db..8a7371e 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -338,6 +338,7 @@ typedef enum mb_error_e { SE_RN_CLASS_EXPECTED, SE_RN_DUPLICATE_CLASS, SE_RN_WRONG_META_CLASS, + SE_RN_CANNOT_CHANGE_ME, SE_RN_INVALID_LAMBDA, SE_RN_LIST_EXPECTED, SE_RN_COLLECTION_EXPECTED, diff --git a/output/my_basic.exe b/output/my_basic.exe index ba20059022ea5c6dc137c9efc68f1fddd1924c2c..eda644a8b850ae6ecbdcb9be3f64e0ada89b2e97 100755 GIT binary patch delta 34323 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 delta 33916 zcmeFadw5O97dO6VJ4sFm=ZGYNgp&w~T*zJSP9ir1Cn6EVoitJVh?v?Cn^K_d#nvNj6Vvn}-|8RRfsLVDU}Its##C{f5; zPl3+R>|3m3A{12nM#I7B9F~V*u zL2v?mvGQwin^uh5P8YU|6%W z*y#X4#tGx46pxWXXXJi&=-~FxiIMNo%J##=kKd+kIz)HwU#BLP;ypZ?Qo7gCQ60R+ z2Qn@05HIeQ>8TE`;u^V9?htAv%0ATK@Gb|Z9L9)C?$KV3-aM4*c&t!QVg+5vtEhF! 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 y7cJ>q&}e!SO1hI2(wC$ysV-w#G3=xO