diff --git a/HISTORY b/HISTORY index e0076b4..d509a66 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,6 @@ +Jul. 4 2017 +Added function overriding support of the ITERATOR statement + Jul. 3 2017 Fixed a disposing bug with non-referenced array diff --git a/MY-BASIC Quick Reference.pdf b/MY-BASIC Quick Reference.pdf index dd40d65..822b310 100644 Binary files a/MY-BASIC Quick Reference.pdf and b/MY-BASIC Quick Reference.pdf differ diff --git a/README.md b/README.md index e7393d5..35e4090 100755 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ [![Build status](https://travis-ci.org/paladin-t/my_basic.svg?branch=master)](https://travis-ci.org/paladin-t/my_basic) [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT) -[简体中文](https://github.com/paladin-t/my_basic/wiki/%E7%94%B1%E7%BA%AF-C-%E8%AF%AD%E8%A8%80%E7%BC%96%E5%86%99%E7%9A%84-BASIC-%E8%84%9A%E6%9C%AC%E8%A7%A3%E9%87%8A%E5%99%A8), [捐款](https://github.com/paladin-t/my_basic/wiki/%E7%94%B1%E7%BA%AF-C-%E8%AF%AD%E8%A8%80%E7%BC%96%E5%86%99%E7%9A%84-BASIC-%E8%84%9A%E6%9C%AC%E8%A7%A3%E9%87%8A%E5%99%A8#%E6%8D%90%E6%AC%BE) +[简体中文](https://github.com/paladin-t/my_basic/wiki/%E7%94%B1%E7%BA%AF-C-%E8%AF%AD%E8%A8%80%E7%BC%96%E5%86%99%E7%9A%84-BASIC-%E8%84%9A%E6%9C%AC%E8%A7%A3%E9%87%8A%E5%99%A8) [开发日志](http://blog.sina.com.cn/s/articlelist_1584387113_12_1.html) @@ -38,6 +38,8 @@ The prefix "MY-" in the name means either literally "My" or "Make Your", it's up It fits well on a large scale of Workstation, PC, Tablet, Pad, Mobile Phone, PDA, Video Game Console, Raspberry Pi, Intel Edison, Arduino and even MCU; totally portable to Windows, macOS, Unix, Linux, iOS, Android, RTOS, etc. +May be used as an alternative of something like Lua. + **For Arduino** There is a MY-BASIC interpreter porting of Arduino, with a totally rewritten shell and user manual. Please see [MY-BASIC ARDU](https://my-basic.github.io/my_basic_ardu/). diff --git a/core/my_basic.c b/core/my_basic.c index 3b395f4..898f0a2 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -10661,7 +10661,7 @@ static int _execute_ranged_for_loop(mb_interpreter_t* s, _ls_node_t** l, _var_t* _object_t* old_val = 0; _object_t range; _ls_node_t* to_node = 0; - _object_t* range_ptr; + _object_t* range_ptr = 0; _list_it_t* lit = 0; _dict_it_t* dit = 0; _list_it_t* tlit = 0; @@ -18094,6 +18094,7 @@ static int _coll_iterator(mb_interpreter_t* s, void** l) { _list_it_t* lit = 0; _dict_it_t* dit = 0; mb_value_t ret; + mb_meta_status_e os = MB_MS_NONE; mb_assert(s && l); @@ -18103,33 +18104,37 @@ static int _coll_iterator(mb_interpreter_t* s, void** l) { _mb_check_mark_exit(mb_attempt_open_bracket(s, l), result, _exit); _mb_check_mark_exit(mb_pop_value(s, l, &coll), result, _exit); + os = _try_overridden(s, l, &coll, _COLL_ID_ITERATOR, MB_MF_COLL); + if((os & MB_MS_DONE) == MB_MS_NONE) { + _MAKE_NIL(&ocoll); + switch(coll.type) { + case MB_DT_LIST: + _public_value_to_internal_object(&coll, &ocoll); + lit = _create_list_it(ocoll.data.list, false); + ret.type = MB_DT_LIST_IT; + ret.value.list_it = lit; + + break; + case MB_DT_DICT: + _public_value_to_internal_object(&coll, &ocoll); + dit = _create_dict_it(ocoll.data.dict, false); + ret.type = MB_DT_DICT_IT; + ret.value.list_it = dit; + + break; + default: + _handle_error_on_obj(s, SE_RN_COLLECTION_EXPECTED, s->source_file, DON2(l), MB_FUNC_ERR, _exit, result); + + break; + } + } _mb_check_mark_exit(mb_attempt_close_bracket(s, l), result, _exit); - _MAKE_NIL(&ocoll); - switch(coll.type) { - case MB_DT_LIST: - _public_value_to_internal_object(&coll, &ocoll); - lit = _create_list_it(ocoll.data.list, false); - ret.type = MB_DT_LIST_IT; - ret.value.list_it = lit; - - break; - case MB_DT_DICT: - _public_value_to_internal_object(&coll, &ocoll); - dit = _create_dict_it(ocoll.data.dict, false); - ret.type = MB_DT_DICT_IT; - ret.value.list_it = dit; - - break; - default: - _handle_error_on_obj(s, SE_RN_COLLECTION_EXPECTED, s->source_file, DON2(l), MB_FUNC_ERR, _exit, result); - - break; + if((os & MB_MS_RETURNED) == MB_MS_NONE) { + _mb_check_mark_exit(mb_push_value(s, l, ret), result, _exit); } - _mb_check_mark_exit(mb_push_value(s, l, ret), result, _exit); - _exit: _assign_public_value(&coll, 0); diff --git a/donate.html b/donate.html index 9fb71cc..4498ba1 100644 --- a/donate.html +++ b/donate.html @@ -84,10 +84,6 @@ DO NOT CHANGE THIS FILE. - -

- 中国用户可选择通过微信扫码捐款。 -


Questions