Karsten Hopp 9a8ec1
To: vim_dev@googlegroups.com
Karsten Hopp 9a8ec1
Subject: Patch 7.3.164
Karsten Hopp 9a8ec1
Fcc: outbox
Karsten Hopp 9a8ec1
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 9a8ec1
Mime-Version: 1.0
Karsten Hopp 9a8ec1
Content-Type: text/plain; charset=UTF-8
Karsten Hopp 9a8ec1
Content-Transfer-Encoding: 8bit
Karsten Hopp 9a8ec1
------------
Karsten Hopp 9a8ec1
Karsten Hopp 9a8ec1
Patch 7.3.164
Karsten Hopp 9a8ec1
Problem:    C-indenting: a preprocessor statement confuses detection of a
Karsten Hopp 9a8ec1
	    function delcaration.
Karsten Hopp 9a8ec1
Solution:   Ignore preprocessor lines. (Lech Lorens)  Also recognize the style
Karsten Hopp 9a8ec1
	    to put a comma before the argument name.
Karsten Hopp 9a8ec1
Files:	    src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
Karsten Hopp 9a8ec1
Karsten Hopp 9a8ec1
Karsten Hopp 9a8ec1
*** ../vim-7.3.163/src/misc1.c	2011-04-11 16:56:29.000000000 +0200
Karsten Hopp 9a8ec1
--- src/misc1.c	2011-04-28 12:49:55.000000000 +0200
Karsten Hopp 9a8ec1
***************
Karsten Hopp 9a8ec1
*** 5396,5403 ****
Karsten Hopp 9a8ec1
  cin_ispreproc(s)
Karsten Hopp 9a8ec1
      char_u *s;
Karsten Hopp 9a8ec1
  {
Karsten Hopp 9a8ec1
!     s = skipwhite(s);
Karsten Hopp 9a8ec1
!     if (*s == '#')
Karsten Hopp 9a8ec1
  	return TRUE;
Karsten Hopp 9a8ec1
      return FALSE;
Karsten Hopp 9a8ec1
  }
Karsten Hopp 9a8ec1
--- 5396,5402 ----
Karsten Hopp 9a8ec1
  cin_ispreproc(s)
Karsten Hopp 9a8ec1
      char_u *s;
Karsten Hopp 9a8ec1
  {
Karsten Hopp 9a8ec1
!     if (*skipwhite(s) == '#')
Karsten Hopp 9a8ec1
  	return TRUE;
Karsten Hopp 9a8ec1
      return FALSE;
Karsten Hopp 9a8ec1
  }
Karsten Hopp 9a8ec1
***************
Karsten Hopp 9a8ec1
*** 5513,5518 ****
Karsten Hopp 9a8ec1
--- 5512,5521 ----
Karsten Hopp 9a8ec1
      else
Karsten Hopp 9a8ec1
  	s = *sp;
Karsten Hopp 9a8ec1
  
Karsten Hopp 9a8ec1
+     /* Ignore line starting with #. */
Karsten Hopp 9a8ec1
+     if (cin_ispreproc(s))
Karsten Hopp 9a8ec1
+ 	return FALSE;
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
      while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
Karsten Hopp 9a8ec1
      {
Karsten Hopp 9a8ec1
  	if (cin_iscomment(s))	/* ignore comments */
Karsten Hopp 9a8ec1
***************
Karsten Hopp 9a8ec1
*** 5538,5550 ****
Karsten Hopp 9a8ec1
  		retval = TRUE;
Karsten Hopp 9a8ec1
  	    goto done;
Karsten Hopp 9a8ec1
  	}
Karsten Hopp 9a8ec1
! 	if (*s == ',' && cin_nocode(s + 1))
Karsten Hopp 9a8ec1
  	{
Karsten Hopp 9a8ec1
! 	    /* ',' at the end: continue looking in the next line */
Karsten Hopp 9a8ec1
  	    if (lnum >= curbuf->b_ml.ml_line_count)
Karsten Hopp 9a8ec1
  		break;
Karsten Hopp 9a8ec1
! 
Karsten Hopp 9a8ec1
! 	    s = ml_get(++lnum);
Karsten Hopp 9a8ec1
  	}
Karsten Hopp 9a8ec1
  	else if (cin_iscomment(s))	/* ignore comments */
Karsten Hopp 9a8ec1
  	    s = cin_skipcomment(s);
Karsten Hopp 9a8ec1
--- 5541,5569 ----
Karsten Hopp 9a8ec1
  		retval = TRUE;
Karsten Hopp 9a8ec1
  	    goto done;
Karsten Hopp 9a8ec1
  	}
Karsten Hopp 9a8ec1
! 	if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
Karsten Hopp 9a8ec1
  	{
Karsten Hopp 9a8ec1
! 	    int comma = (*s == ',');
Karsten Hopp 9a8ec1
! 
Karsten Hopp 9a8ec1
! 	    /* ',' at the end: continue looking in the next line.
Karsten Hopp 9a8ec1
! 	     * At the end: check for ',' in the next line, for this style:
Karsten Hopp 9a8ec1
! 	     * func(arg1
Karsten Hopp 9a8ec1
! 	     *       , arg2) */
Karsten Hopp 9a8ec1
! 	    for (;;)
Karsten Hopp 9a8ec1
! 	    {
Karsten Hopp 9a8ec1
! 		if (lnum >= curbuf->b_ml.ml_line_count)
Karsten Hopp 9a8ec1
! 		    break;
Karsten Hopp 9a8ec1
! 		s = ml_get(++lnum);
Karsten Hopp 9a8ec1
! 		if (!cin_ispreproc(s))
Karsten Hopp 9a8ec1
! 		    break;
Karsten Hopp 9a8ec1
! 	    }
Karsten Hopp 9a8ec1
  	    if (lnum >= curbuf->b_ml.ml_line_count)
Karsten Hopp 9a8ec1
  		break;
Karsten Hopp 9a8ec1
! 	    /* Require a comma at end of the line or a comma or ')' at the
Karsten Hopp 9a8ec1
! 	     * start of next line. */
Karsten Hopp 9a8ec1
! 	    s = skipwhite(s);
Karsten Hopp 9a8ec1
! 	    if (!comma && *s != ',' && *s != ')')
Karsten Hopp 9a8ec1
! 		break;
Karsten Hopp 9a8ec1
  	}
Karsten Hopp 9a8ec1
  	else if (cin_iscomment(s))	/* ignore comments */
Karsten Hopp 9a8ec1
  	    s = cin_skipcomment(s);
Karsten Hopp 9a8ec1
*** ../vim-7.3.163/src/testdir/test3.in	2010-08-15 21:57:29.000000000 +0200
Karsten Hopp 9a8ec1
--- src/testdir/test3.in	2011-04-28 12:15:12.000000000 +0200
Karsten Hopp 9a8ec1
***************
Karsten Hopp 9a8ec1
*** 1315,1320 ****
Karsten Hopp 9a8ec1
--- 1315,1349 ----
Karsten Hopp 9a8ec1
  }
Karsten Hopp 9a8ec1
  
Karsten Hopp 9a8ec1
  STARTTEST
Karsten Hopp 9a8ec1
+ :set cino=(0,ts
Karsten Hopp 9a8ec1
+ 2kdd=][
Karsten Hopp 9a8ec1
+ ENDTEST
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ void func(int a
Karsten Hopp 9a8ec1
+ #if defined(FOO)
Karsten Hopp 9a8ec1
+ 		  , int b
Karsten Hopp 9a8ec1
+ 		  , int c
Karsten Hopp 9a8ec1
+ #endif
Karsten Hopp 9a8ec1
+ 		 )
Karsten Hopp 9a8ec1
+ {
Karsten Hopp 9a8ec1
+ }
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ STARTTEST
Karsten Hopp 9a8ec1
+ :set cino=(0
Karsten Hopp 9a8ec1
+ 2kdd=][
Karsten Hopp 9a8ec1
+ ENDTEST
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ void
Karsten Hopp 9a8ec1
+ func(int a
Karsten Hopp 9a8ec1
+ #if defined(FOO)
Karsten Hopp 9a8ec1
+ 		  , int b
Karsten Hopp 9a8ec1
+ 		  , int c
Karsten Hopp 9a8ec1
+ #endif
Karsten Hopp 9a8ec1
+ 		 )
Karsten Hopp 9a8ec1
+ {
Karsten Hopp 9a8ec1
+ }
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ STARTTEST
Karsten Hopp 9a8ec1
  :g/^STARTTEST/.,/^ENDTEST/d
Karsten Hopp 9a8ec1
  :1;/start of AUTO/,$wq! test.out
Karsten Hopp 9a8ec1
  ENDTEST
Karsten Hopp 9a8ec1
*** ../vim-7.3.163/src/testdir/test3.ok	2010-08-15 21:57:29.000000000 +0200
Karsten Hopp 9a8ec1
--- src/testdir/test3.ok	2011-04-28 12:54:04.000000000 +0200
Karsten Hopp 9a8ec1
***************
Karsten Hopp 9a8ec1
*** 1183,1185 ****
Karsten Hopp 9a8ec1
--- 1183,1206 ----
Karsten Hopp 9a8ec1
  		foo;
Karsten Hopp 9a8ec1
  }
Karsten Hopp 9a8ec1
  
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ void func(int a
Karsten Hopp 9a8ec1
+ #if defined(FOO)
Karsten Hopp 9a8ec1
+ 		  , int b
Karsten Hopp 9a8ec1
+ 		  , int c
Karsten Hopp 9a8ec1
+ #endif
Karsten Hopp 9a8ec1
+ 		 )
Karsten Hopp 9a8ec1
+ {
Karsten Hopp 9a8ec1
+ }
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
+ 	void
Karsten Hopp 9a8ec1
+ func(int a
Karsten Hopp 9a8ec1
+ #if defined(FOO)
Karsten Hopp 9a8ec1
+ 	 , int b
Karsten Hopp 9a8ec1
+ 	 , int c
Karsten Hopp 9a8ec1
+ #endif
Karsten Hopp 9a8ec1
+ 	)
Karsten Hopp 9a8ec1
+ {
Karsten Hopp 9a8ec1
+ }
Karsten Hopp 9a8ec1
+ 
Karsten Hopp 9a8ec1
*** ../vim-7.3.163/src/version.c	2011-04-28 12:56:57.000000000 +0200
Karsten Hopp 9a8ec1
--- src/version.c	2011-04-28 12:59:55.000000000 +0200
Karsten Hopp 9a8ec1
***************
Karsten Hopp 9a8ec1
*** 716,717 ****
Karsten Hopp 9a8ec1
--- 716,719 ----
Karsten Hopp 9a8ec1
  {   /* Add new patch number below this line */
Karsten Hopp 9a8ec1
+ /**/
Karsten Hopp 9a8ec1
+     164,
Karsten Hopp 9a8ec1
  /**/
Karsten Hopp 9a8ec1
Karsten Hopp 9a8ec1
-- 
Karsten Hopp 9a8ec1
Due knot trussed yore spell chequer two fined awl miss steaks.
Karsten Hopp 9a8ec1
Karsten Hopp 9a8ec1
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 9a8ec1
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 9a8ec1
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp 9a8ec1
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///