From 59d44720c1c98a925fe9fc292a0e8d871ddb8af4 Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Tue, 9 Aug 2016 14:26:56 +0800 Subject: [PATCH] +added function overriding support for class instance. --- HISTORY | 3 +- MY-BASIC Quick Reference.pdf | Bin 317636 -> 317986 bytes core/my_basic.c | 96 ++++++++++++++++++++++------------- 3 files changed, 62 insertions(+), 37 deletions(-) diff --git a/HISTORY b/HISTORY index 27cdcec..0897879 100755 --- a/HISTORY +++ b/HISTORY @@ -1,8 +1,9 @@ Aug. 9 2016 +Added function overriding support for class instance Fixed a multiple disposing bug with GC Aug. 7 2016 -Refactored to return UNKNOWN when trying to access a not exist member in a prototype +Refactored to return UNKNOWN when trying to access a not exist member in a class instance Aug. 6 2016 Refactored to return UNKNOWN when trying to access a not exist key in a dictionary diff --git a/MY-BASIC Quick Reference.pdf b/MY-BASIC Quick Reference.pdf index 10551e276af42c6f8b98a23c74e7fbb28e21aa6f..5bb8b6e4c0c7a2932e26cb51c2798d05715edbca 100644 GIT binary patch delta 9710 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 KhunR6^8W$3ub^oF delta 9378 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 == MB_DT_USERTYPE_REF) { + _object_t obj; + _MAKE_NIL(&obj); + _public_value_to_internal_object(d, &obj); + if(t == MB_MF_COLL && obj.data.usertype_ref->coll_func) + return obj.data.usertype_ref->coll_func(s, l, f); + else if(t == MB_MF_FUNC && obj.data.usertype_ref->generic_func) + return obj.data.usertype_ref->generic_func(s, l, f); + } +#endif /* MB_ENABLE_USERTYPE_REF */ +#ifdef MB_ENABLE_CLASS + if(d->type == MB_DT_CLASS) { + char buf[_TEMP_FORMAT_MAX_LENGTH]; + _ls_node_t* ofn = 0; + _object_t obj; + _MAKE_NIL(&obj); + _public_value_to_internal_object(d, &obj); + sprintf(buf, "_%s", f); + ofn = _search_identifier_in_class(s, obj.data.instance, buf, 0, 0); + if(ofn) { + _object_t* ofo = (_object_t*)ofn->data; + _ls_node_t* ast = (_ls_node_t*)*l; + mb_value_t va[1]; + mb_make_nil(va[0]); + if(_eval_routine(s, &ast, va, 0, ofo->data.routine, _has_routine_lex_arg, _pop_routine_lex_arg) == MB_FUNC_OK) { + if(ast) + *l = ast->prev; + + return MB_MS_DONE | MB_MS_RETURNED; + } + } + } +#endif /* MB_ENABLE_CLASS */ +#if !defined MB_ENABLE_USERTYPE_REF && !defined MB_ENABLE_CLASS + mb_unrefvar(t); +#endif /* !MB_ENABLE_USERTYPE_REF && !MB_ENABLE_CLASS */ + + return MB_MS_NONE; +} + /** Handlers */ /* Set current error information */ @@ -6338,27 +6383,6 @@ static void _unref_usertype_ref(_ref_t* ref, void* data) { } #endif /* MB_ENABLE_USERTYPE_REF */ -/* Try to call overridden referenced usertype function */ -static mb_meta_status_u _try_overridden_usertype_ref(mb_interpreter_t* s, void** l, mb_value_t* d, const char* f, mb_meta_func_u t) { - mb_assert(s && l && d && f); - -#ifdef MB_ENABLE_USERTYPE_REF - if(d->type == MB_DT_USERTYPE_REF) { - _object_t obj; - _MAKE_NIL(&obj); - _public_value_to_internal_object(d, &obj); - if(t == MB_MF_COLL && obj.data.usertype_ref->coll_func) - return obj.data.usertype_ref->coll_func(s, l, f); - else if(t == MB_MF_FUNC && obj.data.usertype_ref->generic_func) - return obj.data.usertype_ref->generic_func(s, l, f); - } -#else /* MB_ENABLE_USERTYPE_REF */ - mb_unrefvar(t); -#endif /* MB_ENABLE_USERTYPE_REF */ - - return MB_MS_NONE; -} - /* Create an array */ static _array_t* _create_array(mb_interpreter_t* s, const char* n, _data_e t) { _array_t* result = 0; @@ -14848,7 +14872,7 @@ static int _core_type(mb_interpreter_t* s, void** l) { } } } - os = _try_overridden_usertype_ref(s, l, &arg, _CORE_ID_TYPE, MB_MF_FUNC); + os = _try_overridden(s, l, &arg, _CORE_ID_TYPE, MB_MF_FUNC); if((os & MB_MS_DONE) == MB_MS_NONE) { arg.value.type = arg.type; arg.type = MB_DT_TYPE; @@ -15645,7 +15669,7 @@ static int _std_val(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &arg)); - os = _try_overridden_usertype_ref(s, l, &arg, _STD_ID_VAL, MB_MF_FUNC); + os = _try_overridden(s, l, &arg, _STD_ID_VAL, MB_MF_FUNC); if((os & MB_MS_DONE) == MB_MS_NONE) { switch(arg.type) { case MB_DT_STRING: @@ -15727,7 +15751,7 @@ static int _std_len(mb_interpreter_t* s, void** l) { goto _exit; } mb_check(mb_pop_value(s, l, &arg)); - os = _try_overridden_usertype_ref(s, l, &arg, _STD_ID_LEN, MB_MF_FUNC); + os = _try_overridden(s, l, &arg, _STD_ID_LEN, MB_MF_FUNC); if((os & MB_MS_DONE) == MB_MS_NONE) { switch(arg.type) { case MB_DT_STRING: @@ -15800,7 +15824,7 @@ static int _std_get(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &ov)); - os = _try_overridden_usertype_ref(s, l, &ov, _STD_ID_GET, MB_MF_FUNC); + os = _try_overridden(s, l, &ov, _STD_ID_GET, MB_MF_FUNC); if((os & MB_MS_DONE) == MB_MS_NONE) { _MAKE_NIL(&obj); switch(ov.type) { @@ -15902,7 +15926,7 @@ static int _std_set(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &ov)); - os = _try_overridden_usertype_ref(s, l, &ov, _STD_ID_SET, MB_MF_FUNC); + os = _try_overridden(s, l, &ov, _STD_ID_SET, MB_MF_FUNC); if((os & MB_MS_DONE) == MB_MS_NONE) { _MAKE_NIL(&obj); switch(ov.type) { @@ -16339,7 +16363,7 @@ static int _coll_push(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_PUSH, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_PUSH, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { if(coll.type != MB_DT_LIST) { _handle_error_on_obj(s, SE_RN_LIST_EXPECTED, s->source_file, DON2(l), MB_FUNC_ERR, _exit, result); @@ -16383,7 +16407,7 @@ static int _coll_pop(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_POP, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_POP, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { if(coll.type != MB_DT_LIST) { _handle_error_on_obj(s, SE_RN_LIST_EXPECTED, s->source_file, DON2(l), MB_FUNC_ERR, _exit, result); @@ -16435,7 +16459,7 @@ static int _coll_peek(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_PEEK, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_PEEK, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { if(coll.type != MB_DT_LIST) { _handle_error_on_obj(s, SE_RN_LIST_EXPECTED, s->source_file, DON2(l), MB_FUNC_ERR, _exit, result); @@ -16488,7 +16512,7 @@ static int _coll_insert(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_INSERT, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_INSERT, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { mb_check(mb_pop_int(s, l, &idx)); mb_check(mb_pop_value(s, l, &arg)); @@ -16534,7 +16558,7 @@ static int _coll_sort(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_SORT, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_SORT, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { if(coll.type != MB_DT_LIST) { _handle_error_on_obj(s, SE_RN_LIST_EXPECTED, s->source_file, DON2(l), MB_FUNC_ERR, _exit, result); @@ -16575,7 +16599,7 @@ static int _coll_exist(mb_interpreter_t* s, void** l){ mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_EXIST, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_EXIST, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { mb_check(mb_pop_value(s, l, &arg)); @@ -16630,7 +16654,7 @@ static int _coll_index_of(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_INDEX_OF, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_INDEX_OF, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { ret.type = MB_DT_UNKNOWN; mb_check(mb_pop_value(s, l, &val)); @@ -16679,7 +16703,7 @@ static int _coll_remove(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_REMOVE, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_REMOVE, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { _MAKE_NIL(&ocoll); switch(coll.type) { @@ -16738,7 +16762,7 @@ static int _coll_clear(mb_interpreter_t* s, void** l) { mb_check(mb_attempt_open_bracket(s, l)); mb_check(mb_pop_value(s, l, &coll)); - os = _try_overridden_usertype_ref(s, l, &coll, _COLL_ID_CLEAR, MB_MF_COLL); + os = _try_overridden(s, l, &coll, _COLL_ID_CLEAR, MB_MF_COLL); if((os & MB_MS_DONE) == MB_MS_NONE) { _MAKE_NIL(&ocoll); switch(coll.type) {