Added 'endsWith' utility function. This will make compiling the democlient easier.
This commit is contained in:
parent
4bf439936c
commit
1faca91c1d
14
Makefile
14
Makefile
|
@ -300,7 +300,7 @@ endif
|
|||
|
||||
###### Build
|
||||
|
||||
$(SRCDIR)/analyzerinfo.o: lib/analyzerinfo.cpp lib/cxx11emu.h lib/analyzerinfo.h lib/config.h lib/errorlogger.h lib/suppressions.h lib/importproject.h lib/platform.h lib/path.h
|
||||
$(SRCDIR)/analyzerinfo.o: lib/analyzerinfo.cpp lib/cxx11emu.h lib/analyzerinfo.h lib/config.h lib/errorlogger.h lib/suppressions.h lib/importproject.h lib/platform.h lib/path.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/analyzerinfo.o $(SRCDIR)/analyzerinfo.cpp
|
||||
|
||||
$(SRCDIR)/astutils.o: lib/astutils.cpp lib/cxx11emu.h lib/astutils.h lib/settings.h lib/config.h lib/library.h lib/mathlib.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/platform.h lib/importproject.h lib/timer.h lib/symboldatabase.h lib/token.h lib/valueflow.h lib/tokenize.h lib/tokenlist.h
|
||||
|
@ -390,19 +390,19 @@ $(SRCDIR)/cppcheck.o: lib/cppcheck.cpp lib/cxx11emu.h lib/cppcheck.h lib/config.
|
|||
$(SRCDIR)/errorlogger.o: lib/errorlogger.cpp lib/cxx11emu.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/path.h lib/cppcheck.h lib/settings.h lib/library.h lib/mathlib.h lib/standards.h lib/platform.h lib/importproject.h lib/timer.h lib/check.h lib/token.h lib/valueflow.h lib/tokenize.h lib/tokenlist.h lib/analyzerinfo.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/errorlogger.o $(SRCDIR)/errorlogger.cpp
|
||||
|
||||
$(SRCDIR)/importproject.o: lib/importproject.cpp lib/cxx11emu.h lib/importproject.h lib/config.h lib/platform.h lib/path.h lib/settings.h lib/library.h lib/mathlib.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/token.h lib/valueflow.h
|
||||
$(SRCDIR)/importproject.o: lib/importproject.cpp lib/cxx11emu.h lib/importproject.h lib/config.h lib/platform.h lib/path.h lib/settings.h lib/library.h lib/mathlib.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/token.h lib/valueflow.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/importproject.o $(SRCDIR)/importproject.cpp
|
||||
|
||||
$(SRCDIR)/library.o: lib/library.cpp lib/cxx11emu.h lib/library.h lib/config.h lib/mathlib.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/path.h lib/tokenlist.h lib/token.h lib/valueflow.h lib/symboldatabase.h lib/astutils.h
|
||||
$(SRCDIR)/library.o: lib/library.cpp lib/cxx11emu.h lib/library.h lib/config.h lib/mathlib.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/path.h lib/tokenlist.h lib/token.h lib/valueflow.h lib/symboldatabase.h lib/astutils.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/library.o $(SRCDIR)/library.cpp
|
||||
|
||||
$(SRCDIR)/mathlib.o: lib/mathlib.cpp lib/cxx11emu.h lib/mathlib.h lib/config.h lib/errorlogger.h lib/suppressions.h
|
||||
$(SRCDIR)/mathlib.o: lib/mathlib.cpp lib/cxx11emu.h lib/mathlib.h lib/config.h lib/errorlogger.h lib/suppressions.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/mathlib.o $(SRCDIR)/mathlib.cpp
|
||||
|
||||
$(SRCDIR)/path.o: lib/path.cpp lib/cxx11emu.h lib/path.h lib/config.h
|
||||
$(SRCDIR)/path.o: lib/path.cpp lib/cxx11emu.h lib/path.h lib/config.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/path.o $(SRCDIR)/path.cpp
|
||||
|
||||
$(SRCDIR)/pathmatch.o: lib/pathmatch.cpp lib/cxx11emu.h lib/pathmatch.h lib/config.h lib/path.h
|
||||
$(SRCDIR)/pathmatch.o: lib/pathmatch.cpp lib/cxx11emu.h lib/pathmatch.h lib/config.h lib/path.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/pathmatch.o $(SRCDIR)/pathmatch.cpp
|
||||
|
||||
$(SRCDIR)/platform.o: lib/platform.cpp lib/cxx11emu.h lib/platform.h lib/config.h
|
||||
|
@ -432,7 +432,7 @@ $(SRCDIR)/token.o: lib/token.cpp lib/cxx11emu.h lib/token.h lib/config.h lib/val
|
|||
$(SRCDIR)/tokenize.o: lib/tokenize.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/mathlib.h lib/settings.h lib/library.h lib/standards.h lib/platform.h lib/importproject.h lib/timer.h lib/check.h lib/token.h lib/valueflow.h lib/path.h lib/symboldatabase.h lib/templatesimplifier.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/tokenize.o $(SRCDIR)/tokenize.cpp
|
||||
|
||||
$(SRCDIR)/tokenlist.o: lib/tokenlist.cpp lib/cxx11emu.h lib/tokenlist.h lib/config.h lib/token.h lib/valueflow.h lib/mathlib.h lib/path.h lib/preprocessor.h lib/settings.h lib/library.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/platform.h lib/importproject.h lib/timer.h
|
||||
$(SRCDIR)/tokenlist.o: lib/tokenlist.cpp lib/cxx11emu.h lib/tokenlist.h lib/config.h lib/token.h lib/valueflow.h lib/mathlib.h lib/path.h lib/preprocessor.h lib/settings.h lib/library.h lib/standards.h lib/errorlogger.h lib/suppressions.h lib/platform.h lib/importproject.h lib/timer.h lib/utils.h
|
||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(SRCDIR)/tokenlist.o $(SRCDIR)/tokenlist.cpp
|
||||
|
||||
$(SRCDIR)/valueflow.o: lib/valueflow.cpp lib/cxx11emu.h lib/valueflow.h lib/config.h lib/astutils.h lib/errorlogger.h lib/suppressions.h lib/mathlib.h lib/settings.h lib/library.h lib/standards.h lib/platform.h lib/importproject.h lib/timer.h lib/symboldatabase.h lib/token.h lib/tokenlist.h
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "analyzerinfo.h"
|
||||
#include "path.h"
|
||||
#include "utils.h"
|
||||
#include <tinyxml2.h>
|
||||
#include <sstream>
|
||||
|
||||
|
@ -110,7 +111,7 @@ std::string AnalyzerInformation::getAnalyzerInfoFile(const std::string &buildDir
|
|||
}
|
||||
|
||||
std::string filename = Path::fromNativeSeparators(buildDir);
|
||||
if (filename.back() != '/')
|
||||
if (!endsWith(filename, '/'))
|
||||
filename += '/';
|
||||
const std::string::size_type pos = sourcefile.rfind('/');
|
||||
if (pos == std::string::npos)
|
||||
|
|
|
@ -1734,7 +1734,7 @@ void CheckClass::checkConst()
|
|||
continue;
|
||||
} else if (func->isOperator() && Token::Match(previous, ";|{|}|public:|private:|protected:")) { // Operator without return type: conversion operator
|
||||
const std::string& opName = func->tokenDef->str();
|
||||
if (opName.compare(8, 5, "const") != 0 && (opName.back() == '&' || opName.back() == '*'))
|
||||
if (opName.compare(8, 5, "const") != 0 && (endsWith(opName,'&') || endsWith(opName,'*')))
|
||||
continue;
|
||||
} else {
|
||||
// don't warn for unknown types..
|
||||
|
|
|
@ -137,7 +137,7 @@ void ErrorLogger::ErrorMessage::setmsg(const std::string &msg)
|
|||
// as an empty message to the user if --verbose is used.
|
||||
// Even this doesn't cause problems with messages that have multiple
|
||||
// lines, none of the the error messages should end into it.
|
||||
assert(!(msg.back() =='\n'));
|
||||
assert(!endsWith(msg,'\n'));
|
||||
|
||||
// The summary and verbose message are separated by a newline
|
||||
// If there is no newline then both the summary and verbose messages
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "tokenize.h"
|
||||
#include "token.h"
|
||||
#include "tinyxml2.h"
|
||||
#include "utils.h"
|
||||
#include <fstream>
|
||||
|
||||
void ImportProject::ignorePaths(const std::vector<std::string> &ipaths)
|
||||
|
@ -70,7 +71,7 @@ void ImportProject::FileSettings::setDefines(std::string defs)
|
|||
}
|
||||
while (defs.find(";;") != std::string::npos)
|
||||
defs.erase(defs.find(";;"),1);
|
||||
if (!defs.empty() && defs.back() == ';')
|
||||
if (!defs.empty() && endsWith(defs,';'))
|
||||
defs.erase(defs.size() - 1U); // TODO: Use std::string::pop_back() as soon as travis supports it
|
||||
bool eq = false;
|
||||
for (std::size_t pos = 0; pos < defs.size(); ++pos) {
|
||||
|
@ -123,13 +124,13 @@ void ImportProject::FileSettings::setIncludePaths(const std::string &basepath, c
|
|||
continue;
|
||||
std::string s(Path::fromNativeSeparators(*it));
|
||||
if (s[0] == '/' || (s.size() > 1U && s.compare(1,2,":/") == 0)) {
|
||||
if (s.back() != '/')
|
||||
if (!endsWith(s,'/'))
|
||||
s += '/';
|
||||
I.push_back(s);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (s.back() == '/') // this is a temporary hack, simplifyPath can crash if path ends with '/'
|
||||
if (endsWith(s,'/')) // this is a temporary hack, simplifyPath can crash if path ends with '/'
|
||||
s.erase(s.size() - 1U); // TODO: Use std::string::pop_back() as soon as travis supports it
|
||||
|
||||
if (s.find("$(")==std::string::npos) {
|
||||
|
@ -154,7 +155,7 @@ void ImportProject::import(const std::string &filename)
|
|||
importCompileCommands(fin);
|
||||
} else if (filename.find(".sln") != std::string::npos) {
|
||||
std::string path(Path::getPathFromFilename(Path::fromNativeSeparators(filename)));
|
||||
if (!path.empty() && path.back() != '/')
|
||||
if (!path.empty() && !endsWith(path,'/'))
|
||||
path += '/';
|
||||
importSln(fin,path);
|
||||
} else if (filename.find(".vcxproj") != std::string::npos) {
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "token.h"
|
||||
#include "symboldatabase.h"
|
||||
#include "astutils.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -87,7 +88,7 @@ Library::Error Library::load(const char exename[], const char path[])
|
|||
while (error == tinyxml2::XML_ERROR_FILE_NOT_FOUND && !cfgfolders.empty()) {
|
||||
const std::string cfgfolder(cfgfolders.front());
|
||||
cfgfolders.pop_front();
|
||||
const char *sep = (!cfgfolder.empty() && cfgfolder.back()=='/' ? "" : "/");
|
||||
const char *sep = (!cfgfolder.empty() && endsWith(cfgfolder,'/') ? "" : "/");
|
||||
const std::string filename(cfgfolder + sep + fullfilename);
|
||||
error = doc.LoadFile(filename.c_str());
|
||||
if (error != tinyxml2::XML_ERROR_FILE_NOT_FOUND)
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "mathlib.h"
|
||||
#include "errorlogger.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <algorithm> // VS2013: std::min and std::max
|
||||
#include <cmath>
|
||||
|
@ -524,7 +525,7 @@ MathLib::bigint MathLib::toLongNumber(const std::string & str)
|
|||
return static_cast<bigint>(doubleval);
|
||||
}
|
||||
|
||||
if (str[0] == '\'' && str.size() >= 3U && str.back() == '\'') {
|
||||
if (str[0] == '\'' && str.size() >= 3U && endsWith(str,'\'')) {
|
||||
return characterLiteralToLongNumber(str.substr(1,str.size()-2));
|
||||
}
|
||||
|
||||
|
@ -537,7 +538,7 @@ MathLib::bigint MathLib::toLongNumber(const std::string & str)
|
|||
|
||||
double MathLib::toDoubleNumber(const std::string &str)
|
||||
{
|
||||
if (str[0] == '\'' && str.size() >= 3U && str.back() == '\'')
|
||||
if (str[0] == '\'' && str.size() >= 3U && endsWith(str,'\''))
|
||||
return characterLiteralToLongNumber(str.substr(1,str.size()-2));
|
||||
if (isIntHex(str))
|
||||
return static_cast<double>(toLongNumber(str));
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#undef __STRICT_ANSI__
|
||||
#endif
|
||||
#include "path.h"
|
||||
#include "utils.h"
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
|
@ -227,7 +228,7 @@ std::string Path::getRelativePath(const std::string& absolutePath, const std::ve
|
|||
if (absolutePath == *i || i->empty()) // Seems to be a file, or path is empty
|
||||
continue;
|
||||
|
||||
bool endsWithSep = i->back() == '/';
|
||||
bool endsWithSep = endsWith(*i,'/');
|
||||
if (absolutePath.compare(0, i->length(), *i) == 0 && absolutePath[i->length() - (endsWithSep?1:0)] == '/') {
|
||||
std::string rest = absolutePath.substr(i->length() + (endsWithSep?0:1));
|
||||
return rest;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "pathmatch.h"
|
||||
#include "path.h"
|
||||
#include "utils.h"
|
||||
#include <algorithm>
|
||||
#include <ctype.h>
|
||||
|
||||
|
@ -43,8 +44,8 @@ bool PathMatch::Match(const std::string &path) const
|
|||
std::transform(findpath.begin(), findpath.end(), findpath.begin(), ::tolower);
|
||||
|
||||
// Filtering directory name
|
||||
if (excludedPath.back() == '/') {
|
||||
if (findpath.back() != '/')
|
||||
if (endsWith(excludedPath,'/')) {
|
||||
if (!endsWith(findpath,'/'))
|
||||
findpath = RemoveFilename(findpath);
|
||||
|
||||
if (excludedPath.length() > findpath.length())
|
||||
|
|
|
@ -74,9 +74,9 @@ void Token::update_property_info()
|
|||
_tokType = eName;
|
||||
} else if (std::isdigit((unsigned char)_str[0]) || (_str.length() > 1 && _str[0] == '-' && std::isdigit((unsigned char)_str[1])))
|
||||
_tokType = eNumber;
|
||||
else if (_str.length() > 1 && _str[0] == '"' && _str.back() == '"')
|
||||
else if (_str.length() > 1 && _str[0] == '"' && endsWith(_str,'"'))
|
||||
_tokType = eString;
|
||||
else if (_str.length() > 1 && _str[0] == '\'' && _str.back() == '\'')
|
||||
else if (_str.length() > 1 && _str[0] == '\'' && endsWith(_str,'\''))
|
||||
_tokType = eChar;
|
||||
else if (_str == "=" || _str == "<<=" || _str == ">>=" ||
|
||||
(_str.size() == 2U && _str[1] == '=' && std::strchr("+-*/%&^|", _str[0])))
|
||||
|
|
|
@ -1855,7 +1855,7 @@ void Tokenizer::combineOperators()
|
|||
}
|
||||
if (prev->isName() && prev->isUpperCaseName())
|
||||
continue;
|
||||
if (prev->isName() && prev->str().back() == ':')
|
||||
if (prev->isName() && endsWith(prev->str(), ':'))
|
||||
simplify = true;
|
||||
break;
|
||||
}
|
||||
|
@ -2648,7 +2648,7 @@ void Tokenizer::setVarIdPass1()
|
|||
(tok->str() == "(" && isFunctionHead(tok,"{")) ||
|
||||
(tok->str() == "(" && !scopeStack.top().isExecutable && isFunctionHead(tok,";:")) ||
|
||||
(tok->str() == "," && !scopeStack.top().isExecutable) ||
|
||||
(tok->isName() && tok->str().back() == ':'))) {
|
||||
(tok->isName() && endsWith(tok->str(), ':')))) {
|
||||
|
||||
// No variable declarations in sizeof
|
||||
if (Token::simpleMatch(tok->previous(), "sizeof (")) {
|
||||
|
@ -2662,7 +2662,7 @@ void Tokenizer::setVarIdPass1()
|
|||
const Token *tok2 = (tok->isName()) ? tok : tok->next();
|
||||
|
||||
// private: protected: public: etc
|
||||
while (tok2 && tok2->str().back() == ':') {
|
||||
while (tok2 && endsWith(tok2->str(), ':')) {
|
||||
tok2 = tok2->next();
|
||||
}
|
||||
if (!tok2)
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "preprocessor.h"
|
||||
#include "settings.h"
|
||||
#include "errorlogger.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
|
@ -301,8 +302,8 @@ bool TokenList::createTokens(std::istream &code, const std::string& file0)
|
|||
} else if (std::strchr("+-", ch) &&
|
||||
CurrentToken.length() > 0 &&
|
||||
std::isdigit((unsigned char)CurrentToken[0]) &&
|
||||
(CurrentToken.back() == 'e' ||
|
||||
CurrentToken.back() == 'E') &&
|
||||
(endsWith(CurrentToken,'e') ||
|
||||
endsWith(CurrentToken,'E')) &&
|
||||
!MathLib::isIntHex(CurrentToken)) {
|
||||
// Don't separate doubles "4.2e+10"
|
||||
} else if (CurrentToken.empty() && ch == '.' && std::isdigit((unsigned char)code.peek())) {
|
||||
|
|
|
@ -55,4 +55,8 @@ private:
|
|||
Cont data_;
|
||||
};
|
||||
|
||||
inline bool endsWith(const std::string &str, char c) {
|
||||
return str.back() == c;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue