From 7cb7eeec6300932b0d7980d07547645ae1282264 Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 25 Sep 2024 12:33:03 +0200 Subject: [PATCH 1/5] Preprocessor: made some members private --- lib/preprocessor.h | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/preprocessor.h b/lib/preprocessor.h index 97ac22d987d..812c33ba387 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,8 +119,6 @@ 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(); @@ -158,13 +147,23 @@ 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: + 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); From 02106780471e3fef37bec7758dbb0ec82f5c3b4b Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 25 Sep 2024 12:42:28 +0200 Subject: [PATCH 2/5] Preprocessor: made `setPlatformInfo()` a static function --- lib/cppcheck.cpp | 2 +- lib/preprocessor.cpp | 34 +++++++++++++++++----------------- lib/preprocessor.h | 2 +- test/testpreprocessor.cpp | 4 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index f05cdfc8248..7c4a577445f 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -777,7 +777,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string std::list directives = preprocessor.createDirectives(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..837e3b2c760 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -785,24 +785,24 @@ void Preprocessor::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) diff --git a/lib/preprocessor.h b/lib/preprocessor.h index 812c33ba387..51f5a56a0ae 100644 --- a/lib/preprocessor.h +++ b/lib/preprocessor.h @@ -123,7 +123,7 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { void removeComments(); - 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); diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 257749f882b..9e7dae0879c 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)); } } From a81d390bd6b0272efe682038094562fc0728f6a9 Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 25 Sep 2024 12:46:31 +0200 Subject: [PATCH 3/5] Preprocessor: made a `simplifyPragmaAsm()` parameter a reference --- lib/cppcheck.cpp | 2 +- lib/preprocessor.cpp | 10 +++++----- lib/preprocessor.h | 4 ++-- test/helpers.cpp | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 7c4a577445f..d89f9532185 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -775,7 +775,7 @@ 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, mSettings); diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 837e3b2c760..881835f203f 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -986,18 +986,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 +1032,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 51f5a56a0ae..eb40be5947a 100644 --- a/lib/preprocessor.h +++ b/lib/preprocessor.h @@ -138,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); @@ -154,7 +154,7 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { void reportOutput(const simplecpp::OutputList &outputList, bool showerror); - static void simplifyPragmaAsmPrivate(simplecpp::TokenList *tokenList); + static void simplifyPragmaAsmPrivate(simplecpp::TokenList &tokenList); /** * Include file types. diff --git a/test/helpers.cpp b/test/helpers.cpp index 633becd1e9b..3648cadcba8 100644 --- a/test/helpers.cpp +++ b/test/helpers.cpp @@ -140,7 +140,7 @@ std::map PreprocessorHelper::getcode(const Settings& s if (inlineSuppression) preprocessor.inlineSuppressions(tokens, *inlineSuppression); tokens.removeComments(); - preprocessor.simplifyPragmaAsm(&tokens); + preprocessor.simplifyPragmaAsm(tokens); preprocessor.removeComments(); preprocessor.reportOutput(outputList, true); From bef033cce9487df0bf9d3cda12194efebf519683 Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 25 Sep 2024 12:49:10 +0200 Subject: [PATCH 4/5] Preprocessor: made a `setPlatformInfo()` parameter a reference --- lib/cppcheck.cpp | 2 +- lib/preprocessor.cpp | 34 +++++++++++++++++----------------- lib/preprocessor.h | 2 +- test/testpreprocessor.cpp | 4 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index d89f9532185..baf919c77c0 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -777,7 +777,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string std::list directives = preprocessor.createDirectives(tokens1); preprocessor.simplifyPragmaAsm(tokens1); - Preprocessor::setPlatformInfo(&tokens1, mSettings); + Preprocessor::setPlatformInfo(tokens1, mSettings); // Get configurations.. std::set configurations; diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 881835f203f..e06c1557c90 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -785,24 +785,24 @@ void Preprocessor::removeComments() } } -void Preprocessor::setPlatformInfo(simplecpp::TokenList *tokens, const Settings& settings) +void Preprocessor::setPlatformInfo(simplecpp::TokenList &tokens, const Settings& settings) { - 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; + 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) diff --git a/lib/preprocessor.h b/lib/preprocessor.h index eb40be5947a..b490addcf81 100644 --- a/lib/preprocessor.h +++ b/lib/preprocessor.h @@ -123,7 +123,7 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { void removeComments(); - static void setPlatformInfo(simplecpp::TokenList *tokens, const Settings& settings); + 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); diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 9e7dae0879c..087479e1ce0 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -453,7 +453,7 @@ class TestPreprocessor : public TestFixture { // preprocess code with unix32 platform.. { const Settings settings = settingsBuilder().platform(Platform::Type::Unix32).build(); - Preprocessor::setPlatformInfo(&tokens, settings); + Preprocessor::setPlatformInfo(tokens, settings); Preprocessor preprocessor(settings, *this); ASSERT_EQUALS("\n1", preprocessor.getcode(tokens, "", files, false)); } @@ -461,7 +461,7 @@ class TestPreprocessor : public TestFixture { // preprocess code with unix64 platform.. { const Settings settings = settingsBuilder().platform(Platform::Type::Unix64).build(); - Preprocessor::setPlatformInfo(&tokens, settings); + Preprocessor::setPlatformInfo(tokens, settings); Preprocessor preprocessor(settings, *this); ASSERT_EQUALS("\n\n\n2", preprocessor.getcode(tokens, "", files, false)); } From 2a8f1ab1a32017254a061b864785781cbab34149 Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 25 Sep 2024 13:03:20 +0200 Subject: [PATCH 5/5] Preprocessor: aligned `removeComments()` with the other functions --- lib/cppcheck.cpp | 3 +-- lib/preprocessor.cpp | 3 ++- lib/preprocessor.h | 2 +- test/helpers.cpp | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index baf919c77c0..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 diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index e06c1557c90..bca0dec7670 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -777,8 +777,9 @@ 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(); diff --git a/lib/preprocessor.h b/lib/preprocessor.h index b490addcf81..3086ca4cb0a 100644 --- a/lib/preprocessor.h +++ b/lib/preprocessor.h @@ -121,7 +121,7 @@ class CPPCHECKLIB WARN_UNUSED Preprocessor { bool loadFiles(const simplecpp::TokenList &rawtokens, std::vector &files); - void removeComments(); + void removeComments(simplecpp::TokenList &tokens); static void setPlatformInfo(simplecpp::TokenList &tokens, const Settings& settings); diff --git a/test/helpers.cpp b/test/helpers.cpp index 3648cadcba8..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.removeComments(tokens); preprocessor.simplifyPragmaAsm(tokens); - preprocessor.removeComments(); preprocessor.reportOutput(outputList, true);