summaryrefslogtreecommitdiffstats
path: root/src/pre.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/pre.l')
-rw-r--r--src/pre.l629
1 files changed, 337 insertions, 292 deletions
diff --git a/src/pre.l b/src/pre.l
index 8c41db4..8252578 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -2,7 +2,7 @@
*
* $Id$
*
- * Copyright (C) 1997-1999 by Dimitri van Heesch.
+ * Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
@@ -63,50 +63,58 @@ struct FileState
/* -----------------------------------------------------------------
*
- * statics
+ * scanner's state
*/
-static int yyLineNr = 1;
-static QCString yyFileName;
-static int ifcount = 0;
-static QStrList *pathList = 0;
-static QStack<FileState> includeStack;
-static QDict<int> *argDict;
-static int defArgs = -1;
-static QCString defName;
-static QCString defText;
-static QCString defArgsStr;
-static bool defVarArgs;
-static int level;
-static int lastCContext;
-static int lastCPPContext;
-static QArray<int> levelGuard;
-static QCString guardExpr;
-static BufStr *outputBuf;
-static int roundCount;
-static bool quoteArg;
-static DefineDict *fileDefineDict;
-static DefineDict *expandedDict;
-static int findDefArgContext;
-
-static QCString lastGuardName;
+static int g_yyLineNr = 1;
+static QCString g_yyFileName;
+static FileDef *g_yyFileDef;
+static int g_ifcount = 0;
+static QStrList *g_pathList = 0;
+static QStack<FileState> g_includeStack;
+static QDict<int> *g_argDict;
+static int g_defArgs = -1;
+static QCString g_defName;
+static QCString g_defText;
+static QCString g_defLitText;
+static QCString g_defArgsStr;
+static bool g_defVarArgs;
+static int g_level;
+static int g_lastCContext;
+static int g_lastCPPContext;
+static QArray<int> g_levelGuard;
+static BufStr *g_outputBuf;
+static int g_roundCount;
+static bool g_quoteArg;
+static DefineDict *g_fileDefineDict;
+static DefineDict *g_expandedDict;
+static int g_findDefArgContext;
+static QCString g_lastGuardName;
+static QCString g_incName;
+static QCString g_guardExpr;
+static void setFileName(const char *name)
+{
+ bool ambig;
+ g_yyFileName=name;
+ g_yyFileDef=findFileDef(&inputNameDict,g_yyFileName,ambig);
+}
static void incrLevel()
{
- level++;
- levelGuard.resize(level);
- levelGuard[level-1]=FALSE;
- //printf("%s line %d: incrLevel %d\n",yyFileName.data(),yyLineNr,level);
+ g_level++;
+ g_levelGuard.resize(g_level);
+ g_levelGuard[g_level-1]=FALSE;
+ //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
}
static void decrLevel()
{
- //printf("%s line %d: decrLevel %d\n",yyFileName.data(),yyLineNr,level);
- if (level > 0)
+ //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
+ if (g_level > 0)
{
- level--;
- levelGuard.resize(level);
+ g_level--;
+ g_levelGuard.resize(g_level);
}
else
{
@@ -116,12 +124,12 @@ static void decrLevel()
static bool otherCaseDone()
{
- return levelGuard[level-1];
+ return g_levelGuard[g_level-1];
}
static void setCaseDone(bool value)
{
- levelGuard[level-1]=value;
+ g_levelGuard[g_level-1]=value;
}
static Define *isDefined(const char *name)
@@ -129,20 +137,20 @@ static Define *isDefined(const char *name)
if (name)
{
Define *def;
- //if ((def=fileDefineCache->findDefine(yyFileName,name)) && !def->undef)
+ //if ((def=fileDefineCache->findDefine(g_yyFileName,name)) && !def->undef)
// return def;
- if ((def=fileDefineDict->find(name)) && !def->undef) return def;
+ if ((def=g_fileDefineDict->find(name)) && !def->undef) return def;
}
return 0;
}
static FILE *findFile(const char *fileName)
{
- if (pathList==0)
+ if (g_pathList==0)
{
return 0;
}
- char *s=pathList->first();
+ char *s=g_pathList->first();
while (s)
{
QCString absName=(QCString)s+"/"+fileName;
@@ -163,12 +171,12 @@ static FILE *findFile(const char *fileName)
}
if (f)
{
- yyFileName=absName;
- yyLineNr=1;
+ setFileName(absName);
+ g_yyLineNr=1;
return f;
}
}
- s=pathList->next();
+ s=g_pathList->next();
}
return 0;
}
@@ -291,7 +299,7 @@ static void processConcatOperators(QCString &expr)
*/
static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result)
{
- //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),level);
+ //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level);
//bool replaced=FALSE;
uint j=pos;
len=0;
@@ -566,7 +574,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
//printf("macroName %s found\n",macroName.data());
if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
{
- if (expandedDict->find(macroName)==0) // expand macro
+ if (g_expandedDict->find(macroName)==0) // expand macro
{
Define *def=isDefined(macroName);
//printf("name is not an expanded macro def=%s\n",def ? def->name.data() : 0);
@@ -593,9 +601,9 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
processConcatOperators(resultExpr);
if (!def->nonRecursive)
{
- expandedDict->insert(macroName,def);
+ g_expandedDict->insert(macroName,def);
expandExpression(resultExpr,&restExpr,0);
- expandedDict->remove(macroName);
+ g_expandedDict->remove(macroName);
}
expr=expr.left(p)+resultExpr+restExpr;
i=p;
@@ -711,7 +719,7 @@ bool computeExpression(const QCString &expr)
QCString e=expr;
expandExpression(e,0,0);
e = removeIdsAndMarkers(e);
- if (e.length()==0) return FALSE;
+ if (e.isEmpty()) return FALSE;
return parseCppExpression(e);
}
@@ -731,92 +739,115 @@ QCString expandMacro(const QCString &name)
Define *newDefine()
{
Define *def=new Define;
- def->name = defName;
- def->definition = defText.stripWhiteSpace();
- def->nargs = defArgs;
- def->fileName = yyFileName;
- def->lineNr = yyLineNr;
- def->varArgs = defVarArgs;
+ def->name = g_defName;
+ def->definition = g_defText.stripWhiteSpace();
+ def->nargs = g_defArgs;
+ def->fileName = g_yyFileName;
+ def->lineNr = g_yyLineNr;
+ def->varArgs = g_defVarArgs;
return def;
}
void addDefine()
{
- bool ambig;
- FileDef *fd=findFileDef(&inputNameDict,yyFileName,ambig);
- MemberDef *md=new MemberDef("#define",defName,defArgsStr,0,
+ //bool ambig;
+ //FileDef *fd=findFileDef(&inputNameDict,g_yyFileName,ambig);
+ MemberDef *md=new MemberDef("#define",g_defName,g_defArgsStr,0,
Public,Normal,FALSE,FALSE,MemberDef::Define,0,0);
- ArgumentList *argList = new ArgumentList;
- stringToArgumentList(defArgsStr,argList);
- md->setArgumentList(argList);
- md->setDefFile(yyFileName);
- md->setDefLine(yyLineNr);
- md->setFileDef(fd);
- md->setDefinition("#define "+defName);
+ if (!g_defArgsStr.isEmpty())
+ {
+ ArgumentList *argList = new ArgumentList;
+ //printf("addDefine() g_defName=`%s' g_defArgsStr=`%s'\n",g_defName.data(),g_defArgsStr.data());
+ stringToArgumentList(g_defArgsStr,argList);
+ md->setArgumentList(argList);
+ }
+ //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
+ md->setInitializer(g_defLitText);
+
+ md->setDefFile(g_yyFileName);
+ md->setDefLine(g_yyLineNr);
+ md->setFileDef(g_yyFileDef);
+ md->setDefinition("#define "+g_defName);
- MemberName *mn=functionNameDict[defName];
+ MemberName *mn=functionNameDict[g_defName];
if (mn==0)
{
- mn = new MemberName(defName);
+ mn = new MemberName(g_defName);
functionNameList.inSort(mn);
- functionNameDict.insert(defName,mn);
+ functionNameDict.insert(g_defName,mn);
}
mn->append(md);
- if (fd) fd->insertMember(md);
+ if (g_yyFileDef) g_yyFileDef->insertMember(md);
Define *d;
- if ((d=defineDict[defName])==0) defineDict.insert(defName,newDefine());
-
+ if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine());
}
static void outputChar(char c)
{
- if (includeStack.isEmpty()) outputBuf->addChar(c);
+ if (g_includeStack.isEmpty()) g_outputBuf->addChar(c);
}
static void outputArray(const char *a,int len)
{
- if (includeStack.isEmpty()) outputBuf->addArray(a,len);
+ if (g_includeStack.isEmpty()) g_outputBuf->addArray(a,len);
}
static void readIncludeFile(const QCString &inc)
{
if (!Config::searchIncludeFlag) return; // do not read include files
uint i=0;
+
// find the start of the include file name
while (i<inc.length() &&
(inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<')
) i++;
uint s=i;
+
+ // was it a local include?
+ bool localInclude = s>0 && inc.at(s-1)=='"';
+
// find the end of the include file name
- while (i<inc.length() &&
- inc.at(i)!='"' && inc.at(i)!='>') i++;
+ while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++;
+
if (s<inc.length() && i>s) // valid include file name found
{
+ // extract include path+name
QCString incFileName=inc.mid(s,i-s).stripWhiteSpace();
FILE *f;
- QCString oldFileName=yyFileName.copy();
+ QCString oldFileName = g_yyFileName.copy();
+ FileDef *oldFileDef = g_yyFileDef;
if ((f=findFile(incFileName))) // see if the include file can be found
{
#if SHOW_INCLUDES
- for (i=0;i<includeStack.count();i++) msg(" ");
+ for (i=0;i<g_includeStack.count();i++) msg(" ");
msg("#include %s: parsing...\n",incFileName.data());
#endif
+ if (oldFileDef)
+ {
+ // add include dependency to the file in which the #include was found
+ oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude);
+ }
// store the state of the old file
FileState *fs=new FileState;
fs->bufState=YY_CURRENT_BUFFER;
- fs->lineNr=yyLineNr;
+ fs->lineNr=g_yyLineNr;
fs->fileName=oldFileName;
fs->filePtr=f;
// push the state on the stack
- includeStack.push(fs);
+ g_includeStack.push(fs);
// set the scanner to the include file
preYYin=f;
yy_switch_to_buffer(yy_create_buffer(preYYin, YY_BUF_SIZE));
}
else
{
+ if (oldFileDef)
+ {
+ // add include dependency to the file in which the #include was found
+ oldFileDef->addIncludeDependency(0,incFileName,localInclude);
+ }
#if SHOW_INCLUDES
msg("#include %s: not found! skipping...\n",incFileName.data());
//printf("Error: include file %s not found\n",yytext);
@@ -857,7 +888,7 @@ BN [ \t\r\n]
%x DefinedExpr2
%x SkipDoubleQuote
%x SkipSingleQuote
-%x UndefName
+%x Ung_defName
%x IgnoreLine
%x FindDefineArgs
%x ReadString
@@ -869,15 +900,15 @@ BN [ \t\r\n]
<*>\r
/*
<Start>^{B}*([^ \t#\n\/][^\n]*)?"\n" {
- //printf("%s line %d: %s",yyFileName.data(),yyLineNr,yytext);
- if (includeStack.isEmpty())
+ //printf("%s line %d: %s",g_yyFileName.data(),g_yyLineNr,yytext);
+ if (g_includeStack.isEmpty())
{
//preprocessedFile+=yytext;
//char *s=yytext,c;
//if (s) while ((c=*s++)) *dataPtr++=c;
- outputBuf->addArray(yytext,yyleng);
+ g_outputBuf->addArray(yytext,yyleng);
}
- yyLineNr++;
+ g_yyLineNr++;
}
*/
<Start>^{B}*"#" { BEGIN(Command); }
@@ -893,25 +924,25 @@ BN [ \t\r\n]
<CopyLine>{ID}/{BN}*"(" {
Define *def=0;
//printf("Search for define %s\n",yytext);
- if (includeStack.isEmpty() &&
+ if (g_includeStack.isEmpty() &&
Config::macroExpansionFlag &&
- /* (expandDefine=fileDefineCache->findDefine(yyFileName,yytext)) */
- (def=fileDefineDict->find(yytext)) &&
+ /* (expandDefine=fileDefineCache->findDefine(g_yyFileName,yytext)) */
+ (def=g_fileDefineDict->find(yytext)) &&
(!Config::onlyPredefinedFlag || def->isPredefined)
)
{
//printf("Found it!\n");
- roundCount=0;
- defArgsStr=yytext;
+ g_roundCount=0;
+ g_defArgsStr=yytext;
if (def->nargs==-1) // no function macro
{
- QCString result = expandMacro(defArgsStr);
+ QCString result = expandMacro(g_defArgsStr);
//printf("result=`%s'\n",result.data());
outputArray(result,result.length());
}
else // zero or more arguments
{
- findDefArgContext = CopyLine;
+ g_findDefArgContext = CopyLine;
BEGIN(FindDefineArgs);
}
}
@@ -923,9 +954,9 @@ BN [ \t\r\n]
<CopyLine>{ID} {
Define *def=0;
//printf("Search for define %s\n",yytext);
- if (includeStack.isEmpty() &&
+ if (g_includeStack.isEmpty() &&
Config::macroExpansionFlag &&
- (def=fileDefineDict->find(yytext)) &&
+ (def=g_fileDefineDict->find(yytext)) &&
def->nargs==-1 &&
(!Config::onlyPredefinedFlag || def->isPredefined)
)
@@ -947,25 +978,25 @@ BN [ \t\r\n]
<CopyLine>\n {
outputChar('\n');
BEGIN(Start);
- yyLineNr++;
+ g_yyLineNr++;
}
<FindDefineArgs>"(" {
- defArgsStr+='(';
- roundCount++;
+ g_defArgsStr+='(';
+ g_roundCount++;
}
<FindDefineArgs>")" {
- defArgsStr+=')';
- roundCount--;
- if (roundCount==0)
+ g_defArgsStr+=')';
+ g_roundCount--;
+ if (g_roundCount==0)
{
- //printf("defArgsStr=`%s'\n",defArgsStr.data());
- QCString result=expandMacro(defArgsStr);
- if (findDefArgContext==CopyLine)
+ //printf("g_defArgsStr=`%s'\n",g_defArgsStr.data());
+ QCString result=expandMacro(g_defArgsStr);
+ if (g_findDefArgContext==CopyLine)
{
outputArray(result,result.length());
- BEGIN(findDefArgContext);
+ BEGIN(g_findDefArgContext);
}
- else // findDefArgContext==IncludeID
+ else // g_findDefArgContext==IncludeID
{
readIncludeFile(result);
BEGIN(Start);
@@ -974,41 +1005,44 @@ BN [ \t\r\n]
}
/*
<FindDefineArgs>")"{B}*"(" {
- defArgsStr+=yytext;
+ g_defArgsStr+=yytext;
}
*/
<FindDefineArgs>"\"" {
- defArgsStr+=*yytext;
+ g_defArgsStr+=*yytext;
BEGIN(ReadString);
}
<FindDefineArgs>\n {
- yyLineNr++;
+ g_yyLineNr++;
outputChar('\n');
}
<FindDefineArgs>"@" {
- defArgsStr+="@@";
+ g_defArgsStr+="@@";
}
<FindDefineArgs>. {
- defArgsStr+=*yytext;
+ g_defArgsStr+=*yytext;
}
<ReadString>"\\\"" {
- defArgsStr+=yytext;
+ g_defArgsStr+=yytext;
}
<ReadString>"\"" {
- defArgsStr+=*yytext;
+ g_defArgsStr+=*yytext;
BEGIN(FindDefineArgs);
}
<ReadString>"//"|"/*" {
- defArgsStr+=yytext;
+ g_defArgsStr+=yytext;
}
<ReadString>. {
- defArgsStr+=*yytext;
+ g_defArgsStr+=*yytext;
}
<Command>"include"{B}*/{ID} {
if (Config::macroExpansionFlag)
BEGIN(IncludeID);
}
<Command>"include"{B}*[<"] {
+ char c[2];
+ c[0]=yytext[yyleng-1];c[1]='\0';
+ g_incName=c;
BEGIN(Include);
}
<Command>"define"{B}+ {
@@ -1017,62 +1051,62 @@ BN [ \t\r\n]
}
<Command>"ifdef"/{B}*"(" {
incrLevel();
- guardExpr.resize(0);
+ g_guardExpr.resize(0);
BEGIN(DefinedExpr2);
}
<Command>"ifdef"/{B}+ {
//printf("Pre.l: ifdef\n");
incrLevel();
- guardExpr.resize(0);
+ g_guardExpr.resize(0);
BEGIN(DefinedExpr1);
}
<Command>"ifndef"/{B}*"(" {
incrLevel();
- guardExpr="! ";
+ g_guardExpr="! ";
BEGIN(DefinedExpr2);
}
<Command>"ifndef"/{B}+ {
incrLevel();
- guardExpr="! ";
+ g_guardExpr="! ";
BEGIN(DefinedExpr1);
}
<Command>"if"/[ \t(] {
incrLevel();
- guardExpr.resize(0);
+ g_guardExpr.resize(0);
BEGIN(Guard);
}
<Command>"elif"/[ \t(] {
if (!otherCaseDone())
{
- guardExpr.resize(0);
+ g_guardExpr.resize(0);
BEGIN(Guard);
}
else
{
- ifcount=0;
+ g_ifcount=0;
BEGIN(SkipCPPBlock);
}
}
<Command>"else"/[^a-z_A-Z0-9] {
- //printf("else levelGuard[%d]=%d\n",level-1,levelGuard[level-1]);
+ //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
if (otherCaseDone())
{
- ifcount=0;
+ g_ifcount=0;
BEGIN(SkipCPPBlock);
}
else
{
setCaseDone(TRUE);
- //levelGuard[level-1]=TRUE;
+ //g_levelGuard[g_level-1]=TRUE;
}
}
<Command>"undef"{B}+ {
- BEGIN(UndefName);
+ BEGIN(Ung_defName);
}
<Command>"elif"/[ \t(] {
if (!otherCaseDone())
{
- guardExpr.resize(0);
+ g_guardExpr.resize(0);
BEGIN(Guard);
}
}
@@ -1083,14 +1117,14 @@ BN [ \t\r\n]
<Command,IgnoreLine>\n {
outputChar('\n');
BEGIN(Start);
- yyLineNr++;
+ g_yyLineNr++;
}
<Command>{ID} { // unknown directive
BEGIN(IgnoreLine);
}
<IgnoreLine>.
<Command>.
-<UndefName>{ID} {
+<Ung_defName>{ID} {
Define *def;
if ((def=isDefined(yytext)))
{
@@ -1099,10 +1133,10 @@ BN [ \t\r\n]
}
BEGIN(Start);
}
-<Guard>\\\n {
+<Guard>\\[\r]?\n {
outputChar('\n');
- guardExpr+=' ';
- yyLineNr++;
+ g_guardExpr+=' ';
+ g_yyLineNr++;
}
<Guard>"defined"/{B}*"(" {
BEGIN(DefinedExpr2);
@@ -1110,43 +1144,43 @@ BN [ \t\r\n]
<Guard>"defined"/{B}+ {
BEGIN(DefinedExpr1);
}
-<Guard>. { guardExpr+=*yytext; }
+<Guard>. { g_guardExpr+=*yytext; }
<Guard>\n {
outputChar('\n');
- yyLineNr++;
+ g_yyLineNr++;
//printf("Guard: `%s'\n",
- // guardExpr.data());
- bool guard=computeExpression(guardExpr);
+ // g_guardExpr.data());
+ bool guard=computeExpression(g_guardExpr);
setCaseDone(guard);
- //printf("if levelGuard[%d]=%d\n",level-1,levelGuard[level-1]);
+ //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
if (guard)
{
BEGIN(Start);
}
else
{
- ifcount=0;
+ g_ifcount=0;
BEGIN(SkipCPPBlock);
}
}
-<DefinedExpr1,DefinedExpr2>\\\n { yyLineNr++; outputChar('\n'); }
+<DefinedExpr1,DefinedExpr2>\\\n { g_yyLineNr++; outputChar('\n'); }
<DefinedExpr1>{ID} {
if (isDefined(yytext))
- guardExpr+=" 1L ";
+ g_guardExpr+=" 1L ";
else
- guardExpr+=" 0L ";
- lastGuardName=yytext;
+ g_guardExpr+=" 0L ";
+ g_lastGuardName=yytext;
BEGIN(Guard);
}
<DefinedExpr2>{ID} {
if (isDefined(yytext))
- guardExpr+=" 1L ";
+ g_guardExpr+=" 1L ";
else
- guardExpr+=" 0L ";
- lastGuardName.resize(0);
+ g_guardExpr+=" 0L ";
+ g_lastGuardName.resize(0);
}
<DefinedExpr1,DefinedExpr2>\n { // should not happen, handle anyway
- ifcount=0;
+ g_ifcount=0;
BEGIN(SkipCPPBlock);
}
<DefinedExpr2>")" {
@@ -1158,12 +1192,12 @@ BN [ \t\r\n]
<SkipCPPBlock>.
<SkipCommand>"if"(("n")?("def"))?/[ \t(] {
incrLevel();
- ifcount++;
- //printf("#if... depth=%d\n",ifcount);
+ g_ifcount++;
+ //printf("#if... depth=%d\n",g_ifcount);
}
<SkipCommand>"else" {
- //printf("Else! ifcount=%d otherCaseDone=%d\n",ifcount,otherCaseDone());
- if (ifcount==0 && !otherCaseDone())
+ //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone());
+ if (g_ifcount==0 && !otherCaseDone())
{
setCaseDone(TRUE);
//outputChar('\n');
@@ -1171,12 +1205,12 @@ BN [ \t\r\n]
}
}
<SkipCommand>"elif"/[ \t(] {
- if (ifcount==0)
+ if (g_ifcount==0)
{
if (!otherCaseDone())
{
- guardExpr.resize(0);
- lastGuardName.resize(0);
+ g_guardExpr.resize(0);
+ g_lastGuardName.resize(0);
BEGIN(Guard);
}
else
@@ -1187,7 +1221,7 @@ BN [ \t\r\n]
}
<SkipCommand>"endif" {
decrLevel();
- if (--ifcount<0)
+ if (--g_ifcount<0)
{
//outputChar('\n');
BEGIN(Start);
@@ -1195,7 +1229,7 @@ BN [ \t\r\n]
}
<SkipCommand>\n {
outputChar('\n');
- yyLineNr++;
+ g_yyLineNr++;
BEGIN(SkipCPPBlock);
}
<SkipCommand>{ID} { // unknown directive
@@ -1205,22 +1239,22 @@ BN [ \t\r\n]
<SkipLine>[^/\n]+
<SkipLine>.
<SkipLine,SkipCommand,SkipCPPBlock>"//" {
- lastCPPContext=YY_START;
+ g_lastCPPContext=YY_START;
BEGIN(RemoveCPPComment);
}
<SkipLine,SkipCommand,SkipCPPBlock>"/*" {
- lastCContext=YY_START;
+ g_lastCContext=YY_START;
BEGIN(RemoveCComment);
}
<SkipLine>\n {
outputChar('\n');
- yyLineNr++;
+ g_yyLineNr++;
BEGIN(SkipCPPBlock);
}
<IncludeID>{ID}{B}*/"(" {
- roundCount=0;
- defArgsStr=yytext;
- findDefArgContext = IncludeID;
+ g_roundCount=0;
+ g_defArgsStr=yytext;
+ g_findDefArgContext = IncludeID;
BEGIN(FindDefineArgs);
}
<IncludeID>{ID} {
@@ -1228,123 +1262,128 @@ BN [ \t\r\n]
BEGIN(Start);
}
<Include>[^\">\n]+[\">] {
- QCString incName=yytext;
+ g_incName+=yytext;
//int l=incName.length();
//QCString incFileName=incName.left(l-1);
//if (fileDefineCache->fileCached(incFileName))
//{
// printf("file already cached!\n");
- // fileDefineCache->merge(incFileName,yyFileName);
+ // fileDefineCache->merge(incFileName,g_yyFileName);
//}
//else if ((f=findFile(incFileName)))
- readIncludeFile(incName);
+ readIncludeFile(g_incName);
BEGIN(Start);
}
<DefName>{ID}/"(" {
//printf("Define() `%s'\n",yytext);
- argDict = new QDict<int>(31);
- argDict->setAutoDelete(TRUE);
- defArgs = 0;
- defArgsStr.resize(0);
- defText.resize(0);
- defName = yytext;
- defVarArgs = FALSE;
+ g_argDict = new QDict<int>(31);
+ g_argDict->setAutoDelete(TRUE);
+ g_defArgs = 0;
+ g_defArgsStr.resize(0);
+ g_defText.resize(0);
+ g_defLitText.resize(0);
+ g_defName = yytext;
+ g_defVarArgs = FALSE;
BEGIN(DefineArg);
}
<DefName>{ID}/{B}* {
//printf("Define `%s'\n",yytext);
- argDict = 0;
- defArgs = -1;
- defArgsStr.resize(0);
- defText.resize(0);
- defName = yytext;
- defVarArgs = FALSE;
- QCString tmp=(QCString)"#define "+defName+defArgsStr;
+ 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());
- quoteArg=FALSE;
+ g_quoteArg=FALSE;
BEGIN(DefineText);
}
<DefName>{ID}/{B}*"\n" {
- argDict = 0;
- defArgs = -1;
- defName = yytext;
- defArgsStr.resize(0);
- defText.resize(0);
- defVarArgs = FALSE;
- if ( defName!=lastGuardName )
+ g_argDict = 0;
+ g_defArgs = -1;
+ g_defName = yytext;
+ g_defArgsStr.resize(0);
+ g_defText.resize(0);
+ g_defLitText.resize(0);
+ g_defVarArgs = FALSE;
+ if ( g_defName!=g_lastGuardName )
{ // define may appear in the output
- QCString tmp=(QCString)"#define "+defName+defArgsStr;
+ QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
outputArray(tmp.data(),tmp.length());
- quoteArg=FALSE;
+ g_quoteArg=FALSE;
BEGIN(DefineText);
}
else // define is a guard => hide
{
//printf("Found a guard %s\n",yytext);
Define *def=0;
- //if (includeStack.isEmpty())
+ //if (g_includeStack.isEmpty())
//{
// addDefine();
//}
- if (/*!Config::onlyPredefinedFlag &&*/ (def=fileDefineDict->find(defName))==0)
+ if (/*!Config::onlyPredefinedFlag &&*/ (def=g_fileDefineDict->find(g_defName))==0)
{
- fileDefineDict->insert(defName,newDefine());
+ g_fileDefineDict->insert(g_defName,newDefine());
}
else if (def)// name already exists
{
if (def->undef) // undefined name
{
def->undef = FALSE;
- def->name = defName;
- def->definition = defText.stripWhiteSpace();
- def->nargs = defArgs;
- def->fileName = yyFileName;
- def->lineNr = yyLineNr;
+ def->name = g_defName;
+ def->definition = g_defText.stripWhiteSpace();
+ def->nargs = g_defArgs;
+ def->fileName = g_yyFileName.copy();
+ def->lineNr = g_yyLineNr;
}
else
{
- //printf("Error: define %s is defined more than once!\n",defName.data());
+ //printf("Error: define %s is defined more than once!\n",g_defName.data());
}
}
//outputChar('\n');
- lastGuardName.resize(0);
+ g_lastGuardName.resize(0);
BEGIN(Start);
}
}
-<DefineArg>","{B}* { defArgsStr+=yytext; }
-<DefineArg>"("{B}* { defArgsStr+=yytext; }
+<DefineArg>","{B}* { g_defArgsStr+=yytext; }
+<DefineArg>"("{B}* { g_defArgsStr+=yytext; }
<DefineArg>{B}*")"{B}* {
- defArgsStr+=yytext;
- QCString tmp=(QCString)"#define "+defName+defArgsStr;
+ g_defArgsStr+=yytext;
+ QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
outputArray(tmp.data(),tmp.length());
- quoteArg=FALSE;
+ g_quoteArg=FALSE;
BEGIN(DefineText);
}
<DefineArg>{ID}("..."?) {
//printf("Define addArg(%s)\n",yytext);
QCString argName=yytext;
- defVarArgs = yytext[yyleng-1]=='.';
- if (defVarArgs) // strip ellipsis
+ g_defVarArgs = yytext[yyleng-1]=='.';
+ if (g_defVarArgs) // strip ellipsis
argName=argName.left(argName.length()-3);
- defArgsStr+=yytext;
- argDict->insert(argName,new int(defArgs));
- defArgs++;
+ g_defArgsStr+=yytext;
+ g_argDict->insert(argName,new int(g_defArgs));
+ g_defArgs++;
}
<DefineText>"/*" {
outputChar('/');outputChar('*');
- defText+=' ';
- lastCContext=YY_START;
+ g_defText+=' ';
+ g_defLitText+=' ';
+ g_lastCContext=YY_START;
BEGIN(SkipCComment);
}
<DefineText>"//" {
outputChar('/');outputChar('/');
- lastCPPContext=YY_START;
+ g_lastCPPContext=YY_START;
+ g_defLitText+=' ';
BEGIN(SkipCPPComment);
}
<SkipCComment>"*/" {
outputChar('*');outputChar('/');
- BEGIN(lastCContext);
+ BEGIN(g_lastCContext);
}
<SkipCComment>"//" {
outputChar('/');outputChar('/');
@@ -1356,21 +1395,21 @@ BN [ \t\r\n]
outputArray(yytext,yyleng);
}
<SkipCComment>\n {
- yyLineNr++;
+ g_yyLineNr++;
outputChar('\n');
}
<SkipCComment>. {
outputChar(*yytext);
}
-<RemoveCComment>"*/" { BEGIN(lastCContext); }
+<RemoveCComment>"*/" { BEGIN(g_lastCContext); }
<RemoveCComment>"//"
<RemoveCComment>"/*"
<RemoveCComment>[^*\n]+
-<RemoveCComment>\n { yyLineNr++; outputChar('\n'); }
+<RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); }
<RemoveCComment>.
<SkipCPPComment,RemoveCPPComment>\n {
unput(*yytext);
- BEGIN(lastCPPContext);
+ BEGIN(g_lastCPPContext);
}
<SkipCPPComment>"/*" {
outputChar('/');outputChar('*');
@@ -1389,55 +1428,59 @@ BN [ \t\r\n]
<RemoveCPPComment>[^\n]+
<RemoveCPPComment>.
<DefineText>"#" {
- quoteArg=TRUE;
+ g_quoteArg=TRUE;
+ g_defLitText+=yytext;
}
<DefineText>{ID} {
- if (quoteArg)
+ g_defLitText+=yytext;
+ if (g_quoteArg)
{
- defText+="\"";
+ g_defText+="\"";
}
- if (defArgs>0)
+ if (g_defArgs>0)
{
int *n;
- if ((n=(*argDict)[yytext]))
+ if ((n=(*g_argDict)[yytext]))
{
- if (!quoteArg) defText+=' ';
- defText+='@';
+ if (!g_quoteArg) g_defText+=' ';
+ g_defText+='@';
QCString numStr;
numStr.setNum(*n);
- defText+=numStr;
- if (!quoteArg) defText+=' ';
+ g_defText+=numStr;
+ if (!g_quoteArg) g_defText+=' ';
}
else
{
- defText+=yytext;
+ g_defText+=yytext;
}
}
else
{
- defText+=yytext;
+ g_defText+=yytext;
}
- if (quoteArg)
+ if (g_quoteArg)
{
- defText+="\"";
+ g_defText+="\"";
}
- quoteArg=FALSE;
+ g_quoteArg=FALSE;
}
-<DefineText>\\\n {
+<DefineText>\\[\r]?\n {
+ g_defLitText+=yytext;
outputChar('\n');
- defText += ' '; yyLineNr++;
+ g_defText += ' '; g_yyLineNr++;
}
<DefineText>\n {
+ g_defLitText+=yytext;
outputChar('\n');
Define *def=0;
- //printf("Define name=`%s' text=`%s'\n",defName.data(),defText.data());
- if (includeStack.isEmpty())
+ //printf("Define name=`%s' text=`%s'\n",g_defName.data(),g_defText.data());
+ if (g_includeStack.isEmpty())
{
addDefine();
}
- if (/*!Config::onlyPredefinedFlag &&*/ (def=fileDefineDict->find(defName))==0)
+ if (/*!Config::onlyPredefinedFlag &&*/ (def=g_fileDefineDict->find(g_defName))==0)
{
- fileDefineDict->insert(defName,newDefine());
+ g_fileDefineDict->insert(g_defName,newDefine());
}
else if (def)// name already exists
{
@@ -1445,59 +1488,61 @@ BN [ \t\r\n]
if (def->undef) // undefined name
{
def->undef = FALSE;
- def->name = defName;
- def->definition = defText.stripWhiteSpace();
- def->nargs = defArgs;
- def->fileName = yyFileName;
- def->lineNr = yyLineNr;
+ def->name = g_defName;
+ def->definition = g_defText.stripWhiteSpace();
+ def->nargs = g_defArgs;
+ def->fileName = g_yyFileName.copy();
+ def->lineNr = g_yyLineNr;
}
else
{
- //printf("Error: define %s is defined more than once!\n",defName.data());
+ //printf("Error: define %s is defined more than once!\n",g_defName.data());
}
}
- delete argDict;
- yyLineNr++;
- lastGuardName.resize(0);
+ delete g_argDict; g_argDict=0;
+ g_yyLineNr++;
+ g_lastGuardName.resize(0);
BEGIN(Start);
}
-<DefineText>{B}* { defText += ' '; }
-<DefineText>{B}*"##"{B}* { defText += "##"; }
-<DefineText>"@" { defText += "@@"; }
-<DefineText>\" { defText += *yytext;
- BEGIN(SkipDoubleQuote);
+<DefineText>{B}* { g_defText += ' '; g_defLitText+=yytext; }
+<DefineText>{B}*"##"{B}* { g_defText += "##"; g_defLitText+=yytext; }
+<DefineText>"@" { g_defText += "@@"; g_defLitText+=yytext; }
+<DefineText>\" { g_defText += *yytext;
+ g_defLitText+=yytext;
+ BEGIN(SkipDoubleQuote);
}
-<DefineText>\' { defText += *yytext;
+<DefineText>\' { g_defText += *yytext;
+ g_defLitText+=yytext;
BEGIN(SkipSingleQuote);
}
-<SkipDoubleQuote>"//" { defText += yytext; }
-<SkipDoubleQuote>"/*" { defText += yytext; }
+<SkipDoubleQuote>"//" { g_defText += yytext; g_defLitText+=yytext; }
+<SkipDoubleQuote>"/*" { g_defText += yytext; g_defLitText+=yytext; }
<SkipDoubleQuote>\" {
- defText += *yytext;
+ g_defText += *yytext; g_defLitText+=yytext;
BEGIN(DefineText);
}
<SkipSingleQuote,SkipDoubleQuote>\\. {
- defText += yytext;
+ g_defText += yytext; g_defLitText+=yytext;
}
<SkipSingleQuote>\' {
- defText += *yytext;
+ g_defText += *yytext; g_defLitText+=yytext;
BEGIN(DefineText);
}
-<SkipDoubleQuote>. { defText += *yytext; }
-<SkipSingleQuote>. { defText += *yytext; }
-<DefineText>. { defText += *yytext; }
+<SkipDoubleQuote>. { g_defText += *yytext; g_defLitText+=yytext; }
+<SkipSingleQuote>. { g_defText += *yytext; g_defLitText+=yytext; }
+<DefineText>. { g_defText += *yytext; g_defLitText+=yytext; }
<<EOF>> {
//printf("End of include file\n");
- //printf("Include stack depth=%d\n",includeStack.count());
- if (includeStack.isEmpty())
+ //printf("Include stack depth=%d\n",g_includeStack.count());
+ if (g_includeStack.isEmpty())
{
//printf("Terminating scanner!\n");
yyterminate();
}
else
{
- FileState *fs=includeStack.pop();
- //fileDefineCache->merge(yyFileName,fs->fileName);
+ FileState *fs=g_includeStack.pop();
+ //fileDefineCache->merge(g_yyFileName,fs->fileName);
if (Config::inputFilter.isEmpty())
fclose(fs->filePtr);
else
@@ -1505,25 +1550,25 @@ BN [ \t\r\n]
YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
yy_switch_to_buffer( fs->bufState );
yy_delete_buffer( oldBuf );
- yyLineNr=fs->lineNr;
- yyFileName=fs->fileName.copy();
- //printf("######## FileName %s\n",yyFileName.data());
- delete fs;
+ g_yyLineNr=fs->lineNr;
+ setFileName(fs->fileName.copy());
+ //printf("######## FileName %s\n",g_yyFileName.data());
+ delete fs; fs=0;
}
}
<*>"/*" {
outputChar('/');outputChar('*');
- lastCContext=YY_START;
+ g_lastCContext=YY_START;
BEGIN(SkipCComment);
}
<*>"//" {
outputChar('/');outputChar('/');
- lastCPPContext=YY_START;
+ g_lastCPPContext=YY_START;
BEGIN(SkipCPPComment);
}
<*>\n {
outputChar('\n');
- yyLineNr++;
+ g_yyLineNr++;
}
<*>. {
outputChar(*yytext);
@@ -1542,7 +1587,7 @@ static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
//printf("%c=expr()\n",expr.at(pos));
return expr.at(pos++);
}
- else if (rest && rest->length()>0)
+ else if (rest && !rest->isEmpty())
{
int cc=rest->at(0);
*rest=rest->right(rest->length()-1);
@@ -1565,7 +1610,7 @@ static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
//printf("%c=expr()\n",expr.at(pos));
return expr.at(pos);
}
- else if (rest && rest->length()>0)
+ else if (rest && !rest->isEmpty())
{
int cc=rest->at(0);
//printf("%c=rest\n",cc);
@@ -1602,27 +1647,27 @@ static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
void addSearchDir(const char *dir)
{
QFileInfo fi(dir);
- if (fi.isDir()) pathList->append(fi.absFilePath());
+ if (fi.isDir()) g_pathList->append(fi.absFilePath());
}
void initPreprocessor()
{
- pathList = new QStrList;
+ g_pathList = new QStrList;
addSearchDir(".");
//defineNameList.setAutoDelete(TRUE);
//defineNameList.clear();
defineDict.clear();
//fileDefineCache = new DefineCache(1009);
- expandedDict = new DefineDict(17);
- fileDefineDict = new DefineDict(1009);
+ g_expandedDict = new DefineDict(17);
+ g_fileDefineDict = new DefineDict(1009);
}
void cleanupPreprocessor()
{
//delete fileDefineCache;
- delete fileDefineDict;
- delete expandedDict;
- delete pathList;
+ delete g_fileDefineDict; g_fileDefineDict=0;
+ delete g_expandedDict; g_expandedDict=0;
+ delete g_pathList; g_pathList=0;
}
@@ -1632,13 +1677,13 @@ void preprocessFile(const char *fileName,BufStr &output)
uint orgOffset=output.curPos();
//#endif
- outputBuf=&output;
- includeStack.setAutoDelete(TRUE);
- includeStack.clear();
- fileDefineDict->setAutoDelete(TRUE);
- fileDefineDict->clear();
- expandedDict->setAutoDelete(FALSE);
- expandedDict->clear();
+ g_outputBuf=&output;
+ g_includeStack.setAutoDelete(TRUE);
+ g_includeStack.clear();
+ g_fileDefineDict->setAutoDelete(TRUE);
+ g_fileDefineDict->clear();
+ g_expandedDict->setAutoDelete(FALSE);
+ g_expandedDict->clear();
// add predefined macros
char *defStr = Config::predefined.first();
@@ -1698,14 +1743,14 @@ void preprocessFile(const char *fileName,BufStr &output)
def->nargs = count;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
- fileDefineDict->insert(def->name,def);
+ g_fileDefineDict->insert(def->name,def);
//printf("#define `%s' `%s' #nargs=%d\n",
// def->name.data(),def->definition.data(),def->nargs);
}
else if ((i_obrace==-1 || i_obrace>i_equals) &&
(i_cbrace==-1 || i_cbrace>i_equals) &&
- ds.length()>0 && (int)ds.length()>i_equals
+ !ds.isEmpty() && (int)ds.length()>i_equals
) // predefined non-function macro definition
{
Define *def = new Define;
@@ -1723,7 +1768,7 @@ void preprocessFile(const char *fileName,BufStr &output)
def->nargs = -1;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
- fileDefineDict->insert(def->name,def);
+ g_fileDefineDict->insert(def->name,def);
//printf("#define `%s' `%s' #nargs=%d\n",
// def->name.data(),def->definition.data(),def->nargs);
@@ -1751,14 +1796,14 @@ void preprocessFile(const char *fileName,BufStr &output)
return;
}
}
- yyLineNr = 1;
- level = 0;
- ifcount = 0;
- yyFileName = fileName;
+ g_yyLineNr = 1;
+ g_level = 0;
+ g_ifcount = 0;
+ setFileName(fileName);
BEGIN( Start );
- lastGuardName.resize(0);
- guardExpr.resize(0);
+ g_lastGuardName.resize(0);
+ g_guardExpr.resize(0);
preYYlex();
if (Config::inputFilter.isEmpty())