diff --git a/macro/MacroFlex.ll b/macro/MacroFlex.ll index be908019ce23f3f3c902fa9ab2ee051e53eae7a0..3fede037e014298949880629cd9951e4fa8c92ad 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); }