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