Remove the inner struct from BcLex
diff --git a/include/lex.h b/include/lex.h
index 6d92036..d778f6b 100644
--- a/include/lex.h
+++ b/include/lex.h
@@ -150,11 +150,9 @@
size_t len;
bool newline;
- struct {
- BcLexType t;
- BcLexType last;
- BcVec v;
- } t;
+ BcLexType t;
+ BcLexType last;
+ BcVec str;
// ** Exclude start. **
BcLexNext next;
diff --git a/src/bc/lex.c b/src/bc/lex.c
index c06d77d..4a4d9dc 100644
--- a/src/bc/lex.c
+++ b/src/bc/lex.c
@@ -43,7 +43,7 @@
if (strncmp(buf, bc_lex_kws[i].name, len) == 0 &&
!isalnum(buf[len]) && buf[len] != '_')
{
- l->t.t = BC_LEX_KEY_AUTO + (BcLexType) i;
+ l->t = BC_LEX_KEY_AUTO + (BcLexType) i;
if (!BC_LEX_KW_POSIX(bc_lex_kws[i])) {
s = bc_vm_posixError(BC_ERROR_POSIX_BAD_KW, l->line,
@@ -60,7 +60,7 @@
s = bc_lex_name(l);
if (s) return s;
- if (l->t.v.len - 1 > 1)
+ if (l->str.len - 1 > 1)
s = bc_vm_posixError(BC_ERROR_POSIX_NAME_LEN, l->line, buf);
return s;
@@ -72,7 +72,7 @@
const char *buf = l->buf;
char c;
- l->t.t = BC_LEX_STR;
+ l->t = BC_LEX_STR;
for (c = buf[i]; c != 0 && c != '"'; c = buf[++i]) nlines += c == '\n';
@@ -86,7 +86,7 @@
if (len > BC_MAX_STRING)
return bc_vm_error(BC_ERROR_EXEC_STRING_LEN, l->line);
- bc_vec_string(&l->t.v, len, l->buf + l->i);
+ bc_vec_string(&l->str, len, l->buf + l->i);
l->i = i + 1;
l->line += nlines;
@@ -97,9 +97,9 @@
void bc_lex_assign(BcLex *l, BcLexType with, BcLexType without) {
if (l->buf[l->i] == '=') {
++l->i;
- l->t.t = with;
+ l->t = with;
}
- else l->t.t = without;
+ else l->t = without;
}
BcStatus bc_lex_token(BcLex *l) {
@@ -114,7 +114,7 @@
case '\n':
{
l->newline = true;
- l->t.t = !c ? BC_LEX_EOF : BC_LEX_NLINE;
+ l->t = !c ? BC_LEX_EOF : BC_LEX_NLINE;
break;
}
@@ -132,7 +132,7 @@
{
bc_lex_assign(l, BC_LEX_OP_REL_NE, BC_LEX_OP_BOOL_NOT);
- if (l->t.t == BC_LEX_OP_BOOL_NOT) {
+ if (l->t == BC_LEX_OP_BOOL_NOT) {
s = bc_vm_posixError(BC_ERROR_POSIX_BOOL, l->line, "!");
if (s) return s;
}
@@ -171,10 +171,10 @@
if (s) return s;
++l->i;
- l->t.t = BC_LEX_OP_BOOL_AND;
+ l->t = BC_LEX_OP_BOOL_AND;
}
else {
- l->t.t = BC_LEX_INVALID;
+ l->t = BC_LEX_INVALID;
s = bc_vm_error(BC_ERROR_PARSE_BAD_CHAR, l->line);
}
@@ -184,7 +184,7 @@
case '(':
case ')':
{
- l->t.t = (BcLexType) (c - '(' + BC_LEX_LPAREN);
+ l->t = (BcLexType) (c - '(' + BC_LEX_LPAREN);
break;
}
@@ -199,7 +199,7 @@
c2 = l->buf[l->i];
if (c2 == '+') {
++l->i;
- l->t.t = BC_LEX_OP_INC;
+ l->t = BC_LEX_OP_INC;
}
else bc_lex_assign(l, BC_LEX_OP_ASSIGN_PLUS, BC_LEX_OP_PLUS);
break;
@@ -207,7 +207,7 @@
case ',':
{
- l->t.t = BC_LEX_COMMA;
+ l->t = BC_LEX_COMMA;
break;
}
@@ -216,7 +216,7 @@
c2 = l->buf[l->i];
if (c2 == '-') {
++l->i;
- l->t.t = BC_LEX_OP_DEC;
+ l->t = BC_LEX_OP_DEC;
}
else bc_lex_assign(l, BC_LEX_OP_ASSIGN_MINUS, BC_LEX_OP_MINUS);
break;
@@ -226,7 +226,7 @@
{
if (isdigit(l->buf[l->i])) s = bc_lex_number(l, c);
else {
- l->t.t = BC_LEX_KEY_LAST;
+ l->t = BC_LEX_KEY_LAST;
s = bc_vm_posixError(BC_ERROR_POSIX_DOT, l->line);
}
break;
@@ -263,7 +263,7 @@
case ';':
{
- l->t.t = BC_LEX_SCOLON;
+ l->t = BC_LEX_SCOLON;
break;
}
@@ -288,14 +288,14 @@
case '[':
case ']':
{
- l->t.t = (BcLexType) (c - '[' + BC_LEX_LBRACKET);
+ l->t = (BcLexType) (c - '[' + BC_LEX_LBRACKET);
break;
}
case '\\':
{
if (l->buf[l->i] == '\n') {
- l->t.t = BC_LEX_WHITESPACE;
+ l->t = BC_LEX_WHITESPACE;
++l->i;
}
else s = bc_vm_error(BC_ERROR_PARSE_BAD_CHAR, l->line);
@@ -342,7 +342,7 @@
case '{':
case '}':
{
- l->t.t = (BcLexType) (c - '{' + BC_LEX_LBRACE);
+ l->t = (BcLexType) (c - '{' + BC_LEX_LBRACE);
break;
}
@@ -356,10 +356,10 @@
if (s) return s;
++l->i;
- l->t.t = BC_LEX_OP_BOOL_OR;
+ l->t = BC_LEX_OP_BOOL_OR;
}
else {
- l->t.t = BC_LEX_INVALID;
+ l->t = BC_LEX_INVALID;
s = bc_vm_error(BC_ERROR_PARSE_BAD_CHAR, l->line);
}
@@ -368,7 +368,7 @@
default:
{
- l->t.t = BC_LEX_INVALID;
+ l->t = BC_LEX_INVALID;
s = bc_vm_error(BC_ERROR_PARSE_BAD_CHAR, l->line);
break;
}
diff --git a/src/bc/parse.c b/src/bc/parse.c
index ea25d8b..7a5417d 100644
--- a/src/bc/parse.c
+++ b/src/bc/parse.c
@@ -105,13 +105,13 @@
s = bc_lex_next(&p->l);
if (s) return s;
- for (nparams = 0; p->l.t.t != BC_LEX_RPAREN; ++nparams) {
+ for (nparams = 0; p->l.t != BC_LEX_RPAREN; ++nparams) {
flags = (flags & ~(BC_PARSE_PRINT | BC_PARSE_REL)) | BC_PARSE_ARRAY;
s = bc_parse_expr_status(p, flags, bc_parse_next_param);
if (s) return s;
- comma = p->l.t.t == BC_LEX_COMMA;
+ comma = p->l.t == BC_LEX_COMMA;
if (comma) {
s = bc_lex_next(&p->l);
if (s) return s;
@@ -136,7 +136,7 @@
s = bc_parse_params(p, flags);
if (s) goto err;
- if (p->l.t.t != BC_LEX_RPAREN) {
+ if (p->l.t != BC_LEX_RPAREN) {
s = bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
goto err;
}
@@ -168,16 +168,16 @@
BcStatus s;
char *name;
- name = bc_vm_strdup(p->l.t.v.v);
+ name = bc_vm_strdup(p->l.str.v);
s = bc_lex_next(&p->l);
if (s) goto err;
- if (p->l.t.t == BC_LEX_LBRACKET) {
+ if (p->l.t == BC_LEX_LBRACKET) {
s = bc_lex_next(&p->l);
if (s) goto err;
- if (p->l.t.t == BC_LEX_RBRACKET) {
+ if (p->l.t == BC_LEX_RBRACKET) {
if (!(flags & BC_PARSE_ARRAY)) {
s = bc_vm_error(BC_ERROR_PARSE_BAD_EXP, p->l.line);
@@ -200,7 +200,7 @@
bc_parse_push(p, *type);
bc_parse_pushName(p, name);
}
- else if (p->l.t.t == BC_LEX_LPAREN) {
+ else if (p->l.t == BC_LEX_LPAREN) {
if (flags & BC_PARSE_NOCALL) {
s = bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
@@ -229,12 +229,12 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN)
+ if (p->l.t != BC_LEX_LPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_RPAREN)
+ if (p->l.t != BC_LEX_RPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
bc_parse_push(p, BC_INST_READ);
@@ -249,7 +249,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN)
+ if (p->l.t != BC_LEX_LPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
flags = (flags & ~(BC_PARSE_PRINT | BC_PARSE_REL)) | BC_PARSE_ARRAY;
@@ -260,7 +260,7 @@
s = bc_parse_expr_status(p, flags, bc_parse_next_rel);
if (s) return s;
- if (p->l.t.t != BC_LEX_RPAREN)
+ if (p->l.t != BC_LEX_RPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
*prev = (type == BC_LEX_KEY_LENGTH) ? BC_INST_LENGTH : BC_INST_SQRT;
@@ -276,7 +276,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN) {
+ if (p->l.t != BC_LEX_LPAREN) {
*type = BC_INST_SCALE;
bc_parse_push(p, BC_INST_SCALE);
return BC_STATUS_SUCCESS;
@@ -290,7 +290,7 @@
s = bc_parse_expr_status(p, flags, bc_parse_next_rel);
if (s) return s;
- if (p->l.t.t != BC_LEX_RPAREN)
+ if (p->l.t != BC_LEX_RPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
bc_parse_push(p, BC_INST_SCALE_FUNC);
@@ -310,18 +310,18 @@
etype == BC_INST_SCALE || etype == BC_INST_LAST ||
etype == BC_INST_IBASE || etype == BC_INST_OBASE)
{
- *prev = inst = BC_INST_INC_POST + (p->l.t.t != BC_LEX_OP_INC);
+ *prev = inst = BC_INST_INC_POST + (p->l.t != BC_LEX_OP_INC);
bc_parse_push(p, inst);
s = bc_lex_next(&p->l);
}
else {
- *prev = inst = BC_INST_INC_PRE + (p->l.t.t != BC_LEX_OP_INC);
+ *prev = inst = BC_INST_INC_PRE + (p->l.t != BC_LEX_OP_INC);
*paren_expr = true;
s = bc_lex_next(&p->l);
if (s) return s;
- type = p->l.t.t;
+ type = p->l.t;
// Because we parse the next part of the expression
// right here, we need to increment this.
@@ -348,7 +348,7 @@
{
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t == BC_LEX_LPAREN)
+ if (p->l.t == BC_LEX_LPAREN)
s = bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
else bc_parse_push(p, BC_INST_SCALE);
break;
@@ -397,9 +397,9 @@
BcStatus s = BC_STATUS_SUCCESS;
- if (!BC_PARSE_VALID_END_TOKEN(p->l.t.t))
+ if (!BC_PARSE_VALID_END_TOKEN(p->l.t))
s = bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
- else if (p->l.t.t == BC_LEX_SCOLON || p->l.t.t == BC_LEX_NLINE)
+ else if (p->l.t == BC_LEX_SCOLON || p->l.t == BC_LEX_NLINE)
s = bc_lex_next(&p->l);
// I need to check for right brace and keywords specifically.
else {
@@ -407,7 +407,7 @@
size_t i;
bool good = false;
- if (p->l.t.t == BC_LEX_RBRACE) {
+ if (p->l.t == BC_LEX_RBRACE) {
for (i = 0; !good && i < p->flags.len; ++i) {
uint16_t *fptr = bc_vec_item_rev(&p->flags, i);
good = ((*fptr) & BC_PARSE_FLAG_BRACE) != 0;
@@ -430,7 +430,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- t = p->l.t.t;
+ t = p->l.t;
if (BC_PARSE_VALID_END_TOKEN(t))
return bc_vm_error(BC_ERROR_PARSE_BAD_PRINT, p->l.line);
@@ -445,9 +445,9 @@
if (s) return s;
- comma = p->l.t.t == BC_LEX_COMMA;
+ comma = p->l.t == BC_LEX_COMMA;
if (comma) s = bc_lex_next(&p->l);
- t = p->l.t.t;
+ t = p->l.t;
} while (!s && !BC_PARSE_VALID_END_TOKEN(t));
if (s) return s;
@@ -467,7 +467,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- t = p->l.t.t;
+ t = p->l.t;
paren = t == BC_LEX_LPAREN;
if (BC_PARSE_VALID_END_TOKEN(t)) bc_parse_push(p, BC_INST_RET0);
@@ -481,7 +481,7 @@
if (s) return s;
}
- if (!paren || p->l.t.last != BC_LEX_RPAREN) {
+ if (!paren || p->l.last != BC_LEX_RPAREN) {
s = bc_vm_posixError(BC_ERROR_POSIX_RET, p->l.line);
if (s) return s;
}
@@ -500,7 +500,7 @@
if (p->flags.len <= 1) return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
if (brace) {
- if (p->l.t.t == BC_LEX_RBRACE) {
+ if (p->l.t == BC_LEX_RBRACE) {
s = bc_lex_next(&p->l);
if (s) return s;
}
@@ -552,7 +552,7 @@
// This needs to be last to parse nested if's properly.
if (BC_PARSE_IF(p) && (len == p->flags.len || !BC_PARSE_BRACE(p))) {
- while (p->l.t.t == BC_LEX_NLINE) {
+ while (p->l.t == BC_LEX_NLINE) {
s = bc_lex_next(&p->l);
if (s) return s;
}
@@ -560,7 +560,7 @@
bc_vec_pop(&p->flags);
*(BC_PARSE_TOP_FLAG_PTR(p)) |= BC_PARSE_FLAG_IF_END;
- new_else = (p->l.t.t == BC_LEX_KEY_ELSE);
+ new_else = (p->l.t == BC_LEX_KEY_ELSE);
if (new_else) s = bc_parse_else(p);
}
@@ -600,14 +600,14 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN)
+ if (p->l.t != BC_LEX_LPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
s = bc_parse_expr_status(p, BC_PARSE_REL, bc_parse_next_rel);
if (s) return s;
- if (p->l.t.t != BC_LEX_RPAREN)
+ if (p->l.t != BC_LEX_RPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
@@ -653,7 +653,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN)
+ if (p->l.t != BC_LEX_LPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
@@ -672,7 +672,7 @@
s = bc_parse_expr_status(p, BC_PARSE_REL, bc_parse_next_rel);
if (s) return s;
- if (p->l.t.t != BC_LEX_RPAREN)
+ if (p->l.t != BC_LEX_RPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
@@ -692,19 +692,19 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN)
+ if (p->l.t != BC_LEX_LPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_SCOLON) {
+ if (p->l.t != BC_LEX_SCOLON) {
s = bc_parse_expr_status(p, 0, bc_parse_next_for);
if (!s) bc_parse_push(p, BC_INST_POP);
}
else s = bc_vm_posixError(BC_ERROR_POSIX_FOR1, p->l.line);
if (s) return s;
- if (p->l.t.t != BC_LEX_SCOLON)
+ if (p->l.t != BC_LEX_SCOLON)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
@@ -716,21 +716,21 @@
bc_vec_push(&p->func->labels, &p->func->code.len);
- if (p->l.t.t != BC_LEX_SCOLON)
+ if (p->l.t != BC_LEX_SCOLON)
s = bc_parse_expr_status(p, BC_PARSE_REL, bc_parse_next_for);
else {
// Set this for the next call to bc_parse_number.
// This is safe to set because the current token
// is a semicolon, which has no string requirement.
- bc_vec_string(&p->l.t.v, strlen(bc_parse_const1), bc_parse_const1);
+ bc_vec_string(&p->l.str, strlen(bc_parse_const1), bc_parse_const1);
bc_parse_number(p);
s = bc_vm_posixError(BC_ERROR_POSIX_FOR2, p->l.line);
}
if (s) return s;
- if (p->l.t.t != BC_LEX_SCOLON)
+ if (p->l.t != BC_LEX_SCOLON)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_lex_next(&p->l);
@@ -746,7 +746,7 @@
bc_vec_push(&p->conds, &update_idx);
bc_vec_push(&p->func->labels, &p->func->code.len);
- if (p->l.t.t != BC_LEX_RPAREN) {
+ if (p->l.t != BC_LEX_RPAREN) {
s = bc_parse_expr_status(p, 0, bc_parse_next_rel);
if (!s) bc_parse_push(p, BC_INST_POP);
}
@@ -754,7 +754,7 @@
if (s) return s;
- if (p->l.t.t != BC_LEX_RPAREN)
+ if (p->l.t != BC_LEX_RPAREN)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
bc_parse_push(p, BC_INST_JUMP);
bc_parse_pushIndex(p, cond_idx);
@@ -815,42 +815,42 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_NAME)
+ if (p->l.t != BC_LEX_NAME)
return bc_vm_error(BC_ERROR_PARSE_BAD_FUNC, p->l.line);
assert(p->prog->fns.len == p->prog->fn_map.len);
- name = bc_vm_strdup(p->l.t.v.v);
+ name = bc_vm_strdup(p->l.str.v);
idx = bc_program_insertFunc(p->prog, name);
assert(idx);
bc_parse_updateFunc(p, idx);
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LPAREN)
+ if (p->l.t != BC_LEX_LPAREN)
return bc_vm_error(BC_ERROR_PARSE_BAD_FUNC, p->l.line);
s = bc_lex_next(&p->l);
if (s) return s;
- while (p->l.t.t != BC_LEX_RPAREN) {
+ while (p->l.t != BC_LEX_RPAREN) {
- if (p->l.t.t != BC_LEX_NAME)
+ if (p->l.t != BC_LEX_NAME)
return bc_vm_error(BC_ERROR_PARSE_BAD_FUNC, p->l.line);
++p->func->nparams;
- name = bc_vm_strdup(p->l.t.v.v);
+ name = bc_vm_strdup(p->l.str.v);
s = bc_lex_next(&p->l);
if (s) goto err;
- var = p->l.t.t != BC_LEX_LBRACKET;
+ var = p->l.t != BC_LEX_LBRACKET;
if (!var) {
s = bc_lex_next(&p->l);
if (s) goto err;
- if (p->l.t.t != BC_LEX_RBRACKET) {
+ if (p->l.t != BC_LEX_RBRACKET) {
s = bc_vm_error(BC_ERROR_PARSE_BAD_FUNC, p->l.line);
goto err;
}
@@ -859,7 +859,7 @@
if (s) goto err;
}
- comma = p->l.t.t == BC_LEX_COMMA;
+ comma = p->l.t == BC_LEX_COMMA;
if (comma) {
s = bc_lex_next(&p->l);
if (s) goto err;
@@ -877,7 +877,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_LBRACE)
+ if (p->l.t != BC_LEX_LBRACE)
s = bc_vm_posixError(BC_ERROR_POSIX_BRACE, p->l.line);
return s;
@@ -898,21 +898,21 @@
if (s) return s;
p->auto_part = comma = false;
- one = p->l.t.t == BC_LEX_NAME;
+ one = p->l.t == BC_LEX_NAME;
- while (p->l.t.t == BC_LEX_NAME) {
+ while (p->l.t == BC_LEX_NAME) {
- name = bc_vm_strdup(p->l.t.v.v);
+ name = bc_vm_strdup(p->l.str.v);
s = bc_lex_next(&p->l);
if (s) goto err;
- var = p->l.t.t != BC_LEX_LBRACKET;
+ var = p->l.t != BC_LEX_LBRACKET;
if (!var) {
s = bc_lex_next(&p->l);
if (s) goto err;
- if (p->l.t.t != BC_LEX_RBRACKET) {
+ if (p->l.t != BC_LEX_RBRACKET) {
s = bc_vm_error(BC_ERROR_PARSE_BAD_FUNC, p->l.line);
goto err;
}
@@ -921,7 +921,7 @@
if (s) goto err;
}
- comma = p->l.t.t == BC_LEX_COMMA;
+ comma = p->l.t == BC_LEX_COMMA;
if (comma) {
s = bc_lex_next(&p->l);
if (s) goto err;
@@ -954,7 +954,7 @@
if (!brace) return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
- p->auto_part = p->l.t.t != BC_LEX_KEY_AUTO;
+ p->auto_part = p->l.t != BC_LEX_KEY_AUTO;
if (!p->auto_part) {
@@ -965,7 +965,7 @@
if (s) return s;
}
- if (p->l.t.t == BC_LEX_NLINE) s = bc_lex_next(&p->l);
+ if (p->l.t == BC_LEX_NLINE) s = bc_lex_next(&p->l);
}
else {
assert(*flag_ptr);
@@ -980,7 +980,7 @@
BcStatus s = BC_STATUS_SUCCESS;
- switch (p->l.t.t) {
+ switch (p->l.t) {
case BC_LEX_NLINE:
{
@@ -1024,7 +1024,7 @@
}
}
- switch (p->l.t.t) {
+ switch (p->l.t) {
case BC_LEX_OP_INC:
case BC_LEX_OP_DEC:
@@ -1053,7 +1053,7 @@
case BC_LEX_SCOLON:
{
- while (!s && p->l.t.t == BC_LEX_SCOLON) s = bc_lex_next(&p->l);
+ while (!s && p->l.t == BC_LEX_SCOLON) s = bc_lex_next(&p->l);
break;
}
@@ -1072,7 +1072,7 @@
case BC_LEX_KEY_BREAK:
case BC_LEX_KEY_CONTINUE:
{
- s = bc_parse_loopExit(p, p->l.t.t);
+ s = bc_parse_loopExit(p, p->l.t);
break;
}
@@ -1154,8 +1154,8 @@
assert(p);
- if (p->l.t.t == BC_LEX_EOF) s = bc_vm_error(BC_ERROR_PARSE_EOF, p->l.line);
- else if (p->l.t.t == BC_LEX_KEY_DEFINE) {
+ if (p->l.t == BC_LEX_EOF) s = bc_vm_error(BC_ERROR_PARSE_EOF, p->l.line);
+ else if (p->l.t == BC_LEX_KEY_DEFINE) {
if (!BC_PARSE_CAN_EXEC(p))
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
s = bc_parse_func(p);
@@ -1171,17 +1171,17 @@
BcStatus s = BC_STATUS_SUCCESS;
BcInst prev = BC_INST_PRINT;
- BcLexType top, t = p->l.t.t;
+ BcLexType top, t = p->l.t;
size_t nexprs = 0, ops_bgn = p->ops.len;
uint32_t i, nparens, nrelops;
bool paren_first, paren_expr, rprn, done, get_token, assign, bin_last;
- paren_first = p->l.t.t == BC_LEX_LPAREN;
+ paren_first = p->l.t == BC_LEX_LPAREN;
nparens = nrelops = 0;
paren_expr = rprn = done = get_token = assign = false;
bin_last = true;
- for (; !BC_SIGINT && !s && !done && BC_PARSE_EXPR(t); t = p->l.t.t) {
+ for (; !BC_SIGINT && !s && !done && BC_PARSE_EXPR(t); t = p->l.t) {
switch (t) {
diff --git a/src/dc/lex.c b/src/dc/lex.c
index 119fc6a..9d6e255 100644
--- a/src/dc/lex.c
+++ b/src/dc/lex.c
@@ -39,10 +39,10 @@
s = bc_lex_name(l);
}
else {
- bc_vec_npop(&l->t.v, l->t.v.len);
- bc_vec_pushByte(&l->t.v, l->buf[l->i - 1]);
- bc_vec_pushByte(&l->t.v, '\0');
- l->t.t = BC_LEX_NAME;
+ bc_vec_npop(&l->str, l->str.len);
+ bc_vec_pushByte(&l->str, l->buf[l->i - 1]);
+ bc_vec_pushByte(&l->str, '\0');
+ l->t = BC_LEX_NAME;
}
return s;
@@ -53,8 +53,8 @@
size_t depth = 1, nls = 0, i = l->i;
char c;
- l->t.t = BC_LEX_STR;
- bc_vec_npop(&l->t.v, l->t.v.len);
+ l->t = BC_LEX_STR;
+ bc_vec_npop(&l->str, l->str.len);
for (c = l->buf[i]; c != 0 && depth; c = l->buf[++i]) {
@@ -65,7 +65,7 @@
nls += (c == '\n');
- if (depth) bc_vec_push(&l->t.v, &c);
+ if (depth) bc_vec_push(&l->str, &c);
}
if (c == '\0' && depth) {
@@ -73,7 +73,7 @@
return bc_vm_error(BC_ERROR_PARSE_STRING, l->line);
}
- bc_vec_pushByte(&l->t.v, '\0');
+ bc_vec_pushByte(&l->str, '\0');
if (i - l->i > BC_MAX_STRING)
return bc_vm_error(BC_ERROR_EXEC_STRING_LEN, l->line);
@@ -90,11 +90,11 @@
size_t i;
for (i = 0; i < dc_lex_regs_len; ++i) {
- if (l->t.last == dc_lex_regs[i]) return dc_lex_register(l);
+ if (l->last == dc_lex_regs[i]) return dc_lex_register(l);
}
if (c >= '%' && c <= '~' &&
- (l->t.t = dc_lex_tokens[(c - '%')]) != BC_LEX_INVALID)
+ (l->t = dc_lex_tokens[(c - '%')]) != BC_LEX_INVALID)
{
return s;
}
@@ -104,7 +104,7 @@
case '\0':
{
- l->t.t = BC_LEX_EOF;
+ l->t = BC_LEX_EOF;
break;
}
@@ -124,9 +124,9 @@
{
c2 = l->buf[l->i];
- if (c2 == '=') l->t.t = BC_LEX_OP_REL_NE;
- else if (c2 == '<') l->t.t = BC_LEX_OP_REL_LE;
- else if (c2 == '>') l->t.t = BC_LEX_OP_REL_GE;
+ if (c2 == '=') l->t = BC_LEX_OP_REL_NE;
+ else if (c2 == '<') l->t = BC_LEX_OP_REL_LE;
+ else if (c2 == '>') l->t = BC_LEX_OP_REL_GE;
else return bc_vm_error(BC_ERROR_PARSE_BAD_CHAR, l->line);
++l->i;
@@ -149,7 +149,7 @@
case '/':
{
if (l->buf[l->i] == '*') s = bc_lex_comment(l);
- else l->t.t = BC_LEX_OP_DIVIDE;
+ else l->t = BC_LEX_OP_DIVIDE;
break;
}
@@ -183,7 +183,7 @@
default:
{
- l->t.t = BC_LEX_INVALID;
+ l->t = BC_LEX_INVALID;
s = bc_vm_error(BC_ERROR_PARSE_BAD_CHAR, l->line);
break;
}
diff --git a/src/dc/parse.c b/src/dc/parse.c
index 9429ffd..7b679fe 100644
--- a/src/dc/parse.c
+++ b/src/dc/parse.c
@@ -39,10 +39,10 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_NAME)
+ if (p->l.t != BC_LEX_NAME)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
- bc_parse_pushName(p, p->l.t.v.v);
+ bc_parse_pushName(p, p->l.str.v);
return s;
}
@@ -89,7 +89,7 @@
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t == BC_LEX_ELSE) {
+ if (p->l.t == BC_LEX_ELSE) {
s = dc_parse_register(p);
if (s) return s;
s = bc_lex_next(&p->l);
@@ -137,7 +137,7 @@
if (t == BC_LEX_NEG) {
s = bc_lex_next(&p->l);
if (s) return s;
- if (p->l.t.t != BC_LEX_NUMBER)
+ if (p->l.t != BC_LEX_NUMBER)
return bc_vm_error(BC_ERROR_PARSE_TOKEN, p->l.line);
}
@@ -203,7 +203,7 @@
BcInst inst;
BcLexType t;
- for (t = p->l.t.t; !BC_SIGINT && !s && t != BC_LEX_EOF; t = p->l.t.t) {
+ for (t = p->l.t; !BC_SIGINT && !s && t != BC_LEX_EOF; t = p->l.t) {
inst = dc_parse_insts[t];
@@ -216,7 +216,7 @@
if (!s) {
if (BC_SIGINT) s = BC_STATUS_SIGNAL;
- else if (p->l.t.t == BC_LEX_EOF && (flags & BC_PARSE_NOCALL))
+ else if (p->l.t == BC_LEX_EOF && (flags & BC_PARSE_NOCALL))
bc_parse_push(p, BC_INST_POP_EXEC);
}
@@ -229,7 +229,7 @@
assert(p);
- if (p->l.t.t == BC_LEX_EOF) s = bc_vm_error(BC_ERROR_PARSE_EOF, p->l.line);
+ if (p->l.t == BC_LEX_EOF) s = bc_vm_error(BC_ERROR_PARSE_EOF, p->l.line);
else s = dc_parse_expr(p, 0);
if (s || BC_SIGINT) s = bc_parse_reset(p, s);
diff --git a/src/lex.c b/src/lex.c
index fec79bd..b0023c4 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -30,7 +30,7 @@
#include <vm.h>
void bc_lex_lineComment(BcLex *l) {
- l->t.t = BC_LEX_WHITESPACE;
+ l->t = BC_LEX_WHITESPACE;
while (l->i < l->len && l->buf[l->i++] != '\n');
}
@@ -41,7 +41,7 @@
bool end = false;
char c;
- l->t.t = BC_LEX_WHITESPACE;
+ l->t = BC_LEX_WHITESPACE;
for (i = ++l->i; !end; i += !end) {
@@ -63,7 +63,7 @@
void bc_lex_whitespace(BcLex *l) {
char c;
- l->t.t = BC_LEX_WHITESPACE;
+ l->t = BC_LEX_WHITESPACE;
for (c = l->buf[l->i]; c != '\n' && isspace(c); c = l->buf[++l->i]);
}
@@ -75,7 +75,7 @@
bool last_pt, pt = start == '.';
last_pt = pt;
- l->t.t = BC_LEX_NUMBER;
+ l->t = BC_LEX_NUMBER;
while (c != 0 && (isdigit(c) || (c >= 'A' && c <= 'F') ||
(c == '.' && !pt) || (c == '\\' && buf[i + 1] == '\n')))
@@ -96,9 +96,9 @@
if (len > BC_MAX_NUM) return bc_vm_error(BC_ERROR_EXEC_NUM_LEN, l->line);
- bc_vec_npop(&l->t.v, l->t.v.len);
- bc_vec_expand(&l->t.v, len + 1);
- bc_vec_push(&l->t.v, &start);
+ bc_vec_npop(&l->str, l->str.len);
+ bc_vec_expand(&l->str, len + 1);
+ bc_vec_push(&l->str, &start);
for (buf -= 1, j = 1; j < len + hits * 2; ++j) {
@@ -112,10 +112,10 @@
continue;
}
- bc_vec_push(&l->t.v, &c);
+ bc_vec_push(&l->str, &c);
}
- bc_vec_pushByte(&l->t.v, '\0');
+ bc_vec_pushByte(&l->str, '\0');
l->i += i;
return BC_STATUS_SUCCESS;
@@ -127,13 +127,13 @@
const char *buf = l->buf + l->i - 1;
char c = buf[i];
- l->t.t = BC_LEX_NAME;
+ l->t = BC_LEX_NAME;
while ((c >= 'a' && c <= 'z') || isdigit(c) || c == '_') c = buf[++i];
if (i > BC_MAX_STRING) return bc_vm_error(BC_ERROR_EXEC_NAME_LEN, l->line);
- bc_vec_string(&l->t.v, i, buf);
+ bc_vec_string(&l->str, i, buf);
// Increment the index. We minus 1 because it has already been incremented.
l->i += i - 1;
@@ -144,12 +144,12 @@
void bc_lex_init(BcLex *l, BcLexNext next) {
assert(l);
l->next = next;
- bc_vec_init(&l->t.v, sizeof(char), NULL);
+ bc_vec_init(&l->str, sizeof(char), NULL);
}
void bc_lex_free(BcLex *l) {
assert(l);
- bc_vec_free(&l->t.v);
+ bc_vec_free(&l->str);
}
void bc_lex_file(BcLex *l, const char *file) {
@@ -165,12 +165,12 @@
assert(l);
- l->t.last = l->t.t;
+ l->last = l->t;
- if (l->t.last == BC_LEX_EOF) return bc_vm_error(BC_ERROR_PARSE_EOF, l->line);
+ if (l->last == BC_LEX_EOF) return bc_vm_error(BC_ERROR_PARSE_EOF, l->line);
l->line += l->newline;
- l->t.t = BC_LEX_EOF;
+ l->t = BC_LEX_EOF;
l->newline = (l->i == l->len);
if (l->newline) return BC_STATUS_SUCCESS;
@@ -179,7 +179,7 @@
// is so the parser doesn't get inundated with whitespace.
do {
s = l->next(l);
- } while (!s && l->t.t == BC_LEX_WHITESPACE);
+ } while (!s && l->t == BC_LEX_WHITESPACE);
return s;
}
@@ -189,6 +189,6 @@
l->buf = text;
l->i = 0;
l->len = strlen(text);
- l->t.t = l->t.last = BC_LEX_INVALID;
+ l->t = l->last = BC_LEX_INVALID;
return bc_lex_next(l);
}
diff --git a/src/parse.c b/src/parse.c
index fa1a8e1..9e665a5 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -66,7 +66,7 @@
BcFunc *f = BC_IS_BC ? p->func : bc_vec_item(&p->prog->fns, BC_PROG_MAIN);
BcVec *v = inst == BC_INST_NUM ? &f->consts : &f->strs;
size_t idx = v->len;
- char *str = bc_vm_strdup(p->l.t.v.v);
+ char *str = bc_vm_strdup(p->l.str.v);
bc_vec_push(v, &str);
bc_parse_updateFunc(p, p->fidx);
@@ -88,7 +88,7 @@
}
p->l.i = p->l.len;
- p->l.t.t = BC_LEX_EOF;
+ p->l.t = BC_LEX_EOF;
p->auto_part = false;
bc_vec_npop(&p->flags, p->flags.len - 1);
diff --git a/src/program.c b/src/program.c
index 73e6337..a679a03 100644
--- a/src/program.c
+++ b/src/program.c
@@ -289,7 +289,7 @@
s = vm->parse_expr(&parse, BC_PARSE_NOREAD);
if (s) goto exec_err;
- if (parse.l.t.t != BC_LEX_NLINE && parse.l.t.t != BC_LEX_EOF) {
+ if (parse.l.t != BC_LEX_NLINE && parse.l.t != BC_LEX_EOF) {
s = bc_vm_err(BC_ERROR_EXEC_BAD_READ_EXPR);
goto exec_err;
}
@@ -1253,7 +1253,7 @@
s = vm->parse_expr(&prs, BC_PARSE_NOCALL);
if (s) goto err;
- if (prs.l.t.t != BC_LEX_EOF) {
+ if (prs.l.t != BC_LEX_EOF) {
s = bc_vm_err(BC_ERROR_PARSE_BAD_EXP);
goto err;
}
diff --git a/src/vm.c b/src/vm.c
index 2012deb..7f98cec 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -267,7 +267,7 @@
s = bc_parse_text(&vm->prs, text);
if (s) goto err;
- while (vm->prs.l.t.t != BC_LEX_EOF) {
+ while (vm->prs.l.t != BC_LEX_EOF) {
s = vm->prs.parse(&vm->prs);
if (s) goto err;
}
@@ -393,7 +393,7 @@
bc_lex_file(&vm->prs.l, bc_lib_name);
s = bc_parse_text(&vm->prs, bc_lib);
- while (!s && vm->prs.l.t.t != BC_LEX_EOF) s = vm->prs.parse(&vm->prs);
+ while (!s && vm->prs.l.t != BC_LEX_EOF) s = vm->prs.parse(&vm->prs);
if (s) return s;
}