From 5498783e4cd77350c8f9e023bc1fff1be8f6bc9f Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan@dynare.org> Date: Tue, 24 Feb 2015 14:41:29 +0100 Subject: [PATCH] macroprocessor: add support for passing macro values to @#include statement, closes #848 --- macro/MacroFlex.ll | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/macro/MacroFlex.ll b/macro/MacroFlex.ll index be908019..3fede037 100644 --- a/macro/MacroFlex.ll +++ b/macro/MacroFlex.ll @@ -84,6 +84,32 @@ CONT \\\\ BEGIN(INITIAL); } +<INITIAL>^{SPC}*@#{SPC}*include{SPC}+[^\"\r\n]*{SPC}*{EOL} { + yylloc->lines(1); + yylloc->step(); + + // Get variable name + string *modvarname = new string(yytext); + int dblq_idx1 = modvarname->find("include"); + modvarname->erase(0, dblq_idx1 + 7); + modvarname->erase(0, modvarname->find_first_not_of(" \t")); + size_t p = modvarname->find_last_not_of(" \t\n\r"); + if (string::npos != p) + modvarname->erase(p+1); + + string *filename; + try + { + filename = new string(driver.get_variable(*modvarname)->toString()); + } + catch(MacroDriver::UnknownVariable(&e)) + { + driver.error(*yylloc, "Unknown variable: " + *modvarname); + } + create_include_context(filename, yylloc, driver); + BEGIN(INITIAL); + } + <INITIAL>^{SPC}*@# { yylloc->step(); BEGIN(STMT); } <INITIAL>@\{ { yylloc->step(); BEGIN(EXPR); } -- GitLab