Skip to content

Commit 574fffa

Browse files
authored
moved common files.txt loading code to AnalyzerInformation (#8097)
1 parent e031165 commit 574fffa

File tree

7 files changed

+81
-88
lines changed

7 files changed

+81
-88
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ $(libcppdir)/checktype.o: lib/checktype.cpp lib/addoninfo.h lib/astutils.h lib/c
565565
$(libcppdir)/checkuninitvar.o: lib/checkuninitvar.cpp lib/addoninfo.h lib/astutils.h lib/check.h lib/checkers.h lib/checknullpointer.h lib/checkuninitvar.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
566566
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkuninitvar.cpp
567567

568-
$(libcppdir)/checkunusedfunctions.o: lib/checkunusedfunctions.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/astutils.h lib/checkers.h lib/checkunusedfunctions.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
568+
$(libcppdir)/checkunusedfunctions.o: lib/checkunusedfunctions.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/analyzerinfo.h lib/astutils.h lib/checkers.h lib/checkunusedfunctions.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
569569
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkunusedfunctions.cpp
570570

571571
$(libcppdir)/checkunusedvar.o: lib/checkunusedvar.cpp lib/addoninfo.h lib/astutils.h lib/check.h lib/checkers.h lib/checkunusedvar.h lib/config.h lib/errortypes.h lib/fwdanalysis.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/vfvalue.h
@@ -580,7 +580,7 @@ $(libcppdir)/clangimport.o: lib/clangimport.cpp lib/addoninfo.h lib/checkers.h l
580580
$(libcppdir)/color.o: lib/color.cpp lib/color.h lib/config.h
581581
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/color.cpp
582582

583-
$(libcppdir)/cppcheck.o: lib/cppcheck.cpp externals/picojson/picojson.h externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/checkers.h lib/checkunusedfunctions.h lib/clangimport.h lib/color.h lib/config.h lib/cppcheck.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/json.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/regex.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/version.h lib/vfvalue.h lib/xml.h
583+
$(libcppdir)/cppcheck.o: lib/cppcheck.cpp externals/picojson/picojson.h externals/simplecpp/simplecpp.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/checkers.h lib/checkunusedfunctions.h lib/clangimport.h lib/color.h lib/config.h lib/cppcheck.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/json.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/regex.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/version.h lib/vfvalue.h
584584
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/cppcheck.cpp
585585

586586
$(libcppdir)/ctu.o: lib/ctu.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h

lib/analyzerinfo.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,3 +209,37 @@ bool AnalyzerInformation::Info::parse(const std::string& filesTxtLine) {
209209
return true;
210210
}
211211

212+
// TODO: bail out on unexpected data
213+
void AnalyzerInformation::processFilesTxt(const std::string& buildDir, const std::function<void(const char* checkattr, const tinyxml2::XMLElement* e, const Info& filesTxtInfo)>& handler)
214+
{
215+
const std::string filesTxt(buildDir + "/files.txt");
216+
std::ifstream fin(filesTxt.c_str());
217+
std::string filesTxtLine;
218+
while (std::getline(fin, filesTxtLine)) {
219+
AnalyzerInformation::Info filesTxtInfo;
220+
if (!filesTxtInfo.parse(filesTxtLine)) {
221+
return;
222+
}
223+
224+
const std::string xmlfile = buildDir + '/' + filesTxtInfo.afile;
225+
226+
tinyxml2::XMLDocument doc;
227+
const tinyxml2::XMLError error = doc.LoadFile(xmlfile.c_str());
228+
if (error != tinyxml2::XML_SUCCESS)
229+
return;
230+
231+
const tinyxml2::XMLElement * const rootNode = doc.FirstChildElement();
232+
if (rootNode == nullptr)
233+
return;
234+
235+
for (const tinyxml2::XMLElement *e = rootNode->FirstChildElement(); e; e = e->NextSiblingElement()) {
236+
if (std::strcmp(e->Name(), "FileInfo") != 0)
237+
continue;
238+
const char *checkattr = e->Attribute("check");
239+
if (checkattr == nullptr)
240+
continue;
241+
handler(checkattr, e, filesTxtInfo);
242+
}
243+
}
244+
}
245+

lib/analyzerinfo.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include <cstddef>
2727
#include <fstream>
28+
#include <functional>
2829
#include <list>
2930
#include <string>
3031

@@ -33,6 +34,7 @@ struct FileSettings;
3334

3435
namespace tinyxml2 {
3536
class XMLDocument;
37+
class XMLElement;
3638
};
3739

3840
/// @addtogroup Core
@@ -75,6 +77,8 @@ class CPPCHECKLIB AnalyzerInformation {
7577
std::string sourceFile;
7678
};
7779

80+
static void processFilesTxt(const std::string& buildDir, const std::function<void(const char* checkattr, const tinyxml2::XMLElement* e, const Info& filesTxtInfo)>& handler);
81+
7882
protected:
7983
static std::string getFilesTxt(const std::list<std::string> &sourcefiles, const std::string &userDefines, const std::list<FileSettings> &fileSettings);
8084

lib/checkunusedfunctions.cpp

Lines changed: 22 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
//---------------------------------------------------------------------------
2121
#include "checkunusedfunctions.h"
2222

23+
#include "analyzerinfo.h"
2324
#include "astutils.h"
2425
#include "errorlogger.h"
2526
#include "errortypes.h"
@@ -34,7 +35,7 @@
3435
#include <algorithm>
3536
#include <cctype>
3637
#include <cstring>
37-
#include <fstream>
38+
#include <functional>
3839
#include <map>
3940
#include <sstream>
4041
#include <tuple>
@@ -457,55 +458,31 @@ void CheckUnusedFunctions::analyseWholeProgram(const Settings &settings, ErrorLo
457458
std::map<std::string, Location> decls;
458459
std::set<std::string> calls;
459460

460-
const std::string filesTxt(buildDir + "/files.txt");
461-
std::ifstream fin(filesTxt.c_str());
462-
std::string filesTxtLine;
463-
while (std::getline(fin, filesTxtLine)) {
464-
const std::string::size_type firstColon = filesTxtLine.find(':');
465-
if (firstColon == std::string::npos)
466-
continue;
467-
const std::string::size_type secondColon = filesTxtLine.find(':', firstColon+1);
468-
if (secondColon == std::string::npos)
469-
continue;
470-
const std::string xmlfile = buildDir + '/' + filesTxtLine.substr(0,firstColon);
471-
const std::string sourcefile = filesTxtLine.substr(secondColon+1);
472-
473-
tinyxml2::XMLDocument doc;
474-
const tinyxml2::XMLError error = doc.LoadFile(xmlfile.c_str());
475-
if (error != tinyxml2::XML_SUCCESS)
476-
continue;
477-
478-
const tinyxml2::XMLElement * const rootNode = doc.FirstChildElement();
479-
if (rootNode == nullptr)
480-
continue;
481-
482-
for (const tinyxml2::XMLElement *e = rootNode->FirstChildElement(); e; e = e->NextSiblingElement()) {
483-
if (std::strcmp(e->Name(), "FileInfo") != 0)
461+
const auto handler = [&decls, &calls](const char* checkattr, const tinyxml2::XMLElement* e, const AnalyzerInformation::Info& filesTxtInfo) {
462+
if (std::strcmp(checkattr,"CheckUnusedFunctions") != 0)
463+
return;
464+
for (const tinyxml2::XMLElement *e2 = e->FirstChildElement(); e2; e2 = e2->NextSiblingElement()) {
465+
const char* functionName = e2->Attribute("functionName");
466+
if (functionName == nullptr)
484467
continue;
485-
const char *checkattr = e->Attribute("check");
486-
if (checkattr == nullptr || std::strcmp(checkattr,"CheckUnusedFunctions") != 0)
468+
const char* name = e2->Name();
469+
if (std::strcmp(name,"functioncall") == 0) {
470+
calls.insert(functionName);
487471
continue;
488-
for (const tinyxml2::XMLElement *e2 = e->FirstChildElement(); e2; e2 = e2->NextSiblingElement()) {
489-
const char* functionName = e2->Attribute("functionName");
490-
if (functionName == nullptr)
491-
continue;
492-
const char* name = e2->Name();
493-
if (std::strcmp(name,"functioncall") == 0) {
494-
calls.insert(functionName);
495-
continue;
496-
}
497-
if (std::strcmp(name,"functiondecl") == 0) {
498-
const char* lineNumber = e2->Attribute("lineNumber");
499-
if (lineNumber) {
500-
const char* file = e2->Attribute("file");
501-
const char* column = default_if_null(e2->Attribute("column"), "0");
502-
// cppcheck-suppress templateInstantiation - TODO: fix this - see #11631
503-
decls[functionName] = Location(file ? file : sourcefile, strToInt<int>(lineNumber), strToInt<int>(column));
504-
}
472+
}
473+
if (std::strcmp(name,"functiondecl") == 0) {
474+
const char* lineNumber = e2->Attribute("lineNumber");
475+
if (lineNumber) {
476+
const char* file = e2->Attribute("file");
477+
const char* column = default_if_null(e2->Attribute("column"), "0");
478+
// cppcheck-suppress templateInstantiation - TODO: fix this - see #11631
479+
decls[functionName] = Location(file ? file : filesTxtInfo.sourceFile, strToInt<int>(lineNumber), strToInt<int>(column));
505480
}
506481
}
507482
}
508-
}
483+
};
484+
485+
AnalyzerInformation::processFilesTxt(buildDir, handler);
509486

510487
for (auto decl = decls.cbegin(); decl != decls.cend(); ++decl) {
511488
const std::string &functionName = stripTemplateParameters(decl->first);

lib/cppcheck.cpp

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,11 @@
7070
#include <vector>
7171

7272
#include "json.h"
73-
#include "xml.h"
7473

7574
#include <simplecpp.h>
7675

76+
namespace tinyxml2 { class XMLElement; }
77+
7778
static constexpr char Version[] = CPPCHECK_VERSION_STRING;
7879
static constexpr char ExtraVersion[] = "";
7980

@@ -1851,50 +1852,26 @@ unsigned int CppCheck::analyseWholeProgram(const std::string &buildDir, const st
18511852
return mLogger->exitcode();
18521853

18531854
executeAddonsWholeProgram(files, fileSettings, ctuInfo);
1855+
18541856
std::list<Check::FileInfo*> fileInfoList;
18551857
CTU::FileInfo ctuFileInfo;
18561858

1857-
// Load all analyzer info data..
1858-
const std::string filesTxt(buildDir + "/files.txt");
1859-
std::ifstream fin(filesTxt);
1860-
std::string filesTxtLine;
1861-
while (std::getline(fin, filesTxtLine)) {
1862-
AnalyzerInformation::Info filesTxtInfo;
1863-
if (!filesTxtInfo.parse(filesTxtLine))
1864-
continue;
1865-
1866-
const std::string xmlfile = buildDir + '/' + filesTxtInfo.afile;
1867-
1868-
tinyxml2::XMLDocument doc;
1869-
const tinyxml2::XMLError error = doc.LoadFile(xmlfile.c_str());
1870-
if (error != tinyxml2::XML_SUCCESS)
1871-
continue;
1872-
1873-
const tinyxml2::XMLElement * const rootNode = doc.FirstChildElement();
1874-
if (rootNode == nullptr)
1875-
continue;
1876-
1877-
for (const tinyxml2::XMLElement *e = rootNode->FirstChildElement(); e; e = e->NextSiblingElement()) {
1878-
if (std::strcmp(e->Name(), "FileInfo") != 0)
1879-
continue;
1880-
const char *checkClassAttr = e->Attribute("check");
1881-
if (!checkClassAttr)
1882-
continue;
1883-
if (std::strcmp(checkClassAttr, "ctu") == 0) {
1884-
ctuFileInfo.loadFromXml(e);
1885-
continue;
1886-
}
1887-
// cppcheck-suppress shadowFunction - TODO: fix this
1888-
for (const Check *check : Check::instances()) {
1889-
if (checkClassAttr == check->name()) {
1890-
if (Check::FileInfo* fi = check->loadFileInfoFromXml(e)) {
1891-
fi->file0 = filesTxtInfo.sourceFile;
1892-
fileInfoList.push_back(fi);
1893-
}
1859+
const auto handler = [&fileInfoList, &ctuFileInfo](const char* checkattr, const tinyxml2::XMLElement* e, const AnalyzerInformation::Info& filesTxtInfo) {
1860+
if (std::strcmp(checkattr, "ctu") == 0) {
1861+
ctuFileInfo.loadFromXml(e);
1862+
return;
1863+
}
1864+
for (const Check *check : Check::instances()) {
1865+
if (checkattr == check->name()) {
1866+
if (Check::FileInfo* fi = check->loadFileInfoFromXml(e)) {
1867+
fi->file0 = filesTxtInfo.sourceFile;
1868+
fileInfoList.push_back(fi);
18941869
}
18951870
}
18961871
}
1897-
}
1872+
};
1873+
1874+
AnalyzerInformation::processFilesTxt(buildDir, handler);
18981875

18991876
// Analyse the tokens
19001877
// cppcheck-suppress shadowFunction - TODO: fix this

lib/ctu.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ bool CTU::FileInfo::NestedCall::loadFromXml(const tinyxml2::XMLElement *xmlEleme
231231
return !error;
232232
}
233233

234+
// TODO: bail out on unexpected data
234235
void CTU::FileInfo::loadFromXml(const tinyxml2::XMLElement *xmlElement)
235236
{
236237
for (const tinyxml2::XMLElement *e = xmlElement->FirstChildElement(); e; e = e->NextSiblingElement()) {

oss-fuzz/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ $(libcppdir)/checktype.o: ../lib/checktype.cpp ../lib/addoninfo.h ../lib/astutil
245245
$(libcppdir)/checkuninitvar.o: ../lib/checkuninitvar.cpp ../lib/addoninfo.h ../lib/astutils.h ../lib/check.h ../lib/checkers.h ../lib/checknullpointer.h ../lib/checkuninitvar.h ../lib/config.h ../lib/ctu.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h
246246
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkuninitvar.cpp
247247

248-
$(libcppdir)/checkunusedfunctions.o: ../lib/checkunusedfunctions.cpp ../externals/tinyxml2/tinyxml2.h ../lib/addoninfo.h ../lib/astutils.h ../lib/checkers.h ../lib/checkunusedfunctions.h ../lib/config.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h ../lib/xml.h
248+
$(libcppdir)/checkunusedfunctions.o: ../lib/checkunusedfunctions.cpp ../externals/tinyxml2/tinyxml2.h ../lib/addoninfo.h ../lib/analyzerinfo.h ../lib/astutils.h ../lib/checkers.h ../lib/checkunusedfunctions.h ../lib/config.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h ../lib/xml.h
249249
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkunusedfunctions.cpp
250250

251251
$(libcppdir)/checkunusedvar.o: ../lib/checkunusedvar.cpp ../lib/addoninfo.h ../lib/astutils.h ../lib/check.h ../lib/checkers.h ../lib/checkunusedvar.h ../lib/config.h ../lib/errortypes.h ../lib/fwdanalysis.h ../lib/library.h ../lib/mathlib.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/valueflow.h ../lib/vfvalue.h
@@ -260,7 +260,7 @@ $(libcppdir)/clangimport.o: ../lib/clangimport.cpp ../lib/addoninfo.h ../lib/che
260260
$(libcppdir)/color.o: ../lib/color.cpp ../lib/color.h ../lib/config.h
261261
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/color.cpp
262262

263-
$(libcppdir)/cppcheck.o: ../lib/cppcheck.cpp ../externals/picojson/picojson.h ../externals/simplecpp/simplecpp.h ../externals/tinyxml2/tinyxml2.h ../lib/addoninfo.h ../lib/analyzerinfo.h ../lib/check.h ../lib/checkers.h ../lib/checkunusedfunctions.h ../lib/clangimport.h ../lib/color.h ../lib/config.h ../lib/cppcheck.h ../lib/ctu.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/filesettings.h ../lib/json.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/platform.h ../lib/preprocessor.h ../lib/regex.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/suppressions.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/timer.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/valueflow.h ../lib/version.h ../lib/vfvalue.h ../lib/xml.h
263+
$(libcppdir)/cppcheck.o: ../lib/cppcheck.cpp ../externals/picojson/picojson.h ../externals/simplecpp/simplecpp.h ../lib/addoninfo.h ../lib/analyzerinfo.h ../lib/check.h ../lib/checkers.h ../lib/checkunusedfunctions.h ../lib/clangimport.h ../lib/color.h ../lib/config.h ../lib/cppcheck.h ../lib/ctu.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/filesettings.h ../lib/json.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/platform.h ../lib/preprocessor.h ../lib/regex.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/suppressions.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/timer.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/valueflow.h ../lib/version.h ../lib/vfvalue.h
264264
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/cppcheck.cpp
265265

266266
$(libcppdir)/ctu.o: ../lib/ctu.cpp ../externals/tinyxml2/tinyxml2.h ../lib/astutils.h ../lib/check.h ../lib/config.h ../lib/ctu.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h ../lib/xml.h

0 commit comments

Comments
 (0)