summaryrefslogtreecommitdiffstats
path: root/src/pre.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/pre.l')
-rw-r--r--src/pre.l36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/pre.l b/src/pre.l
index 1ee4fbe..1f8316f 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -188,7 +188,9 @@ static bool macroIsAccessible(Define *def)
}
if (def && def->fileDef==g_inputFileDef)
{
- return def->lineNr<g_yyLineNr;
+ //printf("%s: macro %s defined in this file at line %d now at %d\n",
+ // g_inputFileDef->name().data(),def->name.data(),def->lineNr,g_yyLineNr);
+ return def->lineNr<=g_yyLineNr;
}
if (g_inputFileDef && def && def->fileDef) // check if g_inputFileDef actually includes def->fileDef
{
@@ -198,6 +200,7 @@ static bool macroIsAccessible(Define *def)
// g_inputFileDef->name().data(),def->name.data(),def->fileDef->name().data(),b);
return b;
}
+ //printf("not accessible!\n");
return FALSE;
}
@@ -1883,34 +1886,47 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defVarArgs = FALSE;
BEGIN(DefineArg);
}
-<DefName>{ID}/{B}* { // define with content
+<DefName>{ID}{B}+"1" { // special case: define with 1 -> can be "guard"
//printf("Define `%s'\n",yytext);
g_argDict = 0;
g_defArgs = -1;
g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
g_defName = yytext;
+ g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace();
g_defVarArgs = FALSE;
- //QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
- //outputArray(tmp.data(),tmp.length());
- //g_quoteArg=FALSE;
- //g_insideComment=FALSE;
- //BEGIN(DefineText);
if ( g_defName!=g_lastGuardName || !g_expectGuard)
{ // define may appear in the output
QCString tmp=(QCString)"#define "+g_defName;
outputArray(tmp.data(),tmp.length());
g_quoteArg=FALSE;
g_insideComment=FALSE;
+ g_lastGuardName.resize(0);
+ g_defText="1";
+ g_defLitText="1";
BEGIN(DefineText);
}
else // define is a guard => hide
{
- g_lastGuardName.resize(0);
+ g_defText.resize(0);
+ g_defLitText.resize(0);
BEGIN(Start);
}
}
+<DefName>{ID}/{B}* { // define with content
+ //printf("Define `%s'\n",yytext);
+ g_argDict = 0;
+ g_defArgs = -1;
+ g_defArgsStr.resize(0);
+ g_defText.resize(0);
+ g_defLitText.resize(0);
+ g_defName = yytext;
+ g_defVarArgs = FALSE;
+ QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
+ outputArray(tmp.data(),tmp.length());
+ g_quoteArg=FALSE;
+ g_insideComment=FALSE;
+ BEGIN(DefineText);
+ }
<DefName>{ID}/{B}*"\n" { // empty define
g_argDict = 0;
g_defArgs = -1;