home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.3.380
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 7.3.380
- Problem: C-indenting wrong for a function header.
- Solution: Skip to the start paren. (Lech Lorens)
- Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
-
-
- *** ../vim-7.3.379/src/misc1.c 2011-12-14 20:05:17.000000000 +0100
- --- src/misc1.c 2011-12-14 20:16:43.000000000 +0100
- ***************
- *** 4943,4949 ****
- static int cin_islinecomment __ARGS((char_u *));
- static int cin_isterminated __ARGS((char_u *, int, int));
- static int cin_isinit __ARGS((void));
- ! static int cin_isfuncdecl __ARGS((char_u **, linenr_T));
- static int cin_isif __ARGS((char_u *));
- static int cin_iselse __ARGS((char_u *));
- static int cin_isdo __ARGS((char_u *));
- --- 4943,4949 ----
- static int cin_islinecomment __ARGS((char_u *));
- static int cin_isterminated __ARGS((char_u *, int, int));
- static int cin_isinit __ARGS((void));
- ! static int cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
- static int cin_isif __ARGS((char_u *));
- static int cin_iselse __ARGS((char_u *));
- static int cin_isdo __ARGS((char_u *));
- ***************
- *** 5585,5605 ****
- * "sp" points to a string with the line. When looking at other lines it must
- * be restored to the line. When it's NULL fetch lines here.
- * "lnum" is where we start looking.
- */
- static int
- ! cin_isfuncdecl(sp, first_lnum)
- char_u **sp;
- linenr_T first_lnum;
- {
- char_u *s;
- linenr_T lnum = first_lnum;
- int retval = FALSE;
-
- if (sp == NULL)
- s = ml_get(lnum);
- else
- s = *sp;
-
- /* Ignore line starting with #. */
- if (cin_ispreproc(s))
- return FALSE;
- --- 5585,5621 ----
- * "sp" points to a string with the line. When looking at other lines it must
- * be restored to the line. When it's NULL fetch lines here.
- * "lnum" is where we start looking.
- + * "min_lnum" is the line before which we will not be looking.
- */
- static int
- ! cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
- char_u **sp;
- linenr_T first_lnum;
- + linenr_T min_lnum;
- + int ind_maxparen;
- + int ind_maxcomment;
- {
- char_u *s;
- linenr_T lnum = first_lnum;
- int retval = FALSE;
- + pos_T *trypos;
- + int just_started = TRUE;
-
- if (sp == NULL)
- s = ml_get(lnum);
- else
- s = *sp;
-
- + if (find_last_paren(s, '(', ')')
- + && (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
- + {
- + lnum = trypos->lnum;
- + if (lnum < min_lnum)
- + return FALSE;
- +
- + s = ml_get(lnum);
- + }
- +
- /* Ignore line starting with #. */
- if (cin_ispreproc(s))
- return FALSE;
- ***************
- *** 5650,5662 ****
- /* 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);
- else
- ++s;
- }
-
- done:
- --- 5666,5682 ----
- /* Require a comma at end of the line or a comma or ')' at the
- * start of next line. */
- s = skipwhite(s);
- ! if (!just_started && (!comma && *s != ',' && *s != ')'))
- break;
- + just_started = FALSE;
- }
- else if (cin_iscomment(s)) /* ignore comments */
- s = cin_skipcomment(s);
- else
- + {
- ++s;
- + just_started = FALSE;
- + }
- }
-
- done:
- ***************
- *** 7158,7164 ****
- * (it's a variable declaration).
- */
- if (start_brace != BRACE_IN_COL0
- ! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
- {
- /* if the line is terminated with another ','
- * it is a continued variable initialization.
- --- 7178,7185 ----
- * (it's a variable declaration).
- */
- if (start_brace != BRACE_IN_COL0
- ! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
- ! 0, ind_maxparen, ind_maxcomment))
- {
- /* if the line is terminated with another ','
- * it is a continued variable initialization.
- ***************
- *** 8019,8025 ****
- && vim_strchr(theline, '}') == NULL
- && !cin_ends_in(theline, (char_u *)":", NULL)
- && !cin_ends_in(theline, (char_u *)",", NULL)
- ! && cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
- && !cin_isterminated(theline, FALSE, TRUE))
- {
- amount = ind_func_type;
- --- 8040,8048 ----
- && vim_strchr(theline, '}') == NULL
- && !cin_ends_in(theline, (char_u *)":", NULL)
- && !cin_ends_in(theline, (char_u *)",", NULL)
- ! && cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
- ! cur_curpos.lnum + 1,
- ! ind_maxparen, ind_maxcomment)
- && !cin_isterminated(theline, FALSE, TRUE))
- {
- amount = ind_func_type;
- ***************
- *** 8125,8131 ****
- * If the line looks like a function declaration, and we're
- * not in a comment, put it the left margin.
- */
- ! if (cin_isfuncdecl(NULL, cur_curpos.lnum)) /* XXX */
- break;
- l = ml_get_curline();
-
- --- 8148,8155 ----
- * If the line looks like a function declaration, and we're
- * not in a comment, put it the left margin.
- */
- ! if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
- ! ind_maxparen, ind_maxcomment)) /* XXX */
- break;
- l = ml_get_curline();
-
- ***************
- *** 8173,8179 ****
- * line (and the ones that follow) needs to be indented as
- * parameters.
- */
- ! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
- {
- amount = ind_param;
- break;
- --- 8197,8204 ----
- * line (and the ones that follow) needs to be indented as
- * parameters.
- */
- ! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
- ! ind_maxparen, ind_maxcomment))
- {
- amount = ind_param;
- break;
- *** ../vim-7.3.379/src/testdir/test3.in 2011-12-14 20:05:17.000000000 +0100
- --- src/testdir/test3.in 2011-12-14 20:11:24.000000000 +0100
- ***************
- *** 1429,1435 ****
-
- STARTTEST
- :set cino&
- ! 2kdd=4][
- ENDTEST
-
- void func(void)
- --- 1429,1435 ----
-
- STARTTEST
- :set cino&
- ! 2kdd=7][
- ENDTEST
-
- void func(void)
- ***************
- *** 1478,1484 ****
- 3, 4,
- 5, 6};
-
- ! printf("Don't you dare indent this line incorrectly!\n);
- }
-
- STARTTEST
- --- 1478,1506 ----
- 3, 4,
- 5, 6};
-
- ! printf("Don't you dare indent this line incorrectly!\n");
- ! }
- !
- ! void
- ! func4(a, b,
- ! c)
- ! int a;
- ! int b;
- ! int c;
- ! {
- ! }
- !
- ! void
- ! func5(
- ! int a,
- ! int b)
- ! {
- ! }
- !
- ! void
- ! func6(
- ! int a)
- ! {
- }
-
- STARTTEST
- *** ../vim-7.3.379/src/testdir/test3.ok 2011-12-14 20:05:17.000000000 +0100
- --- src/testdir/test3.ok 2011-12-14 20:11:24.000000000 +0100
- ***************
- *** 1331,1337 ****
- 3, 4,
- 5, 6};
-
- ! printf("Don't you dare indent this line incorrectly!\n);
- }
-
-
- --- 1331,1359 ----
- 3, 4,
- 5, 6};
-
- ! printf("Don't you dare indent this line incorrectly!\n");
- ! }
- !
- ! void
- ! func4(a, b,
- ! c)
- ! int a;
- ! int b;
- ! int c;
- ! {
- ! }
- !
- ! void
- ! func5(
- ! int a,
- ! int b)
- ! {
- ! }
- !
- ! void
- ! func6(
- ! int a)
- ! {
- }
-
-
- *** ../vim-7.3.379/src/version.c 2011-12-14 20:05:17.000000000 +0100
- --- src/version.c 2011-12-14 20:20:50.000000000 +0100
- ***************
- *** 716,717 ****
- --- 716,719 ----
- { /* Add new patch number below this line */
- + /**/
- + 380,
- /**/
-
- --
- "Intelligence has much less practical application than you'd think."
- -- Scott Adams, Dilbert.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
- /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
- \\\ an exciting new programming language -- http://www.Zimbu.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
-