changeset 10396:0bbbe99c8432 v8.0.0092

commit https://github.com/vim/vim/commit/ca8b8d6956dd881de6446fc32c38e817a364a6cc Author: Bram Moolenaar <Bram@vim.org> Date: Thu Nov 17 21:30:27 2016 +0100 patch 8.0.0092 Problem: C indenting does not support nested namespaces that C++ 17 has. Solution: Add check that passes double colon inside a name. (Pauli, closes https://github.com/vim/vim/issues/1214)
author Christian Brabandt <cb@256bit.org>
date Thu, 17 Nov 2016 21:45:04 +0100
parents 077bd2c97dd4
children 91f658e6022f
files src/misc1.c src/testdir/test3.in src/testdir/test3.ok src/version.c
diffstat 4 files changed, 51 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -5762,6 +5762,7 @@ cin_is_cpp_namespace(char_u *s)
 {
     char_u	*p;
     int		has_name = FALSE;
+    int		has_name_start = FALSE;
 
     s = cin_skipcomment(s);
     if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
@@ -5780,10 +5781,18 @@ cin_is_cpp_namespace(char_u *s)
 	    }
 	    else if (vim_iswordc(*p))
 	    {
+		has_name_start = TRUE;
 		if (has_name)
 		    return FALSE; /* word character after skipping past name */
 		++p;
 	    }
+	    else if (p[0] == ':' && p[1] == ':' && vim_iswordc(p[2]))
+	    {
+		if (!has_name_start || has_name)
+		    return FALSE;
+		/* C++ 17 nested namespace */
+		p += 3;
+	    }
 	    else
 	    {
 		return FALSE;
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -1932,6 +1932,26 @@ namespace test
 {
   111111111111111111;
 }
+namespace test::cpp17
+{
+  111111111111111111;
+}
+namespace ::incorrectcpp17
+{
+  111111111111111111;
+}
+namespace test::incorrectcpp17::
+{
+  111111111111111111;
+}
+namespace test:incorrectcpp17
+{
+  111111111111111111;
+}
+namespace test:::incorrectcpp17
+{
+  111111111111111111;
+}
 namespace{
   111111111111111111;
 }
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -1730,6 +1730,26 @@ namespace test
 {
 111111111111111111;
 }
+namespace test::cpp17
+{
+111111111111111111;
+}
+namespace ::incorrectcpp17
+{
+	111111111111111111;
+}
+namespace test::incorrectcpp17::
+{
+	111111111111111111;
+}
+namespace test:incorrectcpp17
+{
+	111111111111111111;
+}
+namespace test:::incorrectcpp17
+{
+	111111111111111111;
+}
 namespace{
 111111111111111111;
 }
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    92,
+/**/
     91,
 /**/
     90,