From c48b9dbf61d9afbc480a2fb487d8181cb077792e Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Fri, 16 Nov 2012 20:38:44 +0100 Subject: [PATCH] Parsing basic macro body, no special tokens yet --- ftepp.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/ftepp.c b/ftepp.c index 50461e6..15702b0 100644 --- a/ftepp.c +++ b/ftepp.c @@ -91,7 +91,10 @@ pptoken *pptoken_make(ftepp_t *ftepp) { pptoken *token = (pptoken*)mem_a(sizeof(pptoken)); token->token = ftepp->token; - token->value = util_strdup(ftepp_tokval(ftepp)); + if (token->token == TOKEN_WHITE) + token->value = util_strdup(" "); + else + token->value = util_strdup(ftepp_tokval(ftepp)); memcpy(&token->constval, &ftepp->lex->tok.constval, sizeof(token->constval)); return token; } @@ -204,6 +207,24 @@ static bool ftepp_define_params(ftepp_t *ftepp, ppmacro *macro) return true; } +static bool ftepp_define_body(ftepp_t *ftepp, ppmacro *macro) +{ + pptoken *ptok; + while (ftepp->token != TOKEN_EOL && ftepp->token < TOKEN_EOF) { + ptok = pptoken_make(ftepp); + vec_push(macro->output, ptok); + + ftepp_next(ftepp); + if (!ftepp_skipspace(ftepp)) + return false; + } + if (ftepp->token != TOKEN_EOL) { + ftepp_error(ftepp, "unexpected junk after macro or unexpected end of file"); + return false; + } + return true; +} + static bool ftepp_define(ftepp_t *ftepp) { ppmacro *macro; @@ -233,10 +254,9 @@ static bool ftepp_define(ftepp_t *ftepp) if (!ftepp_skipspace(ftepp)) return false; - if (ftepp->token != TOKEN_EOL) { - ftepp_error(ftepp, "stray tokens after macro"); + if (!ftepp_define_body(ftepp, macro)) return false; - } + vec_push(ftepp->macros, macro); return true; } -- 2.39.2