On Sun, Nov 26, 2017 at 07:43:22PM +0000, kshe wrote: > Hi, > > This assignment is useless. > > Index: bcode.c > =================================================================== > RCS file: /cvs/src/usr.bin/dc/bcode.c,v > retrieving revision 1.51 > diff -u -p -r1.51 bcode.c > --- bcode.c 26 Feb 2017 11:29:55 -0000 1.51 > +++ bcode.c 26 Oct 2017 04:44:01 -0000 > @@ -1630,7 +1611,7 @@ skip_until_mark(void) > free(read_string(&bmachine.readstack[bmachine.readsp])); > break; > case '!': > - switch (ch = readch()) { > + switch (readch()) { > case '<': > case '>': > case '=': > > The above diff does not cause any change in the optimised executable > output, because such removal was obviously already performed by the > compiler.
I just committed a diff that just eliminates the 'int ch' altogether. -Otto > > Alternatively, while here, this function could be slightly shortened as > follows. > > Index: bcode.c > =================================================================== > RCS file: /cvs/src/usr.bin/dc/bcode.c,v > retrieving revision 1.51 > diff -u -p -r1.51 bcode.c > --- bcode.c 26 Feb 2017 11:29:55 -0000 1.51 > +++ bcode.c 17 Nov 2017 02:38:12 -0000 > @@ -1610,7 +1590,13 @@ skip_until_mark(void) > return; > case EOF: > errx(1, "mark not found"); > - return; > + case '!': > + ch = readch(); > + if (ch != '<' && ch != '>' && ch != '=') { > + free(readline()); > + break; > + } > + /* fall through */ > case 'l': > case 'L': > case 's': > @@ -1629,22 +1615,6 @@ skip_until_mark(void) > case '[': > free(read_string(&bmachine.readstack[bmachine.readsp])); > break; > - case '!': > - switch (ch = readch()) { > - case '<': > - case '>': > - case '=': > - (void)readreg(); > - if (readch() == 'e') > - (void)readreg(); > - else > - unreadch(); > - break; > - default: > - free(readline()); > - break; > - } > - break; > default: > break; > } > > Regards, > > kshe