changeset 3186:c025592d7b1d v7.3.363

updated for version 7.3.363 Problem: C indenting is wrong after #endif followed by a semicolon. Solution: Add special handling for a semicolon in a line by itself. (Lech Lorens)
author Bram Moolenaar <bram@vim.org>
date Wed, 30 Nov 2011 17:20:23 +0100
parents c6236b9bf1b8
children 9abd62fd9e3a
files src/misc1.c src/testdir/test3.in src/testdir/test3.ok src/version.c
diffstat 4 files changed, 45 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -8143,6 +8143,29 @@ term_again:
 		    break;
 
 		/*
+		 * Find a line only has a semicolon that belongs to a previous
+		 * line ending in '}', e.g. before an #endif.  Don't increase
+		 * indent then.
+		 */
+		if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
+		{
+		    pos_T curpos_save = curwin->w_cursor;
+
+		    while (curwin->w_cursor.lnum > 1)
+		    {
+			look = ml_get(--curwin->w_cursor.lnum);
+			if (!(cin_nocode(look) || cin_ispreproc_cont(
+					      &look, &curwin->w_cursor.lnum)))
+			    break;
+		    }
+		    if (curwin->w_cursor.lnum > 0
+				    && cin_ends_in(look, (char_u *)"}", NULL))
+			break;
+
+		    curwin->w_cursor = curpos_save;
+		}
+
+		/*
 		 * If the PREVIOUS line is a function declaration, the current
 		 * line (and the ones that follow) needs to be indented as
 		 * parameters.
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -1454,6 +1454,16 @@ void func2(void)
 		printf("This line used to be indented incorrectly.\n");
 }
 
+int foo[]
+#ifdef BAR
+
+= { 1, 2, 3,
+	4, 5, 6 }
+
+#endif
+;
+	int baz;
+
 void func3(void)
 {
 	int tab[] = {
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -1307,6 +1307,16 @@ void func2(void)
 	printf("This line used to be indented incorrectly.\n");
 }
 
+int foo[]
+#ifdef BAR
+
+= { 1, 2, 3,
+	4, 5, 6 }
+
+#endif
+	;
+int baz;
+
 void func3(void)
 {
 	int tab[] = {
--- 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 */
 /**/
+    363,
+/**/
     362,
 /**/
     361,