From 20f0c179daeaa191c1ec39ac8a9a93f1942c1673 Mon Sep 17 00:00:00 2001 From: Edmund Grimley Evans Date: Wed, 4 Nov 2015 20:25:26 +0000 Subject: [PATCH] tccpp.c: Define and use tok_last for checking if last token is space. --- tccpp.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tccpp.c b/tccpp.c index b1bf113..755d1b7 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1032,6 +1032,19 @@ static inline void TOK_GET(int *t, const int **pp, CValue *cv) *pp = p; } +/* Calling this function is expensive, but it is not possible + to read a token string backwards. */ +static int tok_last(const int *str0, const int *str1) +{ + const int *str = str0; + int tok = 0; + CValue cval; + + while (str < str1) + TOK_GET(&tok, &str, &cval); + return tok; +} + static int macro_is_equal(const int *a, const int *b) { char buf[STRING_MAX_SIZE + 1]; @@ -3266,7 +3279,9 @@ static void macro_subst( end_macro (); } - spc = tok_str->len && is_space(tok_str->str[tok_str->len-1]); + spc = (tok_str->len && + is_space(tok_last(tok_str->str, + tok_str->str + tok_str->len))); } else {