karsten pushed to vim (master). "- patchlevel 723"
notifications at fedoraproject.org
notifications at fedoraproject.org
Wed Jun 10 08:20:25 UTC 2015
From a3094a90bb94139b90fac0727a583faa4d014a0c Mon Sep 17 00:00:00 2001
From: Karsten Hopp <karsten at redhat.com>
Date: Mon, 4 May 2015 18:00:06 +0200
Subject: - patchlevel 723
diff --git a/7.4.723 b/7.4.723
new file mode 100644
index 0000000..38e2e6f
--- /dev/null
+++ b/7.4.723
@@ -0,0 +1,275 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.4.723
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.723
+Problem: For indenting, finding the C++ baseclass can be slow.
+Solution: Cache the result. (Hirohito Higashi)
+Files: src/misc1.c
+
+
+*** ../vim-7.4.722/src/misc1.c 2015-03-31 13:33:00.797524914 +0200
+--- src/misc1.c 2015-05-04 17:45:41.108783310 +0200
+***************
+*** 5376,5381 ****
+--- 5376,5387 ----
+ fixthisline(get_c_indent);
+ }
+
++ /* Find result cache for cpp_baseclass */
++ typedef struct {
++ int found;
++ lpos_T lpos;
++ } cpp_baseclass_cache_T;
++
+ /*
+ * Functions for C-indenting.
+ * Most of this originally comes from Eric Fischer.
+***************
+*** 5409,5415 ****
+ static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
+ static int cin_iswhileofdo_end __ARGS((int terminated));
+ static int cin_isbreak __ARGS((char_u *));
+! static int cin_is_cpp_baseclass __ARGS((colnr_T *col));
+ static int get_baseclass_amount __ARGS((int col));
+ static int cin_ends_in __ARGS((char_u *, char_u *, char_u *));
+ static int cin_starts_with __ARGS((char_u *s, char *word));
+--- 5415,5421 ----
+ static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
+ static int cin_iswhileofdo_end __ARGS((int terminated));
+ static int cin_isbreak __ARGS((char_u *));
+! static int cin_is_cpp_baseclass __ARGS((cpp_baseclass_cache_T *cached));
+ static int get_baseclass_amount __ARGS((int col));
+ static int cin_ends_in __ARGS((char_u *, char_u *, char_u *));
+ static int cin_starts_with __ARGS((char_u *s, char *word));
+***************
+*** 6372,6386 ****
+ * This is a lot of guessing. Watch out for "cond ? func() : foo".
+ */
+ static int
+! cin_is_cpp_baseclass(col)
+! colnr_T *col; /* return: column to align with */
+ {
+ char_u *s;
+ int class_or_struct, lookfor_ctor_init, cpp_base_class;
+ linenr_T lnum = curwin->w_cursor.lnum;
+ char_u *line = ml_get_curline();
+
+! *col = 0;
+
+ s = skipwhite(line);
+ if (*s == '#') /* skip #define FOO x ? (x) : x */
+--- 6378,6396 ----
+ * This is a lot of guessing. Watch out for "cond ? func() : foo".
+ */
+ static int
+! cin_is_cpp_baseclass(cached)
+! cpp_baseclass_cache_T *cached; /* input and output */
+ {
++ lpos_T *pos = &cached->lpos; /* find position */
+ char_u *s;
+ int class_or_struct, lookfor_ctor_init, cpp_base_class;
+ linenr_T lnum = curwin->w_cursor.lnum;
+ char_u *line = ml_get_curline();
+
+! if (pos->lnum <= lnum)
+! return cached->found; /* Use the cached result */
+!
+! pos->col = 0;
+
+ s = skipwhite(line);
+ if (*s == '#') /* skip #define FOO x ? (x) : x */
+***************
+*** 6424,6429 ****
+--- 6434,6440 ----
+ --lnum;
+ }
+
++ pos->lnum = lnum;
+ line = ml_get(lnum);
+ s = cin_skipcomment(line);
+ for (;;)
+***************
+*** 6456,6462 ****
+ * cpp-base-class-declaration or constructor-initialization */
+ cpp_base_class = TRUE;
+ lookfor_ctor_init = class_or_struct = FALSE;
+! *col = 0;
+ s = cin_skipcomment(s + 1);
+ }
+ else
+--- 6467,6473 ----
+ * cpp-base-class-declaration or constructor-initialization */
+ cpp_base_class = TRUE;
+ lookfor_ctor_init = class_or_struct = FALSE;
+! pos->col = 0;
+ s = cin_skipcomment(s + 1);
+ }
+ else
+***************
+*** 6497,6520 ****
+ class_or_struct = FALSE;
+ lookfor_ctor_init = FALSE;
+ }
+! else if (*col == 0)
+ {
+ /* it can't be a constructor-initialization any more */
+ lookfor_ctor_init = FALSE;
+
+ /* the first statement starts here: lineup with this one... */
+ if (cpp_base_class)
+! *col = (colnr_T)(s - line);
+ }
+
+ /* When the line ends in a comma don't align with it. */
+ if (lnum == curwin->w_cursor.lnum && *s == ',' && cin_nocode(s + 1))
+! *col = 0;
+
+ s = cin_skipcomment(s + 1);
+ }
+ }
+
+ return cpp_base_class;
+ }
+
+--- 6508,6534 ----
+ class_or_struct = FALSE;
+ lookfor_ctor_init = FALSE;
+ }
+! else if (pos->col == 0)
+ {
+ /* it can't be a constructor-initialization any more */
+ lookfor_ctor_init = FALSE;
+
+ /* the first statement starts here: lineup with this one... */
+ if (cpp_base_class)
+! pos->col = (colnr_T)(s - line);
+ }
+
+ /* When the line ends in a comma don't align with it. */
+ if (lnum == curwin->w_cursor.lnum && *s == ',' && cin_nocode(s + 1))
+! pos->col = 0;
+
+ s = cin_skipcomment(s + 1);
+ }
+ }
+
++ cached->found = cpp_base_class;
++ if (cpp_base_class)
++ pos->lnum = lnum;
+ return cpp_base_class;
+ }
+
+***************
+*** 7047,7053 ****
+ #define LOOKFOR_CPP_BASECLASS 9
+ #define LOOKFOR_ENUM_OR_INIT 10
+ #define LOOKFOR_JS_KEY 11
+! #define LOOKFOR_COMMA 12
+
+ int whilelevel;
+ linenr_T lnum;
+--- 7061,7067 ----
+ #define LOOKFOR_CPP_BASECLASS 9
+ #define LOOKFOR_ENUM_OR_INIT 10
+ #define LOOKFOR_JS_KEY 11
+! #define LOOKFOR_COMMA 12
+
+ int whilelevel;
+ linenr_T lnum;
+***************
+*** 7059,7064 ****
+--- 7073,7079 ----
+ int original_line_islabel;
+ int added_to_amount = 0;
+ int js_cur_has_key = 0;
++ cpp_baseclass_cache_T cache_cpp_baseclass = { FALSE, { MAXLNUM, 0 } };
+
+ /* make a copy, value is changed below */
+ int ind_continuation = curbuf->b_ind_continuation;
+***************
+*** 8089,8095 ****
+ n = FALSE;
+ if (lookfor != LOOKFOR_TERM && curbuf->b_ind_cpp_baseclass > 0)
+ {
+! n = cin_is_cpp_baseclass(&col);
+ l = ml_get_curline();
+ }
+ if (n)
+--- 8104,8110 ----
+ n = FALSE;
+ if (lookfor != LOOKFOR_TERM && curbuf->b_ind_cpp_baseclass > 0)
+ {
+! n = cin_is_cpp_baseclass(&cache_cpp_baseclass);
+ l = ml_get_curline();
+ }
+ if (n)
+***************
+*** 8110,8116 ****
+ }
+ else
+ /* XXX */
+! amount = get_baseclass_amount(col);
+ break;
+ }
+ else if (lookfor == LOOKFOR_CPP_BASECLASS)
+--- 8125,8132 ----
+ }
+ else
+ /* XXX */
+! amount = get_baseclass_amount(
+! cache_cpp_baseclass.lpos.col);
+ break;
+ }
+ else if (lookfor == LOOKFOR_CPP_BASECLASS)
+***************
+*** 8780,8792 ****
+ n = FALSE;
+ if (curbuf->b_ind_cpp_baseclass != 0 && theline[0] != '{')
+ {
+! n = cin_is_cpp_baseclass(&col);
+ l = ml_get_curline();
+ }
+ if (n)
+ {
+ /* XXX */
+! amount = get_baseclass_amount(col);
+ break;
+ }
+
+--- 8796,8808 ----
+ n = FALSE;
+ if (curbuf->b_ind_cpp_baseclass != 0 && theline[0] != '{')
+ {
+! n = cin_is_cpp_baseclass(&cache_cpp_baseclass);
+ l = ml_get_curline();
+ }
+ if (n)
+ {
+ /* XXX */
+! amount = get_baseclass_amount(cache_cpp_baseclass.lpos.col);
+ break;
+ }
+
+*** ../vim-7.4.722/src/version.c 2015-05-04 17:28:17.344445737 +0200
+--- src/version.c 2015-05-04 17:30:58.030650914 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+ { /* Add new patch number below this line */
++ /**/
++ 723,
+ /**/
+
+--
+I have a drinking problem -- I don't have a drink!
+
+ /// Bram Moolenaar -- Bram at 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 ///
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/vim.git/commit/?h=master&id=a3094a90bb94139b90fac0727a583faa4d014a0c
More information about the scm-commits
mailing list