diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index f05cdfc8248..0cdcc8f15cb 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -734,8 +734,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string mSettings.supprs.nomsg.dump(oss); dumpProlog += oss.str(); } - tokens1.removeComments(); - preprocessor.removeComments(); + preprocessor.removeComments(tokens1); if (!mSettings.buildDir.empty()) { // Get toolinfo @@ -775,9 +774,9 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string // Get directives std::list directives = preprocessor.createDirectives(tokens1); - preprocessor.simplifyPragmaAsm(&tokens1); + preprocessor.simplifyPragmaAsm(tokens1); - preprocessor.setPlatformInfo(&tokens1); + Preprocessor::setPlatformInfo(tokens1, mSettings); // Get configurations.. std::set configurations; diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 8bd20afb784..bca0dec7670 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -777,32 +777,33 @@ bool Preprocessor::loadFiles(const simplecpp::TokenList &rawtokens, std::vector< return !hasErrors(outputList); } -void Preprocessor::removeComments() +void Preprocessor::removeComments(simplecpp::TokenList &tokens) { + tokens.removeComments(); for (std::pair& tokenList : mTokenLists) { if (tokenList.second) tokenList.second->removeComments(); } } -void Preprocessor::setPlatformInfo(simplecpp::TokenList *tokens) const +void Preprocessor::setPlatformInfo(simplecpp::TokenList &tokens, const Settings& settings) { - tokens->sizeOfType["bool"] = mSettings.platform.sizeof_bool; - tokens->sizeOfType["short"] = mSettings.platform.sizeof_short; - tokens->sizeOfType["int"] = mSettings.platform.sizeof_int; - tokens->sizeOfType["long"] = mSettings.platform.sizeof_long; - tokens->sizeOfType["long long"] = mSettings.platform.sizeof_long_long; - tokens->sizeOfType["float"] = mSettings.platform.sizeof_float; - tokens->sizeOfType["double"] = mSettings.platform.sizeof_double; - tokens->sizeOfType["long double"] = mSettings.platform.sizeof_long_double; - tokens->sizeOfType["bool *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["short *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["int *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["long *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["long long *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["float *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["double *"] = mSettings.platform.sizeof_pointer; - tokens->sizeOfType["long double *"] = mSettings.platform.sizeof_pointer; + tokens.sizeOfType["bool"] = settings.platform.sizeof_bool; + tokens.sizeOfType["short"] = settings.platform.sizeof_short; + tokens.sizeOfType["int"] = settings.platform.sizeof_int; + tokens.sizeOfType["long"] = settings.platform.sizeof_long; + tokens.sizeOfType["long long"] = settings.platform.sizeof_long_long; + tokens.sizeOfType["float"] = settings.platform.sizeof_float; + tokens.sizeOfType["double"] = settings.platform.sizeof_double; + tokens.sizeOfType["long double"] = settings.platform.sizeof_long_double; + tokens.sizeOfType["bool *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["short *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["int *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["long *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["long long *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["float *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["double *"] = settings.platform.sizeof_pointer; + tokens.sizeOfType["long double *"] = settings.platform.sizeof_pointer; } simplecpp::TokenList Preprocessor::preprocess(const simplecpp::TokenList &tokens1, const std::string &cfg, std::vector &files, bool throwError) @@ -986,18 +987,18 @@ std::size_t Preprocessor::calculateHash(const simplecpp::TokenList &tokens1, con return (std::hash{})(hashData); } -void Preprocessor::simplifyPragmaAsm(simplecpp::TokenList *tokenList) const +void Preprocessor::simplifyPragmaAsm(simplecpp::TokenList &tokenList) const { Preprocessor::simplifyPragmaAsmPrivate(tokenList); for (const std::pair& list : mTokenLists) { - Preprocessor::simplifyPragmaAsmPrivate(list.second); + Preprocessor::simplifyPragmaAsmPrivate(*list.second); } } -void Preprocessor::simplifyPragmaAsmPrivate(simplecpp::TokenList *tokenList) +void Preprocessor::simplifyPragmaAsmPrivate(simplecpp::TokenList &tokenList) { // assembler code.. - for (simplecpp::Token *tok = tokenList->front(); tok; tok = tok->next) { + for (simplecpp::Token *tok = tokenList.front(); tok; tok = tok->next) { if (tok->op != '#') continue; if (sameline(tok, tok->previousSkipComments())) @@ -1032,7 +1033,7 @@ void Preprocessor::simplifyPragmaAsmPrivate(simplecpp::TokenList *tokenList) const_cast(tok3)->setstr(")"); const_cast(tok4)->setstr(";"); while (tok4->next != endasm) - tokenList->deleteToken(tok4->next); + tokenList.deleteToken(tok4->next); } } diff --git a/lib/preprocessor.h b/lib/preprocessor.h index 97ac22d987d..3086ca4cb0a 100644 --- a/lib/preprocessor.h +++ b/lib/preprocessor.h @@ -105,15 +105,6 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { friend class TestUnusedVar; public: - - /** - * Include file types. - */ - enum HeaderTypes : std::uint8_t { - UserHeader = 1, - SystemHeader - }; - /** character that is inserted in expanded macros */ static char macroChar; @@ -128,13 +119,11 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { std::vector getRemarkComments(const simplecpp::TokenList &tokens) const; - void handleErrors(const simplecpp::OutputList &outputList, bool throwError); - bool loadFiles(const simplecpp::TokenList &rawtokens, std::vector &files); - void removeComments(); + void removeComments(simplecpp::TokenList &tokens); - void setPlatformInfo(simplecpp::TokenList *tokens) const; + static void setPlatformInfo(simplecpp::TokenList &tokens, const Settings& settings); simplecpp::TokenList preprocess(const simplecpp::TokenList &tokens1, const std::string &cfg, std::vector &files, bool throwError = false); @@ -149,7 +138,7 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { */ std::size_t calculateHash(const simplecpp::TokenList &tokens1, const std::string &toolinfo) const; - void simplifyPragmaAsm(simplecpp::TokenList *tokenList) const; + void simplifyPragmaAsm(simplecpp::TokenList &tokenList) const; static void getErrorMessages(ErrorLogger &errorLogger, const Settings &settings); @@ -158,12 +147,22 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { */ void dump(std::ostream &out) const; - void reportOutput(const simplecpp::OutputList &outputList, bool showerror); - static bool hasErrors(const simplecpp::Output &output); private: - static void simplifyPragmaAsmPrivate(simplecpp::TokenList *tokenList); + void handleErrors(const simplecpp::OutputList &outputList, bool throwError); + + void reportOutput(const simplecpp::OutputList &outputList, bool showerror); + + static void simplifyPragmaAsmPrivate(simplecpp::TokenList &tokenList); + + /** + * Include file types. + */ + enum HeaderTypes : std::uint8_t { + UserHeader = 1, + SystemHeader + }; void missingInclude(const std::string &filename, unsigned int linenr, const std::string &header, HeaderTypes headerType); void error(const std::string &filename, unsigned int linenr, const std::string &msg); diff --git a/test/helpers.cpp b/test/helpers.cpp index 633becd1e9b..1fe429cfb98 100644 --- a/test/helpers.cpp +++ b/test/helpers.cpp @@ -139,9 +139,8 @@ std::map PreprocessorHelper::getcode(const Settings& s Preprocessor preprocessor(settings, errorlogger); if (inlineSuppression) preprocessor.inlineSuppressions(tokens, *inlineSuppression); - tokens.removeComments(); - preprocessor.simplifyPragmaAsm(&tokens); - preprocessor.removeComments(); + preprocessor.removeComments(tokens); + preprocessor.simplifyPragmaAsm(tokens); preprocessor.reportOutput(outputList, true); diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 257749f882b..087479e1ce0 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -453,16 +453,16 @@ class TestPreprocessor : public TestFixture { // preprocess code with unix32 platform.. { const Settings settings = settingsBuilder().platform(Platform::Type::Unix32).build(); + Preprocessor::setPlatformInfo(tokens, settings); Preprocessor preprocessor(settings, *this); - preprocessor.setPlatformInfo(&tokens); ASSERT_EQUALS("\n1", preprocessor.getcode(tokens, "", files, false)); } // preprocess code with unix64 platform.. { const Settings settings = settingsBuilder().platform(Platform::Type::Unix64).build(); + Preprocessor::setPlatformInfo(tokens, settings); Preprocessor preprocessor(settings, *this); - preprocessor.setPlatformInfo(&tokens); ASSERT_EQUALS("\n\n\n2", preprocessor.getcode(tokens, "", files, false)); } }