diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2023-11-18 17:53:35 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2023-11-19 19:27:29 +0900 |
commit | c0a6f1b84c84749908961579b84513fd9f9d9eac (patch) | |
tree | ace7ba60cb031acd3a1f4ff10f7bbc5668fa801f /debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp | |
parent | 52e5ffe140f0f4402e97936447bc9a606045d2b5 (diff) | |
download | extra-dependencies-c0a6f1b84c84749908961579b84513fd9f9d9eac.tar.gz extra-dependencies-c0a6f1b84c84749908961579b84513fd9f9d9eac.zip |
uncrustify-trinity: updated based on upstream version 0.78.0
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp')
-rw-r--r-- | debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp b/debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp new file mode 100644 index 00000000..6950bc10 --- /dev/null +++ b/debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp @@ -0,0 +1,46 @@ +/** + * @file flag_decltype.cpp + * + * @license GPL v2+ + */ + +#include "chunk.h" + + +bool flag_cpp_decltype(Chunk *pc) +{ + LOG_FUNC_ENTRY(); + + if (pc->Is(CT_DECLTYPE)) + { + auto paren_open = pc->GetNextNcNnl(); + + if (paren_open->Is(CT_PAREN_OPEN)) + { + // We would like to simply call Chunk::SkipToMatch(), but it finds + // a match based on level, and the level is 0 for all chunks in some + // cases, like the following example. + // + // template <typename T> + // decltype(std::declval<T &>().put(foo), std::true_type()) + // has_something(Tag<2>); + // + // This means that IN_DECLTYPE is only set for tokens through the + // closing parenthesis right before ".put" in the above example. + // + // So, we will manually look for the matching closing parenthesis. + paren_open->SetFlagBits(PCF_IN_DECLTYPE); + pc = paren_open->GetNextNcNnl(); + + for (int level = 1; pc->IsNotNullChunk() && level > 0; pc = pc->GetNextNcNnl()) + { + level += pc->Is(CT_PAREN_OPEN); + level -= pc->Is(CT_PAREN_CLOSE); + pc->SetFlagBits(PCF_IN_DECLTYPE); + } + + return(pc->IsNotNullChunk()); + } + } + return(false); +} // mark_cpp_decltype |