Fixed #3405 ((error) Invalid number of character ({) when these macros are def ined: 'WIN32'.)
This commit is contained in:
parent
4cad5d4df4
commit
34fba9e1ea
|
@ -1779,7 +1779,7 @@ std::string Preprocessor::handleIncludes(const std::string &code, const std::str
|
||||||
|
|
||||||
if (line.compare(0,7,"#ifdef ") == 0) {
|
if (line.compare(0,7,"#ifdef ") == 0) {
|
||||||
if (indent == indentmatch) {
|
if (indent == indentmatch) {
|
||||||
std::string tag = getdef(line,true);
|
const std::string tag = getdef(line,true);
|
||||||
if (defs.find(tag) != defs.end()) {
|
if (defs.find(tag) != defs.end()) {
|
||||||
elseIsTrue = false;
|
elseIsTrue = false;
|
||||||
indentmatch++;
|
indentmatch++;
|
||||||
|
@ -1795,7 +1795,7 @@ std::string Preprocessor::handleIncludes(const std::string &code, const std::str
|
||||||
elseIsTrue = true;
|
elseIsTrue = true;
|
||||||
} else if (line.compare(0,8,"#ifndef ") == 0) {
|
} else if (line.compare(0,8,"#ifndef ") == 0) {
|
||||||
if (indent == indentmatch) {
|
if (indent == indentmatch) {
|
||||||
std::string tag = getdef(line,false);
|
const std::string tag = getdef(line,false);
|
||||||
if (defs.find(tag) == defs.end()) {
|
if (defs.find(tag) == defs.end()) {
|
||||||
elseIsTrue = false;
|
elseIsTrue = false;
|
||||||
indentmatch++;
|
indentmatch++;
|
||||||
|
@ -1804,11 +1804,12 @@ std::string Preprocessor::handleIncludes(const std::string &code, const std::str
|
||||||
indentmatch++;
|
indentmatch++;
|
||||||
suppressCurrentCodePath = false;
|
suppressCurrentCodePath = false;
|
||||||
}
|
}
|
||||||
++indent;
|
|
||||||
|
|
||||||
if (indent == indentmatch + 1)
|
|
||||||
elseIsTrue = true;
|
|
||||||
}
|
}
|
||||||
|
++indent;
|
||||||
|
|
||||||
|
if (indent == indentmatch + 1)
|
||||||
|
elseIsTrue = true;
|
||||||
|
|
||||||
} else if (!suppressCurrentCodePath && line.compare(0,4,"#if ") == 0) {
|
} else if (!suppressCurrentCodePath && line.compare(0,4,"#if ") == 0) {
|
||||||
if (indent == indentmatch && match_cfg_def(defs, line.substr(4))) {
|
if (indent == indentmatch && match_cfg_def(defs, line.substr(4))) {
|
||||||
elseIsTrue = false;
|
elseIsTrue = false;
|
||||||
|
|
|
@ -234,6 +234,7 @@ private:
|
||||||
// Defines are given: test Preprocessor::handleIncludes
|
// Defines are given: test Preprocessor::handleIncludes
|
||||||
TEST_CASE(def_handleIncludes);
|
TEST_CASE(def_handleIncludes);
|
||||||
TEST_CASE(def_missingInclude);
|
TEST_CASE(def_missingInclude);
|
||||||
|
TEST_CASE(def_handleIncludes_ifelse); // problems in handleIncludes for #else
|
||||||
|
|
||||||
// Using -U to undefine symbols
|
// Using -U to undefine symbols
|
||||||
TEST_CASE(undef1);
|
TEST_CASE(undef1);
|
||||||
|
@ -3043,6 +3044,48 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void def_handleIncludes_ifelse() {
|
||||||
|
const std::string filePath("test.c");
|
||||||
|
const std::list<std::string> includePaths;
|
||||||
|
std::map<std::string,std::string> defs;
|
||||||
|
Preprocessor preprocessor(NULL, this);
|
||||||
|
|
||||||
|
// #3405
|
||||||
|
{
|
||||||
|
defs.clear();
|
||||||
|
defs["A"] = "";
|
||||||
|
const std::string code("\n#ifndef PAL_UTIL_UTILS_H_\n"
|
||||||
|
"#define PAL_UTIL_UTILS_H_\n"
|
||||||
|
"1\n"
|
||||||
|
"#ifndef USE_BOOST\n"
|
||||||
|
"2\n"
|
||||||
|
"#else\n"
|
||||||
|
"3\n"
|
||||||
|
"#endif\n"
|
||||||
|
"4\n"
|
||||||
|
"#endif\n"
|
||||||
|
"\n"
|
||||||
|
"#ifndef PAL_UTIL_UTILS_H_\n"
|
||||||
|
"#define PAL_UTIL_UTILS_H_\n"
|
||||||
|
"5\n"
|
||||||
|
"#ifndef USE_BOOST\n"
|
||||||
|
"6\n"
|
||||||
|
"#else\n"
|
||||||
|
"7\n"
|
||||||
|
"#endif\n"
|
||||||
|
"8\n"
|
||||||
|
"#endif\n"
|
||||||
|
"\n");
|
||||||
|
std::string actual(preprocessor.handleIncludes(code,filePath,includePaths,defs));
|
||||||
|
|
||||||
|
// the 1,2,4 should be in the result
|
||||||
|
actual.erase(0, actual.find("1"));
|
||||||
|
while (actual.find("\n") != std::string::npos)
|
||||||
|
actual.erase(actual.find("\n"),1);
|
||||||
|
ASSERT_EQUALS("124", actual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void undef1() {
|
void undef1() {
|
||||||
Settings settings;
|
Settings settings;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue