dc: execute shouldn't pop if stack head is not a string
No binary (build failed)
—
(log yok)
| @@ -6521,7 +6521,7 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond) | |
| if (s || !BC_PROG_STR(n)) goto exit; | |
| sidx = n->rdx; | |
| } else | |
| - | goto exit; |
| + | goto exit_nopop; |
| } | |
| fidx = sidx + BC_PROG_REQ_FUNCS; | |
| @@ -6561,6 +6561,7 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond) | |
| RETURN_STATUS(BC_STATUS_SUCCESS); | |
| exit: | |
| bc_vec_pop(&G.prog.results); | |
| + | exit_nopop: |
| RETURN_STATUS(s); | |
| } | |
| #define zdc_program_execStr(...) (zdc_program_execStr(__VA_ARGS__) COMMA_SUCCESS) | |
| @@ -44,6 +44,16 @@ testing "dc complex without spaces (multiple args)" \ | |
| optional FEATURE_DC_BIG | |
| # All tests below depend on FEATURE_DC_BIG | |
| + | testing "dc: x should execute strings" \ |
| + | "dc -e'[40 2 +] x f'" \ |
| + | "42\n" \ |
| + | "" "" |
| + | |
| + | testing "dc: x should not execute or pop non-strings" \ |
| + | "dc -e'42 x f'" \ |
| + | "42\n" \ |
| + | "" "" |
| + | |
| testing "dc read" \ | |
| "dc -finput" \ | |
| "2\n9\n1\n" \ | |