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. 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