aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2020-07-10 11:00:40 +0000
committerStefan Eßer <se@FreeBSD.org>2020-07-10 11:00:40 +0000
commitee177a09be9c81bf1c3e00326e1d38e6edb8e2a4 (patch)
treeaf0a59f24a08cefcc253c012ce216f16651e30aa /src
parent3960d8924a1a0ba2f0f5e8510e73a10ee20d726b (diff)
downloadsrc-ee177a09be9c81bf1c3e00326e1d38e6edb8e2a4.tar.gz
src-ee177a09be9c81bf1c3e00326e1d38e6edb8e2a4.zip
Upgrade to version 3.1.3vendor/bc/3.1.3
This version fixes an incompatibility with GNU bc.
Notes
Notes: svn path=/vendor/bc/dist/; revision=363074 svn path=/vendor/bc/3.1.3/; revision=363075; tag=vendor/bc/3.1.3
Diffstat (limited to 'src')
-rw-r--r--src/vm.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index b3dee16b2e28..905613563e8d 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -602,8 +602,21 @@ restart:
else if (BC_ERR(string))
bc_parse_err(&vm.prs, BC_ERROR_PARSE_STRING);
#if BC_ENABLED
- else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs)))
- bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK);
+ else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs))) {
+
+ size_t i;
+ bool good = true;
+
+ for (i = 0; good && i < vm.prs.flags.len; ++i) {
+ uint16_t flag = *((uint16_t*) bc_vec_item(&vm.prs.flags, i));
+ good = ((flag & BC_PARSE_FLAG_BRACE) != BC_PARSE_FLAG_BRACE);
+ }
+
+ if (good) {
+ while (BC_PARSE_IF_END(&vm.prs)) bc_vm_process("else {}", true);
+ }
+ else bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK);
+ }
#endif // BC_ENABLED
}