Skip to content

Commit 7440311

Browse files
committed
COMMON: Fix array append regression #122
1 parent 34a9b3e commit 7440311

File tree

6 files changed

+13
-40
lines changed

6 files changed

+13
-40
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2021-07-28 (12.23)
2+
COMMON: Fix array append regression #122
3+
4+
2021-07-28 (12.23)
5+
ANDROID: Hide keypad on run. Show keypad for INPUT, then re-hide on completion.
6+
17
2021-07-28 (12.22)
28
UI: Allow RGB to be used with image array passed to IMAGE
39

src/common/blib.c

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -258,11 +258,6 @@ void cmd_append() {
258258

259259
// for each argument to append
260260
do {
261-
// get the value to append
262-
var_t arg_p;
263-
v_init(&arg_p);
264-
eval(&arg_p);
265-
266261
// find the array element
267262
var_t *elem_p;
268263
if (var_p->type != V_ARRAY) {
@@ -274,7 +269,8 @@ void cmd_append() {
274269
}
275270

276271
// set the value onto the element
277-
v_move(elem_p, &arg_p);
272+
v_init(elem_p);
273+
eval(elem_p);
278274

279275
// next parameter
280276
if (code_peek() != kwTYPE_SEP) {
@@ -288,27 +284,6 @@ void cmd_append() {
288284
} while (1);
289285
}
290286

291-
void cmd_append_opt() {
292-
var_t *v_left = code_getvarptr();
293-
294-
// skip kwTYPE_SEP + ","
295-
code_skipsep();
296-
297-
// skip kwTYPE_VAR
298-
code_skipnext();
299-
300-
var_t *elem_p;
301-
if (v_left->type != V_ARRAY) {
302-
v_toarray1(v_left, 1);
303-
elem_p = v_elem(v_left, 0);
304-
} else {
305-
v_resize_array(v_left, v_asize(v_left) + 1);
306-
elem_p = v_elem(v_left, v_asize(v_left) - 1);
307-
}
308-
309-
v_set(elem_p, tvar[code_getaddr()]);
310-
}
311-
312287
/**
313288
* INSERT A, index, v1 [, vN]
314289
*/

src/common/blib.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ void cmd_packed_let();
3737
void cmd_dim(int);
3838
void cmd_redim(void);
3939
void cmd_append(void);
40-
void cmd_append_opt(void);
4140
void cmd_lins(void);
4241
void cmd_ldel(void);
4342
void cmd_erase(void);

src/common/brun.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -882,9 +882,6 @@ void bc_loop(int isf) {
882882
case kwAPPEND:
883883
cmd_append();
884884
break;
885-
case kwAPPEND_OPT:
886-
cmd_append_opt();
887-
break;
888885
case kwINSERT:
889886
cmd_lins();
890887
break;

src/common/kw.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ enum keyword {
151151
kwFORSEP,
152152
kwOUTPUTSEP,
153153
kwAPPEND,
154-
kwAPPEND_OPT,
155154
kwINSERT,
156155
kwDELETE,
157156
kwAPPENDSEP,

src/common/scan.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3740,20 +3740,20 @@ bcip_t comp_optimise_line_goto(bcip_t ip) {
37403740
}
37413741

37423742
// use simpler LET where possible to avoid eval on the right term
3743-
bcip_t comp_optimise_let(bcip_t ip, byte kw_opr, char sep, byte opt_kw) {
3743+
bcip_t comp_optimise_let(bcip_t ip) {
37443744
bcip_t ip_next = ip + 1;
37453745
if (comp_prog.ptr[ip_next] == kwTYPE_VAR) {
37463746
ip_next += 1 + sizeof(bcip_t);
37473747
while (ip_next < comp_prog.count && comp_prog.ptr[ip_next] != kwTYPE_EOC
37483748
&& comp_prog.ptr[ip_next] != kwTYPE_LINE) {
3749-
if (comp_prog.ptr[ip_next] == kw_opr &&
3750-
comp_prog.ptr[ip_next + 1] == sep) {
3749+
if (comp_prog.ptr[ip_next] == kwTYPE_CMPOPR &&
3750+
comp_prog.ptr[ip_next + 1] == '=') {
37513751
ip_next += 2;
37523752
if (ip_next < comp_prog.count &&
37533753
comp_prog.ptr[ip_next] == kwTYPE_VAR &&
37543754
(comp_prog.ptr[ip_next + 1 + sizeof(bcip_t)] == kwTYPE_EOC ||
37553755
comp_prog.ptr[ip_next + 1 + sizeof(bcip_t)] == kwTYPE_LINE)) {
3756-
comp_prog.ptr[ip] = opt_kw;
3756+
comp_prog.ptr[ip] = kwLET_OPT;
37573757
ip = ip_next;
37583758
}
37593759
break;
@@ -3774,10 +3774,7 @@ void comp_optimise() {
37743774
}
37753775
break;
37763776
case kwLET:
3777-
ip = comp_optimise_let(ip, kwTYPE_CMPOPR, '=', kwLET_OPT);
3778-
break;
3779-
case kwAPPEND:
3780-
ip = comp_optimise_let(ip, kwTYPE_SEP, ',', kwAPPEND_OPT);
3777+
ip = comp_optimise_let(ip);
37813778
break;
37823779
case kwTYPE_EOC:
37833780
if (!opt_autolocal &&

0 commit comments

Comments
 (0)