diff --git a/src/misc1.c b/src/misc1.c index c0a045d14dfe2..fbebd5aec08d1 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -6614,7 +6614,7 @@ find_start_brace() /* XXX */ } /* - * Find the matching '(', failing if it is in a comment. + * Find the matching '(', ignoring it if it is in a comment. * Return NULL if no match found. */ static pos_T * @@ -6644,6 +6644,32 @@ find_match_paren(ind_maxparen) /* XXX */ return trypos; } +/* + * Find the matching '(', ignoring it if it is in a comment or before an + * unmatched {. + * Return NULL if no match found. + */ + static pos_T * +find_match_paren_after_brace(ind_maxparen) /* XXX */ + int ind_maxparen; +{ + pos_T *trypos = find_match_paren(ind_maxparen); + + if (trypos != NULL) + { + pos_T *tryposBrace = find_start_brace(); + + /* If both an unmatched '(' and '{' is found. Ignore the '(' + * position if the '{' is further down. */ + if (tryposBrace != NULL + && (trypos->lnum != tryposBrace->lnum + ? trypos->lnum < tryposBrace->lnum + : trypos->col < tryposBrace->col)) + trypos = NULL; + } + return trypos; +} + /* * Return ind_maxparen corrected for the difference in line number between the * cursor position and "startpos". This makes sure that searching for a @@ -7419,7 +7445,8 @@ get_c_indent() { curwin->w_cursor.lnum = our_paren_pos.lnum; curwin->w_cursor.col = col; - if (find_match_paren(curbuf->b_ind_maxparen) != NULL) + if (find_match_paren_after_brace(curbuf->b_ind_maxparen) + != NULL) amount += curbuf->b_ind_unclosed2; else { diff --git a/src/testdir/test3.in b/src/testdir/test3.in index a7543945c4b8a..a33a4cba60562 100644 --- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -1950,6 +1950,10 @@ ENDTEST JSSTART (function($){ +if (cond && +cond) { +stmt; +} var class_name='myclass'; function private_method() { diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok index d73a5e1230365..edd9e236a621e 100644 --- a/src/testdir/test3.ok +++ b/src/testdir/test3.ok @@ -1728,6 +1728,10 @@ JSEND JSSTART (function($){ + if (cond && + cond) { + stmt; + } var class_name='myclass'; function private_method() { diff --git a/src/version.c b/src/version.c index e86b43ddf3c1c..82685ce56d0e0 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 350, /**/ 349, /**/