From 33c3e2121e185e619cd993280b23038b4490f4f5 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Tue, 27 Oct 2009 20:39:29 -0400 Subject: Add line and column numbers to tokens. --- dimension/tokenize.c | 8 +++++++- dimension/tokenize.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dimension/tokenize.c b/dimension/tokenize.c index c34cfc6..1d53f2f 100644 --- a/dimension/tokenize.c +++ b/dimension/tokenize.c @@ -56,8 +56,10 @@ dmnsn_tokenize(FILE *file) unsigned int i; while (next - map < size) { - /* Saves us some code repetition in the vast majority of cases */ + /* Saves us some code repetition */ token.value = NULL; + token.line = line; + token.col = col; switch (*next) { case ' ': @@ -121,12 +123,16 @@ dmnsn_tokenize(FILE *file) token.value = malloc(endf - next + 1); strncpy(token.value, next, endf - next); token.value[endf - next] = '\0'; + + col += endf - next; next = endf; } else if (endi > next) { token.type = DMNSN_INT; token.value = malloc(endi - next + 1); strncpy(token.value, next, endi - next); token.value[endi - next] = '\0'; + + col += endi - next; next = endi; } else { fprintf(stderr, "Invalid numeric value on line %u, column %u.\n", diff --git a/dimension/tokenize.h b/dimension/tokenize.h index 91d59f6..938eb5f 100644 --- a/dimension/tokenize.h +++ b/dimension/tokenize.h @@ -45,6 +45,9 @@ typedef struct dmnsn_token dmnsn_token; struct dmnsn_token { dmnsn_token_type type; char *value; + + /* Line and column numbers from source code */ + unsigned int line, col; }; dmnsn_array *dmnsn_tokenize(FILE *file); -- cgit v1.2.3