summaryrefslogtreecommitdiffstats
path: root/debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2023-11-18 17:53:35 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2023-11-19 19:27:29 +0900
commitc0a6f1b84c84749908961579b84513fd9f9d9eac (patch)
treeace7ba60cb031acd3a1f4ff10f7bbc5668fa801f /debian/uncrustify-trinity/uncrustify-trinity-0.78.0/src/flag_decltype.cpp
parent52e5ffe140f0f4402e97936447bc9a606045d2b5 (diff)
downloadextra-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.cpp46
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