[geany/geany] 96d5ee: Merge pull request #544 from b4n/cxx11-override
Colomban Wendling
git-noreply at xxxxx
Wed Jul 8 16:04:05 UTC 2015
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Wed, 08 Jul 2015 16:04:05 UTC
Commit: 96d5eec50f35b9daeb7da882ed6b98ff47edaf17
https://github.com/geany/geany/commit/96d5eec50f35b9daeb7da882ed6b98ff47edaf17
Log Message:
-----------
Merge pull request #544 from b4n/cxx11-override
c++: Properly parse C++11 overrides, finals and noexcepts
Modified Paths:
--------------
tagmanager/ctags/c.c
tests/ctags/Makefile.am
tests/ctags/cxx11-final.cpp
tests/ctags/cxx11-final.cpp.tags
tests/ctags/cxx11-noexcept.cpp
tests/ctags/cxx11-noexcept.cpp.tags
tests/ctags/cxx11-override.cpp
tests/ctags/cxx11-override.cpp.tags
tests/ctags/cxx14-combined.cpp
tests/ctags/cxx14-combined.cpp.tags
Modified: tagmanager/ctags/c.c
31 lines changed, 20 insertions(+), 11 deletions(-)
===================================================================
@@ -76,7 +76,7 @@ typedef enum eKeywordId
KEYWORD_LOCAL, KEYWORD_LONG,
KEYWORD_M_BAD_STATE, KEYWORD_M_BAD_TRANS, KEYWORD_M_STATE, KEYWORD_M_TRANS,
KEYWORD_MODULE, KEYWORD_MUTABLE,
- KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE,
+ KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE, KEYWORD_NOEXCEPT,
KEYWORD_OPERATOR, KEYWORD_OUT, KEYWORD_OUTPUT, KEYWORD_OVERLOAD, KEYWORD_OVERRIDE,
KEYWORD_PACKED, KEYWORD_PORT, KEYWORD_PACKAGE, KEYWORD_PRIVATE,
KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC,
@@ -425,7 +425,7 @@ static const keywordDesc KeywordTable [] = {
{ "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1, 0, 0 } },
{ "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1, 1, 0 } },
{ "extern", KEYWORD_NAMESPACE, { 0, 0, 0, 0, 0, 0, 1 } }, /* parse block */
- { "final", KEYWORD_FINAL, { 0, 1, 0, 1, 0, 0, 1 } },
+ { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0, 0, 1 } },
{ "finally", KEYWORD_FINALLY, { 0, 0, 0, 0, 0, 1, 1 } },
{ "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0, 1, 1 } },
{ "for", KEYWORD_FOR, { 1, 1, 1, 1, 0, 1, 1 } },
@@ -457,6 +457,7 @@ static const keywordDesc KeywordTable [] = {
{ "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0, 0, 0 } },
{ "new", KEYWORD_NEW, { 0, 1, 1, 1, 0, 1, 1 } },
{ "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1, 0, 0 } },
+ { "noexcept", KEYWORD_NOEXCEPT, { 0, 1, 0, 0, 0, 0, 0 } },
{ "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0, 0, 0 } },
{ "out", KEYWORD_OUT, { 0, 0, 0, 0, 0, 1, 1 } },
{ "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1, 0, 0 } },
@@ -2242,6 +2243,7 @@ static boolean skipPostArgumentStuff (statementInfo *const st,
case KEYWORD_ATTRIBUTE: skipParens (); break;
case KEYWORD_THROW: skipParens (); break;
case KEYWORD_CONST: break;
+ case KEYWORD_NOEXCEPT: break;
case KEYWORD_TRY: break;
case KEYWORD_VOLATILE: break;
@@ -2262,7 +2264,13 @@ static boolean skipPostArgumentStuff (statementInfo *const st,
break;
default:
- if (isType (token, TOKEN_NONE))
+ /* "override" and "final" are only keywords in the declaration of a virtual
+ * member function, so need to be handled specially, not as keywords */
+ if (isLanguage(Lang_cpp) && isType (token, TOKEN_NAME) &&
+ (strcmp ("override", vStringValue (token->name)) == 0 ||
+ strcmp ("final", vStringValue (token->name)) == 0))
+ ;
+ else if (isType (token, TOKEN_NONE))
;
else if (info->isKnrParamList && info->parameterCount > 0)
++elementCount;
@@ -2969,7 +2977,15 @@ static void tagCheck (statementInfo *const st)
tokenInfo *name_token = (tokenInfo *)prev;
boolean free_name_token = FALSE;
- if (isType (name_token, TOKEN_NAME))
+ /* C++ 11 allows class <name> final { ... } */
+ if (isLanguage (Lang_cpp) && isType (prev, TOKEN_NAME) &&
+ strcmp("final", vStringValue(prev->name)) == 0 &&
+ isType(prev2, TOKEN_NAME))
+ {
+ name_token = (tokenInfo *)prev2;
+ copyToken (st->blockName, name_token);
+ }
+ else if (isType (name_token, TOKEN_NAME))
{
if (!isLanguage (Lang_vala))
copyToken (st->blockName, name_token);
@@ -2994,13 +3010,6 @@ static void tagCheck (statementInfo *const st)
}
}
}
- /* C++ 11 allows class <name> final { ... } */
- else if (isLanguage (Lang_cpp) && isType (prev, TOKEN_KEYWORD) &&
- prev->keyword == KEYWORD_FINAL && isType(prev2, TOKEN_NAME))
- {
- name_token = (tokenInfo *)prev2;
- copyToken (st->blockName, name_token);
- }
else if (isLanguage (Lang_csharp))
makeTag (prev, st, FALSE, TAG_PROPERTY);
else
Modified: tests/ctags/Makefile.am
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -132,6 +132,10 @@ test_sources = \
cython_sample.pyx \
cython_sample2.pyx \
cxx11enum.cpp \
+ cxx11-final.cpp \
+ cxx11-noexcept.cpp \
+ cxx11-override.cpp \
+ cxx14-combined.cpp \
db-trig.sql \
debian_432872.f90 \
directives.c \
Modified: tests/ctags/cxx11-final.cpp
23 lines changed, 23 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,23 @@
+class Base
+{
+public:
+ virtual void foo() = 0;
+};
+
+class Derived final : public Base
+{
+ virtual void foo() final;
+ virtual void final();
+};
+
+void Base::foo()
+{
+}
+
+void Derived::foo()
+{
+}
+
+void Derived::final()
+{
+}
Modified: tests/ctags/cxx11-final.cpp.tags
9 lines changed, 9 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,9 @@
+# format=tagmanager
+Base�1�0
+Derived�1�0
+final�16�()�Derived�0�void
+final�1024�()�Derived�0�virtual void
+foo�16�()�Base�0�void
+foo�16�()�Derived�0�void
+foo�1024�()�Base�0�virtual void
+foo�1024�()�Derived�0�virtual void
Modified: tests/ctags/cxx11-noexcept.cpp
7 lines changed, 7 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,7 @@
+class Base
+{
+public:
+ virtual void foo() noexcept = 0;
+ virtual void bar() const noexcept = 0;
+ int baz() noexcept { return 42; }
+};
Modified: tests/ctags/cxx11-noexcept.cpp.tags
5 lines changed, 5 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,5 @@
+# format=tagmanager
+Base�1�0
+bar�1024�()�Base�0�virtual void
+baz�16�()�Base�0�int
+foo�1024�()�Base�0�virtual void
Modified: tests/ctags/cxx11-override.cpp
23 lines changed, 23 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,23 @@
+class Base
+{
+public:
+ virtual void foo() = 0;
+};
+
+class Derived : public Base
+{
+ virtual void foo() override;
+ virtual void override();
+};
+
+void Base::foo()
+{
+}
+
+void Derived::foo()
+{
+}
+
+void Derived::override()
+{
+}
Modified: tests/ctags/cxx11-override.cpp.tags
9 lines changed, 9 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,9 @@
+# format=tagmanager
+Base�1�0
+Derived�1�0
+foo�16�()�Base�0�void
+foo�16�()�Derived�0�void
+foo�1024�()�Base�0�virtual void
+foo�1024�()�Derived�0�virtual void
+override�16�()�Derived�0�void
+override�1024�()�Derived�0�virtual void
Modified: tests/ctags/cxx14-combined.cpp
8 lines changed, 8 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,8 @@
+struct Base {
+ virtual void baz() const throw() = 0;
+};
+
+struct Foo final : public Base {
+ static constexpr auto bar() noexcept { return 1; }
+ virtual void baz() const throw() final override;
+};
Modified: tests/ctags/cxx14-combined.cpp.tags
6 lines changed, 6 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,6 @@
+# format=tagmanager
+Base�2048�0
+Foo�2048�0
+bar�16�()�Foo�0�constexpr
+baz�1024�()�Base�0�virtual void
+baz�1024�()�Foo�0�virtual void
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list