summaryrefslogtreecommitdiff
path: root/usr.bin/oasm
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-07-20 02:21:53 -0400
committerIan Moffett <ian@osmora.org>2025-07-20 02:36:40 -0400
commit2d9ab63695f6774a2805d4fe1a2b92710c478b5a (patch)
tree6fdef0b7dc8e0a4f55d17cc6c44e54142d3b4708 /usr.bin/oasm
parenta28b2df73300a6f6a6e7f107443c096b52b2b9e2 (diff)
usr: oasm: Store last token and line number
Keep track of the last token type (for parser) and keep track of the current line number for debugging. Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'usr.bin/oasm')
-rw-r--r--usr.bin/oasm/include/oasm/state.h3
-rw-r--r--usr.bin/oasm/lex.c15
2 files changed, 12 insertions, 6 deletions
diff --git a/usr.bin/oasm/include/oasm/state.h b/usr.bin/oasm/include/oasm/state.h
index c21d877..d4688c2 100644
--- a/usr.bin/oasm/include/oasm/state.h
+++ b/usr.bin/oasm/include/oasm/state.h
@@ -33,9 +33,12 @@
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
+#include <oasm/lex.h>
struct oasm_state {
int in_fd;
+ off_t line;
+ tt_t last;
};
#endif /* !_OASM_STATE_H_ */
diff --git a/usr.bin/oasm/lex.c b/usr.bin/oasm/lex.c
index bd0b8f7..56c6eb5 100644
--- a/usr.bin/oasm/lex.c
+++ b/usr.bin/oasm/lex.c
@@ -50,14 +50,15 @@ static char putback = '\0';
* skippable token. Otherwise, -1
*/
static inline int
-lex_skippable(char c)
+lex_skippable(struct oasm_state *state, char c)
{
switch (c) {
- case ' ':
- case '\f':
- case '\t':
- case '\r':
+ case ' ': return 0;
+ case '\f': return 0;
+ case '\t': return 0;
+ case '\r': return 0;
case '\n':
+ ++state->line;
return 0;
}
@@ -135,6 +136,7 @@ lex_nomstr(struct oasm_state *state, char **res)
break;
}
if (tmp == '\n') {
+ ++state->line;
retval = tmp;
break;
@@ -231,7 +233,7 @@ lex_tok(struct oasm_state *state, struct oasm_token *ttp)
* Grab characters. If they are skippable,
* don't use them.
*/
- while (lex_skippable(c) == 0) {
+ while (lex_skippable(state, c) == 0) {
if ((c = lex_cin(state)) == 0) {
return -1;
}
@@ -239,6 +241,7 @@ lex_tok(struct oasm_state *state, struct oasm_token *ttp)
switch (c) {
case '\n':
+ ++state->line;
return 0;
case '\0':
return -1;