dc: fit returning of string
function old new delta zxc_program_exec 4087 4098 +11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
6842c6062a
commit
1db367a8e6
@ -6020,6 +6020,9 @@ static BC_STATUS zbc_program_return(char inst)
|
|||||||
BcInstPtr *ip = bc_vec_top(&G.prog.exestack);
|
BcInstPtr *ip = bc_vec_top(&G.prog.exestack);
|
||||||
|
|
||||||
if (inst == XC_INST_RET) {
|
if (inst == XC_INST_RET) {
|
||||||
|
// bc needs this for e.g. RESULT_CONSTANT ("return 5")
|
||||||
|
// because bc constants are per-function.
|
||||||
|
// TODO: maybe avoid if value is already RESULT_TEMP?
|
||||||
BcStatus s;
|
BcStatus s;
|
||||||
BcNum *num;
|
BcNum *num;
|
||||||
BcResult *operand = bc_vec_top(&G.prog.results);
|
BcResult *operand = bc_vec_top(&G.prog.results);
|
||||||
@ -6458,7 +6461,17 @@ static BC_STATUS zxc_program_exec(void)
|
|||||||
|
|
||||||
dbg_exec("inst at %zd:%d results.len:%d", ip->inst_idx - 1, inst, G.prog.results.len);
|
dbg_exec("inst at %zd:%d results.len:%d", ip->inst_idx - 1, inst, G.prog.results.len);
|
||||||
switch (inst) {
|
switch (inst) {
|
||||||
|
case XC_INST_RET:
|
||||||
|
if (IS_DC) { // end of '?' reached
|
||||||
|
bc_vec_pop(&G.prog.exestack);
|
||||||
|
goto read_updated_ip;
|
||||||
|
}
|
||||||
|
// bc: fall through
|
||||||
#if ENABLE_BC
|
#if ENABLE_BC
|
||||||
|
case BC_INST_RET0:
|
||||||
|
dbg_exec("BC_INST_RET[0]:");
|
||||||
|
s = zbc_program_return(inst);
|
||||||
|
goto read_updated_ip;
|
||||||
case BC_INST_JUMP_ZERO: {
|
case BC_INST_JUMP_ZERO: {
|
||||||
BcNum *num;
|
BcNum *num;
|
||||||
bool zero;
|
bool zero;
|
||||||
@ -6495,11 +6508,6 @@ static BC_STATUS zxc_program_exec(void)
|
|||||||
dbg_exec("BC_INST_HALT:");
|
dbg_exec("BC_INST_HALT:");
|
||||||
QUIT_OR_RETURN_TO_MAIN;
|
QUIT_OR_RETURN_TO_MAIN;
|
||||||
break;
|
break;
|
||||||
case XC_INST_RET:
|
|
||||||
case BC_INST_RET0:
|
|
||||||
dbg_exec("BC_INST_RET[0]:");
|
|
||||||
s = zbc_program_return(inst);
|
|
||||||
goto read_updated_ip;
|
|
||||||
case XC_INST_BOOL_OR:
|
case XC_INST_BOOL_OR:
|
||||||
case XC_INST_BOOL_AND:
|
case XC_INST_BOOL_AND:
|
||||||
#endif // ENABLE_BC
|
#endif // ENABLE_BC
|
||||||
|
@ -46,6 +46,11 @@ testing "dc read" \
|
|||||||
"2\n9\n1\n" \
|
"2\n9\n1\n" \
|
||||||
"1?2\nf" "9\n"
|
"1?2\nf" "9\n"
|
||||||
|
|
||||||
|
testing "dc read string" \
|
||||||
|
"dc -finput" \
|
||||||
|
"2\nstr\n1\n" \
|
||||||
|
"1?2\nf" "[str]\n"
|
||||||
|
|
||||||
optional FEATURE_DC_BIG
|
optional FEATURE_DC_BIG
|
||||||
# All tests below depend on FEATURE_DC_BIG
|
# All tests below depend on FEATURE_DC_BIG
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user