0
0
mirror of https://github.com/vim/vim.git synced 2025-10-04 05:25:06 -04:00

updated for version 7.3.178

Problem:    C-indent doesn't handle code right after { correctly.
Solution:   Fix detecting unterminated line. (Lech Lorens)
This commit is contained in:
Bram Moolenaar
2011-05-10 11:39:19 +02:00
parent 3c9c99cb2c
commit 4ae06c1fa5
4 changed files with 47 additions and 4 deletions

View File

@@ -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. * not considered code.
*/ */
static int 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 "} 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 * Return the character terminating the line (ending char's have precedence if
* both apply in order to determine initializations). * 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 */ int incl_comma; /* recognize a trailing comma */
{ {
char_u found_start = 0; char_u found_start = 0;
unsigned n_open = 0;
s = cin_skipcomment(s); s = cin_skipcomment(s);
@@ -5480,10 +5484,19 @@ cin_isterminated(s, incl_open, incl_comma)
{ {
/* skip over comments, "" strings and 'c'haracters */ /* skip over comments, "" strings and 'c'haracters */
s = skip_string(cin_skipcomment(s)); s = skip_string(cin_skipcomment(s));
if ((*s == ';' || (incl_open && *s == '{') || *s == '}' if (*s == '}' && n_open > 0)
|| (incl_comma && *s == ',')) --n_open;
if (n_open == 0
&& (*s == ';' || *s == '}' || (incl_comma && *s == ','))
&& cin_nocode(s + 1)) && cin_nocode(s + 1))
return *s; return *s;
else if (*s == '{')
{
if (incl_open && cin_nocode(s + 1))
return *s;
else
++n_open;
}
if (*s) if (*s)
s++; s++;

View File

@@ -1343,6 +1343,22 @@ func(int a
#if defined(FOO) #if defined(FOO)
, int b , int b
, int c , int c
#endif
)
{
}
STARTTEST
:set cino&
2kdd=][
ENDTEST
void func(void)
{
if(x==y)
if(y==z)
foo=1;
else { bar=1;
baz=2; baz=2;
} }
printf("Foo!\n"); printf("Foo!\n");

View File

@@ -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");
}

View File

@@ -714,6 +714,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
178,
/**/ /**/
177, 177,
/**/ /**/