summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-10-07 11:41:49 +0200
committerBram Moolenaar <Bram@vim.org>2015-10-07 11:41:49 +0200
commit089af18d1fd0961ff504ee72db0156bbfe509cdf (patch)
tree132a25e78150f72660130dc003ad2680a2f2257e
parent094454fa708d3297db744f095cd2b7b155a8b6ad (diff)
downloadvim-git-089af18d1fd0961ff504ee72db0156bbfe509cdf.tar.gz
patch 7.4.891v7.4.891
Problem: Indentation of array initializer is wrong. Solution: Avoid that calling find_start_rawstring() changes the position returned by find_start_comment(), add a test. (Hirohito Higashi)
-rw-r--r--src/misc1.c23
-rw-r--r--src/testdir/test3.in22
-rw-r--r--src/testdir/test3.ok22
-rw-r--r--src/version.c2
4 files changed, 65 insertions, 4 deletions
diff --git a/src/misc1.c b/src/misc1.c
index 7eb3dce8b..60e814694 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -5345,8 +5345,19 @@ find_start_comment(ind_maxcomment) /* XXX */
static pos_T *
ind_find_start_CORS() /* XXX */
{
- pos_T *comment_pos = find_start_comment(curbuf->b_ind_maxcomment);
- pos_T *rs_pos = find_start_rawstring(curbuf->b_ind_maxcomment);
+ static pos_T comment_pos_copy;
+ pos_T *comment_pos;
+ pos_T *rs_pos;
+
+ comment_pos = find_start_comment(curbuf->b_ind_maxcomment);
+ if (comment_pos != NULL)
+ {
+ /* Need to make a copy of the static pos in findmatchlimit(),
+ * calling find_start_rawstring() may change it. */
+ comment_pos_copy = *comment_pos;
+ comment_pos = &comment_pos_copy;
+ }
+ rs_pos = find_start_rawstring(curbuf->b_ind_maxcomment);
/* If comment_pos is before rs_pos the raw string is inside the comment.
* If rs_pos is before comment_pos the comment is inside the raw string. */
@@ -8334,7 +8345,8 @@ get_c_indent()
if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
&& terminated == ','))
{
- if (*skipwhite(l) == '[' || l[STRLEN(l) - 1] == '[')
+ if (lookfor != LOOKFOR_ENUM_OR_INIT &&
+ (*skipwhite(l) == '[' || l[STRLEN(l) - 1] == '['))
amount += ind_continuation;
/*
* if we're in the middle of a paren thing,
@@ -8576,7 +8588,10 @@ get_c_indent()
*/
l = ml_get_curline();
amount = cur_amount;
- if (*skipwhite(l) == ']' || l[STRLEN(l) - 1] == ']')
+
+ n = (int)STRLEN(l);
+ if (terminated == ',' && (*skipwhite(l) == ']'
+ || (n >=2 && l[n - 2] == ']')))
break;
/*
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
index 4f5331e56..4fc73a978 100644
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -910,6 +910,28 @@ const char* s = R"foo(
)foo";
}
+{
+int a[4] = {
+[0] = 0,
+[1] = 1,
+[2] = 2,
+[3] = 3,
+};
+}
+
+{
+a = b[2]
++ 3;
+}
+
+{
+if (1)
+/* aaaaa
+* bbbbb
+*/
+a = 1;
+}
+
/* end of AUTO */
STARTTEST
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
index e87e7fdca..8fa9caac2 100644
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -898,6 +898,28 @@ void getstring() {
)foo";
}
+{
+ int a[4] = {
+ [0] = 0,
+ [1] = 1,
+ [2] = 2,
+ [3] = 3,
+ };
+}
+
+{
+ a = b[2]
+ + 3;
+}
+
+{
+ if (1)
+ /* aaaaa
+ * bbbbb
+ */
+ a = 1;
+}
+
/* end of AUTO */
diff --git a/src/version.c b/src/version.c
index c60bbe6b7..ce0579288 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 891,
+/**/
890,
/**/
889,