diff options
author | Denys Vlasenko | 2018-12-13 17:36:41 +0100 |
---|---|---|
committer | Denys Vlasenko | 2018-12-13 17:36:41 +0100 |
commit | 7dc0a51286b7898fcc17033dce1f1856e78494b4 (patch) | |
tree | d18bc300437422a9bd56871a1f42a69a717c25a9 | |
parent | 40534bb6e2910a931ae77f0275b048f62896e2a7 (diff) | |
download | busybox-7dc0a51286b7898fcc17033dce1f1856e78494b4.zip busybox-7dc0a51286b7898fcc17033dce1f1856e78494b4.tar.gz |
bc: further zbc_vm_stdin() optimizations
function old new delta
bc_vm_run 534 514 -20
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/bc.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 7ab320a..9c7e69f 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -7072,11 +7072,9 @@ static BC_STATUS zbc_vm_stdin(void) else if (buf.v[0] == G.sbgn) str += 1; } else { - size_t i; - for (i = 0; i < len; ++i) { - char c = string[i]; - - if (i - 1 > len || string[i - 1] != '\\') { + while (*string) { + char c = *string; + if (string != buf.v && string[-1] != '\\') { // checking applet type is cheaper than accessing sbgn/send if (IS_DC) // dc: sbgn = send = '"' str ^= (c == '"'); @@ -7087,16 +7085,15 @@ static BC_STATUS zbc_vm_stdin(void) str += 1; } } - - if (c == '/' && !comment && string[i + 1] == '*') { + string++; + if (c == '/' && *string == '*') { comment = true; break; } - else if (c == '*' && comment && string[i + 1] == '/') + if (c == '*' && *string == '/') comment = false; } - - if (str || comment || string[len - 2] == '\\') { + if (str || comment || string[-2] == '\\') { bc_vec_concat(&buffer, buf.v); continue; } |