summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc1.c84
-rw-r--r--src/testdir/test3.in14
-rw-r--r--src/testdir/test3.ok10
-rw-r--r--src/version.c2
4 files changed, 72 insertions, 38 deletions
diff --git a/src/misc1.c b/src/misc1.c
index 589a145cc..95b45479c 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -6389,6 +6389,7 @@ get_c_indent()
int lookfor_cpp_namespace = FALSE;
int cont_amount = 0; /* amount for continuation line */
int original_line_islabel;
+ int added_to_amount = 0;
for (options = curbuf->b_p_cino; *options; )
{
@@ -7216,52 +7217,59 @@ get_c_indent()
else
amount += ind_continuation;
}
- else if (lookfor_cpp_namespace)
+ else
{
- if (curwin->w_cursor.lnum == ourscope)
- continue;
+ if (lookfor != LOOKFOR_TERM
+ && lookfor != LOOKFOR_CPP_BASECLASS)
+ {
+ amount = scope_amount;
+ if (theline[0] == '{')
+ {
+ amount += ind_open_extra;
+ added_to_amount = ind_open_extra;
+ }
+ }
- if (curwin->w_cursor.lnum == 0
- || curwin->w_cursor.lnum
- < ourscope - FIND_NAMESPACE_LIM)
- break;
+ if (lookfor_cpp_namespace)
+ {
+ /*
+ * Looking for C++ namespace, need to look further
+ * back.
+ */
+ if (curwin->w_cursor.lnum == ourscope)
+ continue;
- l = ml_get_curline();
+ if (curwin->w_cursor.lnum == 0
+ || curwin->w_cursor.lnum
+ < ourscope - FIND_NAMESPACE_LIM)
+ break;
- /*
- * If we're in a comment now, skip to the start of the
- * comment.
- */
- trypos = find_start_comment(ind_maxcomment);
- if (trypos != NULL)
- {
- curwin->w_cursor.lnum = trypos->lnum + 1;
- curwin->w_cursor.col = 0;
- continue;
- }
+ l = ml_get_curline();
- /*
- * Skip preprocessor directives and blank lines.
- */
- if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
- continue;
+ /* If we're in a comment now, skip to the start of
+ * the comment. */
+ trypos = find_start_comment(ind_maxcomment);
+ if (trypos != NULL)
+ {
+ curwin->w_cursor.lnum = trypos->lnum + 1;
+ curwin->w_cursor.col = 0;
+ continue;
+ }
- if (cin_is_cpp_namespace(l))
- {
- amount += ind_cpp_namespace;
- break;
- }
+ /* Skip preprocessor directives and blank lines. */
+ if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+ continue;
- if (cin_nocode(l))
- continue;
+ /* Finally the actual check for "namespace". */
+ if (cin_is_cpp_namespace(l))
+ {
+ amount += ind_cpp_namespace - added_to_amount;
+ break;
+ }
- }
- else if (lookfor != LOOKFOR_TERM
- && lookfor != LOOKFOR_CPP_BASECLASS)
- {
- amount = scope_amount;
- if (theline[0] == '{')
- amount += ind_open_extra;
+ if (cin_nocode(l))
+ continue;
+ }
}
break;
}
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
index 55ca2a5a7..f987478f6 100644
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -1309,6 +1309,20 @@ protected:
};
STARTTEST
+:set cino=(0,gs,hs
+2kdd]]=][
+ENDTEST
+
+class Foo : public Bar
+{
+public:
+virtual void method1(void) = 0;
+virtual void method2(int arg1,
+int arg2,
+int arg3) = 0;
+};
+
+STARTTEST
:set cino=+20
2kdd]]=][
ENDTEST
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
index 396230744..c95b18846 100644
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -1190,6 +1190,16 @@ protected:
};
+class Foo : public Bar
+{
+ public:
+ virtual void method1(void) = 0;
+ virtual void method2(int arg1,
+ int arg2,
+ int arg3) = 0;
+};
+
+
void
foo()
{
diff --git a/src/version.c b/src/version.c
index 6b1676d2d..756c6366c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 332,
+/**/
331,
/**/
330,