cproc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/cproc
Log | Files | Refs | Submodules | README | LICENSE

commit 19b816b032dfc01a49f7f86ae7c411a0f15fd2bc
parent ca7d50a3fef8d4f2bfa199a0e334217978fd6483
Author: Michael Forney <mforney@mforney.org>
Date:   Mon, 16 Mar 2020 02:04:47 -0700

scan: Keep track of whether tokens had preceeding whitespace

Diffstat:
Mcc.h | 2++
Mscan.c | 10++++++++--
2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/cc.h b/cc.h @@ -121,6 +121,8 @@ struct location { struct token { enum tokenkind kind; + /* whether or not the token was preceeded by a space */ + _Bool space; struct location loc; char *lit; }; diff --git a/scan.c b/scan.c @@ -16,6 +16,7 @@ struct buffer { struct scanner { int chr; bool usebuf; + bool sawspace; FILE *file; struct location loc; struct buffer buf; @@ -249,7 +250,7 @@ comment(struct scanner *s) case '/': /* C++-style comment */ do nextchar(s); while (s->chr != '\n' && s->chr != EOF); - return true; + break; case '*': /* C-style comment */ nextchar(s); do { @@ -259,10 +260,12 @@ comment(struct scanner *s) error(&s->loc, "EOF in comment"); } while (last != '*' || s->chr != '/'); nextchar(s); - return true; + break; default: return false; } + s->sawspace = true; + return true; } static int @@ -277,6 +280,7 @@ again: case '\t': case '\f': case '\v': + s->sawspace = true; nextchar(s); goto again; case '!': @@ -451,6 +455,7 @@ scanclose(void) void scan(struct token *t) { + scanner->sawspace = false; for (;;) { t->loc = scanner->loc; t->kind = scankind(scanner); @@ -466,4 +471,5 @@ scan(struct token *t) } else { t->lit = NULL; } + t->space = scanner->sawspace; }