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;
 	}