bc: simplify nested read() check

function                                             old     new   delta
bc_vm_run                                            622     624      +2
dc_main                                              186     187      +1
bc_main                                               72      73      +1
bc_program_read                                      312     277     -35
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 4/-35)             Total: -31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-12 00:29:24 +01:00
parent 12b9eaf787
commit 69171dc466

View File

@ -736,6 +736,7 @@ typedef struct BcProgram {
struct globals {
IF_FEATURE_BC_SIGNALS(smallint ttyin;)
IF_FEATURE_CLEAN_UP(smallint exiting;)
smallint in_read;
char sbgn;
char send;
@ -5390,20 +5391,18 @@ static BcStatus bc_program_read(void)
BcParse parse;
BcVec buf;
BcInstPtr ip;
size_t i;
BcFunc *f = bc_program_func(BC_PROG_READ);
BcFunc *f;
for (i = 0; i < G.prog.stack.len; ++i) {
BcInstPtr *ip_ptr = bc_vec_item(&G.prog.stack, i);
if (ip_ptr->func == BC_PROG_READ)
return bc_error_nested_read_call();
}
if (G.in_read)
return bc_error_nested_read_call();
f = bc_program_func(BC_PROG_READ);
bc_vec_pop_all(&f->code);
bc_char_vec_init(&buf);
sv_file = G.prog.file;
G.prog.file = NULL;
G.in_read = 1;
s = bc_read_line(&buf);
//if (s) goto io_err; - wrong, nonzero return means EOF, not error
@ -5434,6 +5433,7 @@ static BcStatus bc_program_read(void)
exec_err:
bc_parse_free(&parse);
//io_err:
G.in_read = 0;
G.prog.file = sv_file;
bc_vec_free(&buf);
return s;