diff options
author | Bram Moolenaar <Bram@vim.org> | 2015-10-07 11:41:49 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2015-10-07 11:41:49 +0200 |
commit | 089af18d1fd0961ff504ee72db0156bbfe509cdf (patch) | |
tree | 132a25e78150f72660130dc003ad2680a2f2257e /src | |
parent | 094454fa708d3297db744f095cd2b7b155a8b6ad (diff) | |
download | vim-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)
Diffstat (limited to 'src')
-rw-r--r-- | src/misc1.c | 23 | ||||
-rw-r--r-- | src/testdir/test3.in | 22 | ||||
-rw-r--r-- | src/testdir/test3.ok | 22 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |