summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-11-17 21:30:27 +0100
committerBram Moolenaar <Bram@vim.org>2016-11-17 21:30:27 +0100
commitca8b8d6956dd881de6446fc32c38e817a364a6cc (patch)
treecb255499ccba4e5bfb57549a049491cf4d36007a
parent9f0e423c2818c0cacd0810f9c3c67cbb6b80963d (diff)
patch 8.0.0092v8.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 #1214)
-rw-r--r--src/misc1.c9
-rw-r--r--src/testdir/test3.in20
-rw-r--r--src/testdir/test3.ok20
-rw-r--r--src/version.c2
4 files changed, 51 insertions, 0 deletions
diff --git a/src/misc1.c b/src/misc1.c
index 6bf7d75776..3630d7b3b3 100644
--- 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;
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
index c0a68d0941..096f15219d 100644
--- 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;
}
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
index c4c01a3d4f..2f9572cc13 100644
--- 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;
}
diff --git a/src/version.c b/src/version.c
index f07437de95..5db35abc22 100644
--- 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,