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:
parent
12b9eaf787
commit
69171dc466
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user