summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc1.c21
-rw-r--r--src/testdir/test3.in16
-rw-r--r--src/testdir/test3.ok12
-rw-r--r--src/version.c2
4 files changed, 47 insertions, 4 deletions
diff --git a/src/misc1.c b/src/misc1.c
index 76c95257..3a94c3c2 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -4983,7 +4983,7 @@ cin_skipcomment(s)
}
/*
- * Return TRUE if there there is no code at *s. White space and comments are
+ * Return TRUE if there is no code at *s. White space and comments are
* not considered code.
*/
static int
@@ -5458,8 +5458,11 @@ cin_islinecomment(p)
}
/*
- * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
* Don't consider "} else" a terminated line.
+ * Don't consider a line where there are unmatched opening braces before '}',
+ * ';' or ',' a terminated line.
* Return the character terminating the line (ending char's have precedence if
* both apply in order to determine initializations).
*/
@@ -5470,6 +5473,7 @@ cin_isterminated(s, incl_open, incl_comma)
int incl_comma; /* recognize a trailing comma */
{
char_u found_start = 0;
+ unsigned n_open = 0;
s = cin_skipcomment(s);
@@ -5480,10 +5484,19 @@ cin_isterminated(s, incl_open, incl_comma)
{
/* skip over comments, "" strings and 'c'haracters */
s = skip_string(cin_skipcomment(s));
- if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
- || (incl_comma && *s == ','))
+ if (*s == '}' && n_open > 0)
+ --n_open;
+ if (n_open == 0
+ && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
&& cin_nocode(s + 1))
return *s;
+ else if (*s == '{')
+ {
+ if (incl_open && cin_nocode(s + 1))
+ return *s;
+ else
+ ++n_open;
+ }
if (*s)
s++;
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
index 62402fb9..8576e275 100644
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -1344,6 +1344,22 @@ func(int a
}
STARTTEST
+:set cino&
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+ if(x==y)
+ if(y==z)
+ foo=1;
+ else { bar=1;
+ baz=2;
+ }
+ printf("Foo!\n");
+}
+
+STARTTEST
:g/^STARTTEST/.,/^ENDTEST/d
:1;/start of AUTO/,$wq! test.out
ENDTEST
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
index 4e2a6481..3764453a 100644
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -1204,3 +1204,15 @@ func(int a
{
}
+
+void func(void)
+{
+ if(x==y)
+ if(y==z)
+ foo=1;
+ else { bar=1;
+ baz=2;
+ }
+ printf("Foo!\n");
+}
+
diff --git a/src/version.c b/src/version.c
index 0c24bd2f..f69bf4e9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 178,
+/**/
177,
/**/
176,