From 5c6d23c0fee17ded445315a0b0ed7afadbf9455f Mon Sep 17 00:00:00 2001
From: "Juan J. Martinez" <jjm@usebox.net>
Date: Mon, 22 May 2023 23:09:56 +0100
Subject: wlen wasn't needed

---
 tr8as.c | 211 ++++++++++++++++------------------------------------------------
 1 file changed, 52 insertions(+), 159 deletions(-)

diff --git a/tr8as.c b/tr8as.c
index 8e9fc1b..dd2c160 100644
--- a/tr8as.c
+++ b/tr8as.c
@@ -178,32 +178,33 @@ static char * skip_whitespace(char *c)
     return c;
 }
 
-static uint8_t next_string(As *as, char **c, char *word, uint8_t *wlen)
+static uint8_t next_string(As *as, char **c, char *word)
 {
+    uint8_t wlen = 0;
+
     *c = skip_whitespace(*c);
 
-    *wlen = 0;
     if (**c != '"')
         return 0;
     (*c)++;
 
     while (**c && **c != '"')
     {
-        word[(*wlen)++] = **c;
+        word[wlen++] = **c;
         (*c)++;
-        if (*wlen == MAX_ID)
+        if (wlen == MAX_ID)
         {
-            word[*wlen - 1] = 0;
-            *wlen = 0;
+            word[wlen - 1] = 0;
             return error_l("String is too long", &as->loc, word);
         }
     }
-    word[*wlen] = 0;
+    word[wlen] = 0;
 
     /* the closing quote */
-    (*c)++;
+    if (**c == '"')
+        (*c)++;
 
-    return 1;
+    return wlen > 0;
 }
 
 static uint8_t isspecial(char c)
@@ -245,25 +246,25 @@ static uint8_t new_define(As *as, char *id, char *value)
     return 1;
 }
 
-static uint8_t next_word(As *as, char **c, char *word, uint8_t *wlen)
+static uint8_t next_word(As *as, char **c, char *word)
 {
+    uint8_t wlen = 0;
+
     *c = skip_whitespace(*c);
 
-    *wlen = 0;
     while (**c && (isalnum(**c) || isspecial(**c)))
     {
-        word[(*wlen)++] = **c;
+        word[wlen++] = **c;
         (*c)++;
-        if (*wlen == MAX_ID)
+        if (wlen == MAX_ID)
         {
-            word[*wlen - 1] = 0;
-            *wlen = 0;
+            word[wlen - 1] = 0;
             return error_l("Invalid input (too long)", &as->loc, word);
         }
     }
-    word[*wlen] = 0;
+    word[wlen] = 0;
 
-    return 1;
+    return wlen > 0;
 }
 
 static uint8_t next_imm(As *as, char *word, uint16_t *n)
@@ -496,14 +497,10 @@ static uint8_t emit_imm(As *as, uint16_t imm)
 static uint8_t parse_org(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
 
     /* .org imm */
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected immediate");
 
     if (!next_imm(as, word, &as->addr))
@@ -521,7 +518,6 @@ static uint8_t parse_include(As *as, char **c)
 {
     /* XXX: may be support longer filenames */
     char word[MAX_ID + 1];
-    uint8_t wlen;
     char line[MAX_LINE];
     Location old;
     FILE *fd;
@@ -529,10 +525,7 @@ static uint8_t parse_include(As *as, char **c)
 
     /* .include "filename" */
 
-    if (!next_string(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_string(as, c, word))
         return error_l("Syntax error", &as->loc, "expected string");
 
     fd = fopen(word, "rb");
@@ -570,17 +563,13 @@ static uint8_t parse_incpng(As *as, char **c)
 {
     /* XXX: may be support longer filenames */
     char word[MAX_ID + 1];
-    uint8_t wlen;
 
     /* .incpng "filename" */
 
-    if (!next_string(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_string(as, c, word))
         return error_l("Syntax error", &as->loc, "expected string");
 
-    if (strcasecmp(word + wlen - 4, ".png"))
+    if (strcasecmp(word + strlen(word) - 4, ".png"))
         return error_l("Invalid input", &as->loc, "expected PNG file");
 
     int x, y, n;
@@ -629,16 +618,12 @@ static uint8_t parse_incbin(As *as, char **c)
 {
     /* XXX: may be support longer filenames */
     char word[MAX_ID + 1];
-    uint8_t wlen;
     FILE *fd;
     size_t size;
 
     /* .incbin "filename" */
 
-    if (!next_string(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_string(as, c, word))
         return error_l("Syntax error", &as->loc, "expected string");
 
     fd = fopen(word, "rb");
@@ -676,20 +661,13 @@ static uint8_t parse_equ(As *as, char **c)
 {
     char id[MAX_ID + 1];
     char value[MAX_ID + 1];
-    uint8_t wlen;
 
     /* .equ label imm */
 
-    if (!next_word(as, c, id, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, id))
         return error_l("Syntax error", &as->loc, "expected id");
 
-    if (!next_word(as, c, value, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, value))
         return error_l("Syntax error", &as->loc, "expected value");
 
     return new_define(as, id, value);
@@ -730,17 +708,13 @@ static uint8_t parse_str(As *as, char **c)
 static uint8_t parse_db(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint16_t imm = 0xff;
 
     /* .db imm [, imm] */
 
     while (1)
     {
-        if (!next_word(as, c, word, &wlen))
-            return 0;
-
-        if (wlen == 0)
+        if (!next_word(as, c, word))
             return error_l("Syntax error", &as->loc, "expected immediate");
 
         if (next_imm(as, word, &imm))
@@ -772,17 +746,13 @@ static uint8_t parse_db(As *as, char **c)
 static uint8_t parse_dw(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint16_t imm;
 
     /* .dw imm [, imm] */
 
     while (1)
     {
-        if (!next_word(as, c, word, &wlen))
-            return 0;
-
-        if (wlen == 0)
+        if (!next_word(as, c, word))
             return error_l("Syntax error", &as->loc, "expected immediate");
 
         if (!next_imm(as, word, &imm)
@@ -811,15 +781,11 @@ static uint8_t parse_dw(As *as, char **c)
 static uint8_t parse_ds(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint16_t count = 0xff, imm = 0xff;
 
     /* .ds count, imm */
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected count");
 
     if (!next_imm(as, word, &count))
@@ -830,10 +796,7 @@ static uint8_t parse_ds(As *as, char **c)
         return error_l("Syntax error", &as->loc, "expected ,");
     (*c)++;
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected immediate");
 
     if (next_imm(as, word, &imm))
@@ -919,13 +882,9 @@ static uint8_t parse_ret(As *as, char **c)
 static uint8_t parse_r1_r2_or_imm(As *as, char **c, uint8_t *r1, uint8_t *r2, uint16_t *imm)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
 
     /* ? r1, ? */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     *r1 = parse_register(word);
@@ -937,10 +896,7 @@ static uint8_t parse_r1_r2_or_imm(As *as, char **c, uint8_t *r1, uint8_t *r2, ui
         return error_l("Syntax error", &as->loc, "expected ,");
     (*c)++;
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register or immediate");
 
     /* ? r1, r2 */
@@ -964,13 +920,9 @@ static uint8_t parse_r1_r2_or_imm(As *as, char **c, uint8_t *r1, uint8_t *r2, ui
 static uint8_t parse_r1_imm(As *as, char **c, uint8_t *r1, uint16_t *imm)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
 
     /* ? r1, imm */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     *r1 = parse_register(word);
@@ -982,10 +934,7 @@ static uint8_t parse_r1_imm(As *as, char **c, uint8_t *r1, uint16_t *imm)
         return error_l("Syntax error", &as->loc, "expected ,");
     (*c)++;
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected immediate");
 
     if (!isdigit(*word))
@@ -1171,14 +1120,10 @@ static uint8_t parse_rol(As *as, char **c)
 static uint8_t parse_push(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t r1;
 
     /* PUSH r1 */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1196,14 +1141,10 @@ static uint8_t parse_push(As *as, char **c)
 static uint8_t parse_port(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t r1, r2;
 
     /* PORT r1, r2 */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1215,10 +1156,7 @@ static uint8_t parse_port(As *as, char **c)
         return error_l("Syntax error", &as->loc, "expected ,");
     (*c)++;
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r2 = parse_register(word);
@@ -1231,14 +1169,10 @@ static uint8_t parse_port(As *as, char **c)
 static uint8_t parse_pop(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t r1;
 
     /* POP r1 */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1256,14 +1190,10 @@ static uint8_t parse_pop(As *as, char **c)
 static uint8_t parse_xsp(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t r1;
 
     /* XSP r1 */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1276,14 +1206,10 @@ static uint8_t parse_xsp(As *as, char **c)
 static uint8_t parse_inc(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t r1;
 
     /* INC r1 */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1296,14 +1222,10 @@ static uint8_t parse_inc(As *as, char **c)
 static uint8_t parse_dec(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t r1;
 
     /* DEC r1 */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1376,13 +1298,9 @@ static uint8_t parse_bni(As *as, char **c)
 static uint8_t parse_indirect(As *as, char **c, uint8_t *r1, uint8_t *r2, uint16_t *imm)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
 
     /* [r1:r2] */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     *r1 = parse_register(word);
@@ -1399,10 +1317,7 @@ static uint8_t parse_indirect(As *as, char **c, uint8_t *r1, uint8_t *r2, uint16
                 return error_l("Syntax error", &as->loc, "expected +");
             (*c)++;
 
-            if (!next_word(as, c, word, &wlen))
-                return 0;
-
-            if (wlen == 0)
+            if (!next_word(as, c, word))
                 return error_l("Syntax error", &as->loc, "expected immediate");
 
             if (!next_imm(as, word, imm))
@@ -1427,10 +1342,7 @@ static uint8_t parse_indirect(As *as, char **c, uint8_t *r1, uint8_t *r2, uint16
         return error_l("Syntax error", &as->loc, "expected :");
 
     (*c)++;
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     *r2 = parse_register(word);
@@ -1448,7 +1360,6 @@ static uint8_t parse_indirect(As *as, char **c, uint8_t *r1, uint8_t *r2, uint16
 static uint8_t parse_jmp(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint16_t imm = 0xffff;
     uint8_t r1, r2;
 
@@ -1464,10 +1375,7 @@ static uint8_t parse_jmp(As *as, char **c)
         return emit(as, 9, r1, 0, (r2 << 6) | FL);
     }
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected label or immediate");
 
     /* JMP imm */
@@ -1482,7 +1390,6 @@ static uint8_t parse_jmp(As *as, char **c)
 static uint8_t parse_call(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint16_t imm = 0xffff;
     uint8_t r1, r2;
 
@@ -1498,10 +1405,7 @@ static uint8_t parse_call(As *as, char **c)
         return emit(as, 9, r1, 0, (r2 << 6));
     }
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected label or immediate");
 
     /* CALL imm */
@@ -1516,7 +1420,6 @@ static uint8_t parse_call(As *as, char **c)
 static uint8_t parse_ld(As *as, char **c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint16_t imm = 0xff;
 
     uint8_t r1, r2, r3;
@@ -1536,10 +1439,7 @@ static uint8_t parse_ld(As *as, char **c)
             return error_l("Syntax error", &as->loc, "expected ,");
 
         (*c)++;
-        if (!next_word(as, c, word, &wlen))
-            return 0;
-
-        if (wlen == 0)
+        if (!next_word(as, c, word))
             return error_l("Syntax error", &as->loc, "expected register");
 
         r3 = parse_register(word);
@@ -1553,10 +1453,7 @@ static uint8_t parse_ld(As *as, char **c)
     }
 
     /* LD r1, ? */
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register");
 
     r1 = parse_register(word);
@@ -1583,10 +1480,7 @@ static uint8_t parse_ld(As *as, char **c)
         return emit(as, 2, r2, r3, r1 << 6);
     }
 
-    if (!next_word(as, c, word, &wlen))
-        return 0;
-
-    if (wlen == 0)
+    if (!next_word(as, c, word))
         return error_l("Syntax error", &as->loc, "expected register or immediate");
 
     /* LD r1, r2 */
@@ -1664,7 +1558,6 @@ static InstParse insts[] =
 static uint8_t parse(As *as, char *c)
 {
     char word[MAX_ID + 1];
-    uint8_t wlen;
     uint8_t i;
 
     c = skip_whitespace(c);
@@ -1673,13 +1566,13 @@ static uint8_t parse(As *as, char *c)
     if (*c == ';')
         return 1;
 
-    if (!next_word(as, &c, word, &wlen))
-        return 0;
-
     /* empty line */
-    if (wlen == 0)
+    if (!*c)
         return 1;
 
+    if (!next_word(as, &c, word))
+        return 0;
+
     /* new label */
     if (*c == ':')
     {
-- 
cgit v1.2.3