From a9e7245be1ec975235914ab219aa61d400ee6b17 Mon Sep 17 00:00:00 2001 From: paladin-t Date: Thu, 25 Feb 2016 11:36:34 +0800 Subject: [PATCH] *fixed an array index calculation bug. --- HISTORY | 1 + core/my_basic.c | 14 ++++++-------- output/my_basic.exe | Bin 363520 -> 363520 bytes 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/HISTORY b/HISTORY index 5f72bf7..9aac08e 100755 --- a/HISTORY +++ b/HISTORY @@ -1,5 +1,6 @@ Feb. 25 2016 Fixed a bug with the END and RETURN statement with FOR loop +Fixed an array index calculation bug Feb. 24 2016 Added a TO_ARRAY statement diff --git a/core/my_basic.c b/core/my_basic.c index 897a726..341f7c4 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -5807,6 +5807,7 @@ static int _get_array_pos(mb_interpreter_t* s, _array_t* arr, int* d, int c) { int result = 0; int i = 0; int n = 0; + int f = 1; mb_assert(s && arr && d); @@ -5822,10 +5823,8 @@ static int _get_array_pos(mb_interpreter_t* s, _array_t* arr, int* d, int c) { goto _exit; } - if(result) - result *= n; - else - result += n; + result += n * f; + f *= arr->dimensions[i]; } _exit: @@ -5842,6 +5841,7 @@ static int _get_array_index(mb_interpreter_t* s, _ls_node_t** l, _object_t* c, u _object_t* subscript_ptr = 0; mb_value_u val; int dcount = 0; + int f = 1; unsigned int idx = 0; mb_assert(s && l && index); @@ -5898,14 +5898,12 @@ static int _get_array_index(mb_interpreter_t* s, _ls_node_t** l, _object_t* c, u if((int)val.integer >= arr->data.array->dimensions[dcount]) { _handle_error_on_obj(s, SE_RN_ARRAY_OUT_OF_BOUND, s->source_file, DON(ast), MB_FUNC_ERR, _exit, result); } - if(idx) - idx *= (unsigned int)val.integer; - else - idx += (unsigned int)val.integer; + idx += (unsigned int)val.integer * f; /* Comma? */ if(_IS_SEP(ast->data, ',')) ast = ast->next; + f *= arr->data.array->dimensions[dcount]; ++dcount; } *index = idx; diff --git a/output/my_basic.exe b/output/my_basic.exe index fca3cb3ab34d938c28243b9d90f39b12b9cc5574..57f9e250ff550d37040c2810a0c23f1dc1082e05 100755 GIT binary patch delta 768 zcmYjPUr19?7(e&!s<*W`{>f;%P0z%Oq{x^j8I4qao!?u#`u{&bgKr`%+YMPQlY8W0Ne?(u`#CEjIM2EpoEX zB%qj~{eSG=dk5@F z!OmMxhg*)kFCthVudGji+$|!91#-)(9GR`2=i07snfdw08w1yK0}%=Ful-hI#BFYk z#J5JI{nvqop_N_`Ab1kg4l#Q{MzbDqL+EeK1^H2k9jNX6t4%a`SSlS) bd1MF&gc47AO5#^b=Dgp%m*eza$^D8y{Rbe# delta 759 zcmYjPO=uHA6rSB|>^7!MVkL^TdNBr}Vqt~G1WgoH=wWHFZhDYbp*Igg%WhLFHIdCw zhavW`VtepXJa`bXw1u36NLy{NmR5TxHisY;QVNO^AxQ1|ra=+*?Y#NkeDl4Z$xH?^ zlYwbj5VQTW9^v_5Iy@yOt{`QRs=G|};+{fxvWNYm>ay~IjxOcY3e{`uJ5|@2=2JGQ zR;GFh`vLZmq9Ia0Q)L#Tqg$k4b`S?=#}PuTfvPeo7+qG_W3*b~MpI>RNh!h)5d7#h zP!*`92wmtKz$5_9+p7ad zL26ra+0Tqn=&J~_T{0=+>;iWMD=cG@;BH*HKP*lAE+b6h_D|z%Qw~s|w{ZH1ea;M| z@yQHqAa7uqzB;4b4~*;#z&R*>C6Uv&D({{;4%@I6B(jOgi~tO69i(b5Q)ZnK)mC>x zPy{AP9_o~G`s!^Ltd;qS<8W31XQTV9RY>%~H!ca~>gh5_MiZy-_!AE48&R(h=f?KK zC1{Wbzg%K#(D)rUELw?;Zt+x`O>bscYBLY8vwMVlYR?__Xt??zH^JsQ%t(9O8`6HW@nK zG+Re7N2csIfDG1=gB-bKH>BnQOHA8U-qSFfzu9-A(w!C%`_emal~VaqN|0Yfvi&Pb zIE`Q;C=NDvQABe=zC-A5%nSZuuqwo=|6&s-g5oiF#S@XB_)u_<6@wy}3rxxvgYNuw Q_hS2x_TD_X>mKp{0e?;#6951J