#if ENABLE_DC
static BC_STATUS zdc_lex_register(BcLex *l)
{
- if (isspace(l->buf[l->i - 1])) {
- bc_lex_whitespace(l);
- ++l->i;
- if (!G_exreg)
- RETURN_STATUS(bc_error("extended register"));
+ if (G_exreg && isspace(l->buf[l->i])) {
+ bc_lex_whitespace(l); // eats whitespace (but not newline)
+ l->i++; // bc_lex_name() expects this
bc_lex_name(l);
- }
- else {
+ } else {
bc_vec_pop_all(&l->t.v);
- bc_vec_push(&l->t.v, &l->buf[l->i - 1]);
+ bc_vec_push(&l->t.v, &l->buf[l->i++]);
bc_vec_pushZeroByte(&l->t.v);
l->t.t = BC_LEX_NAME;
}
BC_LEX_STORE_PUSH,
};
- BcStatus s = BC_STATUS_SUCCESS;
- char c = l->buf[l->i++], c2;
+ BcStatus s;
+ char c, c2;
size_t i;
for (i = 0; i < ARRAY_SIZE(dc_lex_regs); ++i) {
RETURN_STATUS(zdc_lex_register(l));
}
+ s = BC_STATUS_SUCCESS;
+ c = l->buf[l->i++];
if (c >= '%' && c <= '~'
&& (l->t.t = dc_char_to_LEX[c - '%']) != BC_LEX_INVALID
) {
case '\f':
case '\r':
case ' ':
- l->newline = (c == '\n');
+ l->newline = 0; // was (c == '\n')
bc_lex_whitespace(l);
break;
case '!':