# HG changeset patch # User Bram Moolenaar # Date 1303988529 -7200 # Node ID cdefcbb70e8cdc1f7185f1023d3a4660d30a074b # Parent 8bc600c61a206b4e8ef8c01ba2a7bd607b9ae7ea updated for version 7.3.164 Problem: C-indenting: a preprocessor statement confuses detection of a function delcaration. Solution: Ignore preprocessor lines. (Lech Lorens) Also recognize the style to put a comma before the argument name. diff --git a/src/misc1.c b/src/misc1.c --- a/src/misc1.c +++ b/src/misc1.c @@ -5396,8 +5396,7 @@ cin_get_equal_amount(lnum) cin_ispreproc(s) char_u *s; { - s = skipwhite(s); - if (*s == '#') + if (*skipwhite(s) == '#') return TRUE; return FALSE; } @@ -5513,6 +5512,10 @@ cin_isfuncdecl(sp, first_lnum) else s = *sp; + /* Ignore line starting with #. */ + if (cin_ispreproc(s)) + return FALSE; + while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"') { if (cin_iscomment(s)) /* ignore comments */ @@ -5538,13 +5541,29 @@ cin_isfuncdecl(sp, first_lnum) retval = TRUE; goto done; } - if (*s == ',' && cin_nocode(s + 1)) - { - /* ',' at the end: continue looking in the next line */ + if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s)) + { + int comma = (*s == ','); + + /* ',' at the end: continue looking in the next line. + * At the end: check for ',' in the next line, for this style: + * func(arg1 + * , arg2) */ + for (;;) + { + if (lnum >= curbuf->b_ml.ml_line_count) + break; + s = ml_get(++lnum); + if (!cin_ispreproc(s)) + break; + } if (lnum >= curbuf->b_ml.ml_line_count) break; - - s = ml_get(++lnum); + /* Require a comma at end of the line or a comma or ')' at the + * start of next line. */ + s = skipwhite(s); + if (!comma && *s != ',' && *s != ')') + break; } else if (cin_iscomment(s)) /* ignore comments */ s = cin_skipcomment(s); diff --git a/src/testdir/test3.in b/src/testdir/test3.in --- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -1315,6 +1315,35 @@ int main () } STARTTEST +:set cino=(0,ts +2kdd=][ +ENDTEST + +void func(int a +#if defined(FOO) + , int b + , int c +#endif + ) +{ +} + +STARTTEST +:set cino=(0 +2kdd=][ +ENDTEST + +void +func(int a +#if defined(FOO) + , int b + , int c +#endif + ) +{ +} + +STARTTEST :g/^STARTTEST/.,/^ENDTEST/d :1;/start of AUTO/,$wq! test.out ENDTEST diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok --- a/src/testdir/test3.ok +++ b/src/testdir/test3.ok @@ -1183,3 +1183,24 @@ int main () foo; } + +void func(int a +#if defined(FOO) + , int b + , int c +#endif + ) +{ +} + + + void +func(int a +#if defined(FOO) + , int b + , int c +#endif + ) +{ +} + diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 164, +/**/ 163, /**/ 162,