summaryrefslogtreecommitdiffstats
path: root/asm.c
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-07-25 05:20:54 +0200
committerLouis Burda <quent.burda@gmail.com>2023-07-25 05:20:54 +0200
commit41760436d528552d64122bb0c837f4d8274a0bdd (patch)
treee8acbd7bb0663f1c76bb6a490c37c7e6338613ba /asm.c
parentf621bed8f9bf20eca167d7cfa40840992c26da09 (diff)
downloadtis100-41760436d528552d64122bb0c837f4d8274a0bdd.tar.gz
tis100-41760436d528552d64122bb0c837f4d8274a0bdd.zip
Fix label_map case insensitivity and allow numbers in label names
Diffstat (limited to 'asm.c')
-rw-r--r--asm.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/asm.c b/asm.c
index 632dacf..7d02652 100644
--- a/asm.c
+++ b/asm.c
@@ -6,7 +6,9 @@
#include <string.h>
#include <stdint.h>
-#define NAMEALPH "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
+#define TEXTALPH "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
+#define NUMALPH "0123456789"
+#define NAMEALPH TEXTALPH NUMALPH
#define WHITESPACE " \t\v\r\n,"
enum asm_tok {
@@ -178,14 +180,16 @@ tok_next(struct asm_tokenizer *tok)
} else if (*s == '#') {
tok->off += strlen(tok->linebuf + tok->off);
return TOK_COMMENT;
- } else if (len && strspn(s, NAMEALPH) == len-1 && s[len-1] == ':') {
+ } else if (len && strchr(TEXTALPH, *s)
+ && strspn(s, NAMEALPH) == len-1 && s[len-1] == ':') {
s[len-1] = '\0';
return TOK_LABEL;
} else if (*s == 'X' && atoi(s+1) > 0) {
return TOK_XPOS;
} else if (*s == 'Y' && atoi(s+1) > 0) {
return TOK_YPOS;
- } else if (strspn(s, NAMEALPH) == strlen(s)) {
+ } else if (strchr(TEXTALPH, *s)
+ && strspn(s, NAMEALPH) == strlen(s)) {
return TOK_NAME;
} else {
die("load: line %lu, invalid token '%s'", tok->lineno, s);