#define ULAS_ISINSTR(tok, name, n) (strncmp(tok, name, n) == 0)
+int ulas_istokend(struct ulas_str *tok) {
+ long len = strnlen(tok->buf, tok->maxlen);
+ // skip comments though, they are not trailing tokens!
+ if (len > 0 && tok->buf[0] != ULAS_TOK_COMMENT) {
+ return 0;
+ }
+
+ return 1;
+}
+
// assembles an instruction, writes bytes into dst
// returns bytes written or -1 on error
int ulas_asminstr(char *dst, unsigned long max, const char *line,
return -1;
}
+ if (ulas_istokend(&ulas.tok)) {
+ return 0;
+ }
+
if (ulas_tok(&ulas.tok, &line, n) == -1) {
ULASERR("Expected label or instruction\n");
return -1;
return -1;
}
+ // check for trailing
+ if (ulas_tok(&ulas.tok, &line, n) > 0) {
+ if (!ulas_istokend(&ulas.tok)) {
+ ULASERR("Trailing token '%s'\n", ulas.tok.buf);
+ return -1;
+ }
+ }
+
return rc;
}