Bump simplecpp

This commit is contained in:
Daniel Marjamäki 2017-05-26 16:45:07 +02:00
parent 45ba1ff1e3
commit a1081f961c
1 changed files with 78 additions and 75 deletions

View File

@ -43,91 +43,90 @@
#define SIMPLECPP_WINDOWS
#endif
static bool isHex(const std::string &s) {
static bool isHex(const std::string &s)
{
return s.size()>2 && (s.compare(0,2,"0x")==0 || s.compare(0,2,"0X")==0);
}
namespace {
const simplecpp::TokenString DEFINE("define");
const simplecpp::TokenString UNDEF("undef");
const simplecpp::TokenString INCLUDE("include");
static const simplecpp::TokenString DEFINE("define");
static const simplecpp::TokenString UNDEF("undef");
const simplecpp::TokenString ERROR("error");
const simplecpp::TokenString WARNING("warning");
static const simplecpp::TokenString INCLUDE("include");
const simplecpp::TokenString IF("if");
const simplecpp::TokenString IFDEF("ifdef");
const simplecpp::TokenString IFNDEF("ifndef");
const simplecpp::TokenString DEFINED("defined");
const simplecpp::TokenString ELSE("else");
const simplecpp::TokenString ELIF("elif");
const simplecpp::TokenString ENDIF("endif");
static const simplecpp::TokenString ERROR("error");
static const simplecpp::TokenString WARNING("warning");
const simplecpp::TokenString PRAGMA("pragma");
const simplecpp::TokenString ONCE("once");
static const simplecpp::TokenString IF("if");
static const simplecpp::TokenString IFDEF("ifdef");
static const simplecpp::TokenString IFNDEF("ifndef");
static const simplecpp::TokenString DEFINED("defined");
static const simplecpp::TokenString ELSE("else");
static const simplecpp::TokenString ELIF("elif");
static const simplecpp::TokenString ENDIF("endif");
template<class T> std::string toString(T t)
{
std::ostringstream ostr;
ostr << t;
return ostr.str();
}
static const simplecpp::TokenString PRAGMA("pragma");
static const simplecpp::TokenString ONCE("once");
long long stringToLL(const std::string &s)
{
long long ret;
const bool hex = isHex(s);
std::istringstream istr(hex ? s.substr(2) : s);
if (hex)
istr >> std::hex;
istr >> ret;
return ret;
}
template<class T> static std::string toString(T t)
{
std::ostringstream ostr;
ostr << t;
return ostr.str();
}
unsigned long long stringToULL(const std::string &s)
{
unsigned long long ret;
const bool hex = isHex(s);
std::istringstream istr(hex ? s.substr(2) : s);
if (hex)
istr >> std::hex;
istr >> ret;
return ret;
}
static long long stringToLL(const std::string &s)
{
long long ret;
const bool hex = isHex(s);
std::istringstream istr(hex ? s.substr(2) : s);
if (hex)
istr >> std::hex;
istr >> ret;
return ret;
}
bool startsWith(const std::string &str, const std::string &s)
{
return (str.size() >= s.size() && str.compare(0, s.size(), s) == 0);
}
static unsigned long long stringToULL(const std::string &s)
{
unsigned long long ret;
const bool hex = isHex(s);
std::istringstream istr(hex ? s.substr(2) : s);
if (hex)
istr >> std::hex;
istr >> ret;
return ret;
}
bool endsWith(const std::string &s, const std::string &e)
{
return (s.size() >= e.size() && s.compare(s.size() - e.size(), e.size(), e) == 0);
}
static bool startsWith(const std::string &str, const std::string &s)
{
return (str.size() >= s.size() && str.compare(0, s.size(), s) == 0);
}
bool sameline(const simplecpp::Token *tok1, const simplecpp::Token *tok2)
{
return tok1 && tok2 && tok1->location.sameline(tok2->location);
}
static bool endsWith(const std::string &s, const std::string &e)
{
return (s.size() >= e.size() && s.compare(s.size() - e.size(), e.size(), e) == 0);
}
static bool sameline(const simplecpp::Token *tok1, const simplecpp::Token *tok2)
{
return tok1 && tok2 && tok1->location.sameline(tok2->location);
}
static bool isAlternativeBinaryOp(const simplecpp::Token *tok, const std::string &alt)
{
return (tok->name &&
tok->str == alt &&
tok->previous &&
tok->next &&
(tok->previous->number || tok->previous->name || tok->previous->op == ')') &&
(tok->next->number || tok->next->name || tok->next->op == '('));
}
static bool isAlternativeBinaryOp(const simplecpp::Token *tok, const std::string &alt)
{
return (tok->name &&
tok->str == alt &&
tok->previous &&
tok->next &&
(tok->previous->number || tok->previous->name || tok->previous->op == ')') &&
(tok->next->number || tok->next->name || tok->next->op == '('));
}
static bool isAlternativeUnaryOp(const simplecpp::Token *tok, const std::string &alt)
{
return ((tok->name && tok->str == alt) &&
(!tok->previous || tok->previous->op == '(') &&
(tok->next && (tok->next->name || tok->next->number)));
}
static bool isAlternativeUnaryOp(const simplecpp::Token *tok, const std::string &alt)
{
return ((tok->name && tok->str == alt) &&
(!tok->previous || tok->previous->op == '(') &&
(tok->next && (tok->next->name || tok->next->number)));
}
void simplecpp::Location::adjust(const std::string &str)
@ -353,7 +352,7 @@ static unsigned short getAndSkipBOM(std::istream &istr)
return 0;
}
bool isNameChar(unsigned char ch)
static bool isNameChar(unsigned char ch)
{
return std::isalnum(ch) || ch == '_' || ch == '$';
}
@ -591,12 +590,12 @@ void simplecpp::TokenList::constFold()
}
}
static bool isFloatSuffix(const simplecpp::Token *tok) {
if (!tok || tok->str.size() > 2)
static bool isFloatSuffix(const simplecpp::Token *tok)
{
if (!tok || tok->str.size() != 1U)
return false;
std::string s = tok->str;
std::transform(s.begin(), s.end(), s.begin(), static_cast<int (*)(int)>(std::tolower));
return s == "lf" || s == "f";
const char c = std::tolower(tok->str[0]);
return c == 'f' || c == 'l';
}
void simplecpp::TokenList::combineOperators()
@ -1661,6 +1660,10 @@ namespace simplecpp {
std::ostringstream ostr;
std::string::size_type sep = 0;
while ((sep = f.find_first_of("\\/", sep + 1U)) != std::string::npos) {
if (sep >= 2 && f.compare(sep-2,2,"..",0,2) == 0) {
ostr << "../";
continue;
}
buf[sep] = 0;
if (!realFileName(buf,ostr))
return f;