Preprocessor: set platform info
This commit is contained in:
parent
90faa80590
commit
2feb86a6af
|
@ -115,6 +115,8 @@ unsigned int CppCheck::processFile(const std::string& filename, std::istream& fi
|
|||
// Get directives
|
||||
preprocessor.setDirectives(tokens1);
|
||||
|
||||
preprocessor.setPlatformInfo(&tokens1);
|
||||
|
||||
// Get configurations..
|
||||
if (_settings.userDefines.empty() || _settings.force) {
|
||||
Timer t("Preprocessor::getConfigs", _settings.showtime, &S_timerResults);
|
||||
|
|
|
@ -440,6 +440,26 @@ void Preprocessor::removeComments()
|
|||
}
|
||||
}
|
||||
|
||||
void Preprocessor::setPlatformInfo(simplecpp::TokenList *tokens) const
|
||||
{
|
||||
tokens->sizeOfType["bool"] = _settings.sizeof_bool;
|
||||
tokens->sizeOfType["short"] = _settings.sizeof_short;
|
||||
tokens->sizeOfType["int"] = _settings.sizeof_int;
|
||||
tokens->sizeOfType["long"] = _settings.sizeof_long;
|
||||
tokens->sizeOfType["long long"] = _settings.sizeof_long_long;
|
||||
tokens->sizeOfType["float"] = _settings.sizeof_float;
|
||||
tokens->sizeOfType["double"] = _settings.sizeof_double;
|
||||
tokens->sizeOfType["long double"] = _settings.sizeof_long_double;
|
||||
tokens->sizeOfType["bool *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["short *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["int *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["long *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["long long *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["float *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["double *"] = _settings.sizeof_pointer;
|
||||
tokens->sizeOfType["long double *"] = _settings.sizeof_pointer;
|
||||
}
|
||||
|
||||
std::string Preprocessor::getcode(const simplecpp::TokenList &tokens1, const std::string &cfg, std::vector<std::string> &files, const bool writeLocations)
|
||||
{
|
||||
const std::string filename(files[0]);
|
||||
|
|
|
@ -96,6 +96,7 @@ public:
|
|||
|
||||
void removeComments();
|
||||
|
||||
void setPlatformInfo(simplecpp::TokenList *tokens) const;
|
||||
|
||||
/**
|
||||
* Extract the code for each configuration
|
||||
|
|
|
@ -103,6 +103,8 @@ private:
|
|||
TEST_CASE(error4); // #2919 - wrong filename is reported
|
||||
TEST_CASE(error5);
|
||||
|
||||
TEST_CASE(setPlatformInfo);
|
||||
|
||||
// Handling include guards (don't create extra configuration for it)
|
||||
TEST_CASE(includeguard1);
|
||||
TEST_CASE(includeguard2);
|
||||
|
@ -633,6 +635,31 @@ private:
|
|||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void setPlatformInfo() {
|
||||
Settings settings;
|
||||
Preprocessor preprocessor(settings, this);
|
||||
|
||||
// read code with simplecpp..
|
||||
const char filedata[] = "#if sizeof(long) == 4\n"
|
||||
"1\n"
|
||||
"#else\n"
|
||||
"2\n"
|
||||
"#endif\n";
|
||||
std::istringstream istr(filedata);
|
||||
std::vector<std::string> files;
|
||||
simplecpp::TokenList tokens(istr, files, "test.c");
|
||||
|
||||
// preprocess code with unix32 platform..
|
||||
settings.platform(Settings::PlatformType::Unix32);
|
||||
preprocessor.setPlatformInfo(&tokens);
|
||||
ASSERT_EQUALS("\n1", preprocessor.getcode(tokens, "", files, false));
|
||||
|
||||
// preprocess code with unix64 platform..
|
||||
settings.platform(Settings::PlatformType::Unix64);
|
||||
preprocessor.setPlatformInfo(&tokens);
|
||||
ASSERT_EQUALS("\n\n\n2", preprocessor.getcode(tokens, "", files, false));
|
||||
}
|
||||
|
||||
void includeguard1() {
|
||||
// Handling include guards..
|
||||
const char filedata[] = "#file \"abc.h\"\n"
|
||||
|
|
Loading…
Reference in New Issue