Patch 7.3.178
Problem:    C-indent doesn't handle code right after { correctly.
Solution:   Fix detecting unterminated line. (Lech Lorens)
Files:      src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
    

*** ../vim-7.3.177/src/misc1.c  2011-04-28 17:48:39.000000000 +0200
--- src/misc1.c 2011-05-10 11:35:09.000000000 +0200
***************
*** 4983,4989 ****
  }
  
  /*
!  * Return TRUE if there there is no code at *s.  White space and comments are
   * not considered code.
   */
      static int
--- 4983,4989 ----
  }
  
  /*
!  * Return TRUE if there is no code at *s.  White space and comments are
   * not considered code.
   */
      static int
***************
*** 5458,5465 ****
  }
  
  /*
!  * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
   * Don't consider "} else" a terminated line.
   * Return the character terminating the line (ending char's have precedence if
   * both apply in order to determine initializations).
   */
--- 5458,5468 ----
  }
  
  /*
!  * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
!  * '}'.
   * Don't consider "} else" a terminated line.
+  * Don't consider a line where there are unmatched opening braces before '}',
+  * ';' or ',' a terminated line.
   * Return the character terminating the line (ending char's have precedence if
   * both apply in order to determine initializations).
   */
***************
*** 5470,5475 ****
--- 5473,5479 ----
      int               incl_comma;     /* recognize a trailing comma */
  {
      char_u found_start = 0;
+     unsigned n_open = 0;
  
      s = cin_skipcomment(s);
  
***************
*** 5480,5489 ****
      {
        /* skip over comments, "" strings and 'c'haracters */
        s = skip_string(cin_skipcomment(s));
!       if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
!                                                || (incl_comma && *s == ','))
                && cin_nocode(s + 1))
            return *s;
  
        if (*s)
            s++;
--- 5484,5502 ----
      {
        /* skip over comments, "" strings and 'c'haracters */
        s = skip_string(cin_skipcomment(s));
!       if (*s == '}' && n_open > 0)
!           --n_open;
!       if (n_open == 0
!               && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
                && cin_nocode(s + 1))
            return *s;
+       else if (*s == '{')
+       {
+           if (incl_open && cin_nocode(s + 1))
+               return *s;
+           else
+               ++n_open;
+       }
  
        if (*s)
            s++;
*** ../vim-7.3.177/src/testdir/test3.in 2011-04-28 13:01:59.000000000 +0200
--- src/testdir/test3.in        2011-05-10 11:34:13.000000000 +0200
***************
*** 1344,1349 ****
--- 1344,1365 ----
  }
  
  STARTTEST
+ :set cino&
+ 2kdd=][
+ ENDTEST
+ 
+ void func(void)
+ {
+       if(x==y)
+               if(y==z)
+                       foo=1;
+               else { bar=1;
+                       baz=2;
+               }
+       printf("Foo!\n");
+ }
+ 
+ STARTTEST
  :g/^STARTTEST/.,/^ENDTEST/d
  :1;/start of AUTO/,$wq! test.out
  ENDTEST
*** ../vim-7.3.177/src/testdir/test3.ok 2011-04-28 13:01:59.000000000 +0200
--- src/testdir/test3.ok        2011-05-10 11:34:13.000000000 +0200
***************
*** 1204,1206 ****
--- 1204,1218 ----
  {
  }
  
+ 
+ void func(void)
+ {
+       if(x==y)
+               if(y==z)
+                       foo=1;
+               else { bar=1;
+                       baz=2;
+               }
+       printf("Foo!\n");
+ }
+ 
*** ../vim-7.3.177/src/version.c        2011-05-05 18:31:54.000000000 +0200
--- src/version.c       2011-05-10 11:37:43.000000000 +0200
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     178,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
69. Yahoo welcomes you with your own start page

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui