To: vim_dev@googlegroups.com Subject: Patch 7.4.071 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.071 (after 7.4.069) Problem: Passing limits around too often. Solution: Use limits from buffer. Files: src/edit.c, src/misc1.c, src/proto/misc1.pro *** ../vim-7.4.070/src/edit.c 2013-11-05 07:12:59.000000000 +0100 --- src/edit.c 2013-11-06 03:19:10.000000000 +0100 *************** *** 7857,7864 **** if (try_match && keytyped == ':') { p = ml_get_curline(); ! if (cin_iscase(p, FALSE) || cin_isscopedecl(p) ! || cin_islabel(30)) return TRUE; /* Need to get the line again after cin_islabel(). */ p = ml_get_curline(); --- 7857,7863 ---- if (try_match && keytyped == ':') { p = ml_get_curline(); ! if (cin_iscase(p, FALSE) || cin_isscopedecl(p) || cin_islabel()) return TRUE; /* Need to get the line again after cin_islabel(). */ p = ml_get_curline(); *************** *** 7868,7874 **** { p[curwin->w_cursor.col - 1] = ' '; i = (cin_iscase(p, FALSE) || cin_isscopedecl(p) ! || cin_islabel(30)); p = ml_get_curline(); p[curwin->w_cursor.col - 1] = ':'; if (i) --- 7867,7873 ---- { p[curwin->w_cursor.col - 1] = ' '; i = (cin_iscase(p, FALSE) || cin_isscopedecl(p) ! || cin_islabel()); p = ml_get_curline(); p[curwin->w_cursor.col - 1] = ':'; if (i) *** ../vim-7.4.070/src/misc1.c 2013-11-05 07:12:59.000000000 +0100 --- src/misc1.c 2013-11-06 03:46:59.000000000 +0100 *************** *** 5191,5201 **** --- 5191,5208 ---- #if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL) static char_u *skip_string __ARGS((char_u *p)); + static pos_T *ind_find_start_comment __ARGS((void)); /* * Find the start of a comment, not knowing if we are in a comment right now. * Search starts at w_cursor.lnum and goes backwards. */ + static pos_T * + ind_find_start_comment() /* XXX */ + { + return find_start_comment(curbuf->b_ind_maxcomment); + } + pos_T * find_start_comment(ind_maxcomment) /* XXX */ int ind_maxcomment; *************** *** 5313,5319 **** static int cin_isdefault __ARGS((char_u *)); static char_u *after_label __ARGS((char_u *l)); static int get_indent_nolabel __ARGS((linenr_T lnum)); ! static int skip_label __ARGS((linenr_T, char_u **pp, int ind_maxcomment)); static int cin_first_id_amount __ARGS((void)); static int cin_get_equal_amount __ARGS((linenr_T lnum)); static int cin_ispreproc __ARGS((char_u *)); --- 5320,5326 ---- static int cin_isdefault __ARGS((char_u *)); static char_u *after_label __ARGS((char_u *l)); static int get_indent_nolabel __ARGS((linenr_T lnum)); ! static int skip_label __ARGS((linenr_T, char_u **pp)); static int cin_first_id_amount __ARGS((void)); static int cin_get_equal_amount __ARGS((linenr_T lnum)); static int cin_ispreproc __ARGS((char_u *)); *************** *** 5322,5345 **** 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 *)); ! static int cin_iswhileofdo __ARGS((char_u *, linenr_T, int)); static int cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset)); ! static int cin_iswhileofdo_end __ARGS((int terminated, int ind_maxparen, int ind_maxcomment)); 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, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass)); static int cin_ends_in __ARGS((char_u *, char_u *, char_u *)); static int cin_starts_with __ARGS((char_u *s, char *word)); static int cin_skip2pos __ARGS((pos_T *trypos)); ! static pos_T *find_start_brace __ARGS((int)); ! static pos_T *find_match_paren __ARGS((int, int)); ! static int corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos)); static int find_last_paren __ARGS((char_u *l, int start, int end)); ! static int find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment)); static int cin_is_cpp_namespace __ARGS((char_u *)); /* --- 5329,5352 ---- 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)); static int cin_isif __ARGS((char_u *)); static int cin_iselse __ARGS((char_u *)); static int cin_isdo __ARGS((char_u *)); ! static int cin_iswhileofdo __ARGS((char_u *, linenr_T)); 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)); static int cin_skip2pos __ARGS((pos_T *trypos)); ! static pos_T *find_start_brace __ARGS((void)); ! static pos_T *find_match_paren __ARGS((int)); ! static int corr_ind_maxparen __ARGS((pos_T *startpos)); static int find_last_paren __ARGS((char_u *l, int start, int end)); ! static int find_match __ARGS((int lookfor, linenr_T ourscope)); static int cin_is_cpp_namespace __ARGS((char_u *)); /* *************** *** 5444,5451 **** * Note: curwin->w_cursor must be where we are looking for the label. */ int ! cin_islabel(ind_maxcomment) /* XXX */ ! int ind_maxcomment; { char_u *s; --- 5451,5457 ---- * Note: curwin->w_cursor must be where we are looking for the label. */ int ! cin_islabel() /* XXX */ { char_u *s; *************** *** 5479,5485 **** * If we're in a comment now, skip to the start of the comment. */ curwin->w_cursor.col = 0; ! if ((trypos = find_start_comment(ind_maxcomment)) != NULL) /* XXX */ curwin->w_cursor = *trypos; line = ml_get_curline(); --- 5485,5491 ---- * If we're in a comment now, skip to the start of the comment. */ curwin->w_cursor.col = 0; ! if ((trypos = ind_find_start_comment()) != NULL) /* XXX */ curwin->w_cursor = *trypos; line = ml_get_curline(); *************** *** 5725,5734 **** * ^ */ static int ! skip_label(lnum, pp, ind_maxcomment) linenr_T lnum; char_u **pp; - int ind_maxcomment; { char_u *l; int amount; --- 5731,5739 ---- * ^ */ static int ! skip_label(lnum, pp) linenr_T lnum; char_u **pp; { char_u *l; int amount; *************** *** 5738,5745 **** curwin->w_cursor.lnum = lnum; l = ml_get_curline(); /* XXX */ ! if (cin_iscase(l, FALSE) || cin_isscopedecl(l) ! || cin_islabel(ind_maxcomment)) { amount = get_indent_nolabel(lnum); l = after_label(ml_get_curline()); --- 5743,5749 ---- curwin->w_cursor.lnum = lnum; l = ml_get_curline(); /* XXX */ ! if (cin_iscase(l, FALSE) || cin_isscopedecl(l) || cin_islabel()) { amount = get_indent_nolabel(lnum); l = after_label(ml_get_curline()); *************** *** 5983,5994 **** * "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; --- 5987,5996 ---- * "min_lnum" is the line before which we will not be looking. */ static int ! cin_isfuncdecl(sp, first_lnum, min_lnum) char_u **sp; linenr_T first_lnum; linenr_T min_lnum; { char_u *s; linenr_T lnum = first_lnum; *************** *** 6002,6008 **** s = *sp; if (find_last_paren(s, '(', ')') ! && (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL) { lnum = trypos->lnum; if (lnum < min_lnum) --- 6004,6010 ---- s = *sp; if (find_last_paren(s, '(', ')') ! && (trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) { lnum = trypos->lnum; if (lnum < min_lnum) *************** *** 6110,6119 **** * ')' and ';'. The condition may be spread over several lines. */ static int ! cin_iswhileofdo(p, lnum, ind_maxparen) /* XXX */ char_u *p; linenr_T lnum; - int ind_maxparen; { pos_T cursor_save; pos_T *trypos; --- 6112,6120 ---- * ')' and ';'. The condition may be spread over several lines. */ static int ! cin_iswhileofdo(p, lnum) /* XXX */ char_u *p; linenr_T lnum; { pos_T cursor_save; pos_T *trypos; *************** *** 6133,6139 **** ++p; ++curwin->w_cursor.col; } ! if ((trypos = findmatchlimit(NULL, 0, 0, ind_maxparen)) != NULL && *cin_skipcomment(ml_get_pos(trypos) + 1) == ';') retval = TRUE; curwin->w_cursor = cursor_save; --- 6134,6141 ---- ++p; ++curwin->w_cursor.col; } ! if ((trypos = findmatchlimit(NULL, 0, 0, ! curbuf->b_ind_maxparen)) != NULL && *cin_skipcomment(ml_get_pos(trypos) + 1) == ';') retval = TRUE; curwin->w_cursor = cursor_save; *************** *** 6196,6205 **** * Adjust the cursor to the line with "while". */ static int ! cin_iswhileofdo_end(terminated, ind_maxparen, ind_maxcomment) int terminated; - int ind_maxparen; - int ind_maxcomment; { char_u *line; char_u *p; --- 6198,6205 ---- * Adjust the cursor to the line with "while". */ static int ! cin_iswhileofdo_end(terminated) int terminated; { char_u *line; char_u *p; *************** *** 6223,6229 **** * before the matching '('. XXX */ i = (int)(p - line); curwin->w_cursor.col = i; ! trypos = find_match_paren(ind_maxparen, ind_maxcomment); if (trypos != NULL) { s = cin_skipcomment(ml_get(trypos->lnum)); --- 6223,6229 ---- * before the matching '('. XXX */ i = (int)(p - line); curwin->w_cursor.col = i; ! trypos = find_match_paren(curbuf->b_ind_maxparen); if (trypos != NULL) { s = cin_skipcomment(ml_get(trypos->lnum)); *************** *** 6415,6425 **** } static int ! get_baseclass_amount(col, ind_maxparen, ind_maxcomment, ind_cpp_baseclass) int col; - int ind_maxparen; - int ind_maxcomment; - int ind_cpp_baseclass; { int amount; colnr_T vcol; --- 6415,6422 ---- } static int ! get_baseclass_amount(col) int col; { int amount; colnr_T vcol; *************** *** 6429,6439 **** { amount = get_indent(); if (find_last_paren(ml_get_curline(), '(', ')') ! && (trypos = find_match_paren(ind_maxparen, ! ind_maxcomment)) != NULL) amount = get_indent_lnum(trypos->lnum); /* XXX */ if (!cin_ends_in(ml_get_curline(), (char_u *)",", NULL)) ! amount += ind_cpp_baseclass; } else { --- 6426,6435 ---- { amount = get_indent(); if (find_last_paren(ml_get_curline(), '(', ')') ! && (trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) amount = get_indent_lnum(trypos->lnum); /* XXX */ if (!cin_ends_in(ml_get_curline(), (char_u *)",", NULL)) ! amount += curbuf->b_ind_cpp_baseclass; } else { *************** *** 6441,6448 **** getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); amount = (int)vcol; } ! if (amount < ind_cpp_baseclass) ! amount = ind_cpp_baseclass; return amount; } --- 6437,6444 ---- getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); amount = (int)vcol; } ! if (amount < curbuf->b_ind_cpp_baseclass) ! amount = curbuf->b_ind_cpp_baseclass; return amount; } *************** *** 6526,6533 **** /* } */ static pos_T * ! find_start_brace(ind_maxcomment) /* XXX */ ! int ind_maxcomment; { pos_T cursor_save; pos_T *trypos; --- 6522,6528 ---- /* } */ static pos_T * ! find_start_brace() /* XXX */ { pos_T cursor_save; pos_T *trypos; *************** *** 6543,6549 **** pos = NULL; /* ignore the { if it's in a // or / * * / comment */ if ((colnr_T)cin_skip2pos(trypos) == trypos->col ! && (pos = find_start_comment(ind_maxcomment)) == NULL) /* XXX */ break; if (pos != NULL) curwin->w_cursor.lnum = pos->lnum; --- 6538,6544 ---- pos = NULL; /* ignore the { if it's in a // or / * * / comment */ if ((colnr_T)cin_skip2pos(trypos) == trypos->col ! && (pos = ind_find_start_comment()) == NULL) /* XXX */ break; if (pos != NULL) curwin->w_cursor.lnum = pos->lnum; *************** *** 6557,6565 **** * Return NULL if no match found. */ static pos_T * ! find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */ int ind_maxparen; - int ind_maxcomment; { pos_T cursor_save; pos_T *trypos; --- 6552,6559 ---- * Return NULL if no match found. */ static pos_T * ! find_match_paren(ind_maxparen) /* XXX */ int ind_maxparen; { pos_T cursor_save; pos_T *trypos; *************** *** 6576,6582 **** pos_copy = *trypos; /* copy trypos, findmatch will change it */ trypos = &pos_copy; curwin->w_cursor = *trypos; ! if (find_start_comment(ind_maxcomment) != NULL) /* XXX */ trypos = NULL; } } --- 6570,6576 ---- pos_copy = *trypos; /* copy trypos, findmatch will change it */ trypos = &pos_copy; curwin->w_cursor = *trypos; ! if (ind_find_start_comment() != NULL) /* XXX */ trypos = NULL; } } *************** *** 6591,6605 **** * looking a few lines further. */ static int ! corr_ind_maxparen(ind_maxparen, startpos) ! int ind_maxparen; pos_T *startpos; { long n = (long)startpos->lnum - (long)curwin->w_cursor.lnum; ! if (n > 0 && n < ind_maxparen / 2) ! return ind_maxparen - (int)n; ! return ind_maxparen; } /* --- 6585,6598 ---- * looking a few lines further. */ static int ! corr_ind_maxparen(startpos) pos_T *startpos; { long n = (long)startpos->lnum - (long)curwin->w_cursor.lnum; ! if (n > 0 && n < curbuf->b_ind_maxparen / 2) ! return curbuf->b_ind_maxparen - (int)n; ! return curbuf->b_ind_maxparen; } /* *************** *** 6937,6943 **** curwin->w_cursor.col = 0; ! original_line_islabel = cin_islabel(curbuf->b_ind_maxcomment); /* XXX */ /* * #defines and so on always go at the left when included in 'cinkeys'. --- 6930,6936 ---- curwin->w_cursor.col = 0; ! original_line_islabel = cin_islabel(); /* XXX */ /* * #defines and so on always go at the left when included in 'cinkeys'. *************** *** 6973,6979 **** * comment, try using the 'comments' option. */ else if (!cin_iscomment(theline) ! && (trypos = find_start_comment(curbuf->b_ind_maxcomment)) != NULL) /* XXX */ { int lead_start_len = 2; --- 6966,6972 ---- * comment, try using the 'comments' option. */ else if (!cin_iscomment(theline) ! && (trypos = ind_find_start_comment()) != NULL) /* XXX */ { int lead_start_len = 2; *************** *** 7126,7136 **** /* * Are we inside parentheses or braces? */ /* XXX */ ! else if (((trypos = find_match_paren(curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) != NULL && curbuf->b_ind_java == 0) ! || (tryposBrace = ! find_start_brace(curbuf->b_ind_maxcomment)) != NULL || trypos != NULL) { if (trypos != NULL && tryposBrace != NULL) --- 7119,7127 ---- /* * Are we inside parentheses or braces? */ /* XXX */ ! else if (((trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL && curbuf->b_ind_java == 0) ! || (tryposBrace = find_start_brace()) != NULL || trypos != NULL) { if (trypos != NULL && tryposBrace != NULL) *************** *** 7170,7177 **** curwin->w_cursor.lnum = lnum; /* Skip a comment. XXX */ ! if ((trypos = find_start_comment(curbuf->b_ind_maxcomment)) ! != NULL) { lnum = trypos->lnum + 1; continue; --- 7161,7167 ---- curwin->w_cursor.lnum = lnum; /* Skip a comment. XXX */ ! if ((trypos = ind_find_start_comment()) != NULL) { lnum = trypos->lnum + 1; continue; *************** *** 7179,7186 **** /* XXX */ if ((trypos = find_match_paren( ! corr_ind_maxparen(curbuf->b_ind_maxparen, &cur_curpos), ! curbuf->b_ind_maxcomment)) != NULL && trypos->lnum == our_paren_pos.lnum && trypos->col == our_paren_pos.col) { --- 7169,7175 ---- /* XXX */ if ((trypos = find_match_paren( ! corr_ind_maxparen(&cur_curpos))) != NULL && trypos->lnum == our_paren_pos.lnum && trypos->col == our_paren_pos.col) { *************** *** 7223,7230 **** curwin->w_cursor.lnum = outermost.lnum; curwin->w_cursor.col = outermost.col; ! trypos = find_match_paren(curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment); } while (trypos && trypos->lnum == outermost.lnum); curwin->w_cursor = cursor_save; --- 7212,7218 ---- curwin->w_cursor.lnum = outermost.lnum; curwin->w_cursor.col = outermost.col; ! trypos = find_match_paren(curbuf->b_ind_maxparen); } while (trypos && trypos->lnum == outermost.lnum); curwin->w_cursor = cursor_save; *************** *** 7235,7242 **** cin_is_if_for_while_before_offset(line, &outermost.col); } ! amount = skip_label(our_paren_pos.lnum, &look, ! curbuf->b_ind_maxcomment); look = skipwhite(look); if (*look == '(') { --- 7223,7229 ---- cin_is_if_for_while_before_offset(line, &outermost.col); } ! amount = skip_label(our_paren_pos.lnum, &look); look = skipwhite(look); if (*look == '(') { *************** *** 7366,7373 **** { curwin->w_cursor.lnum = our_paren_pos.lnum; curwin->w_cursor.col = col; ! if (find_match_paren(curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment) != NULL) amount += curbuf->b_ind_unclosed2; else { --- 7353,7359 ---- { curwin->w_cursor.lnum = our_paren_pos.lnum; curwin->w_cursor.col = col; ! if (find_match_paren(curbuf->b_ind_maxparen) != NULL) amount += curbuf->b_ind_unclosed2; else { *************** *** 7435,7442 **** */ lnum = ourscope; if (find_last_paren(start, '(', ')') ! && (trypos = find_match_paren(curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) != NULL) lnum = trypos->lnum; /* --- 7421,7428 ---- */ lnum = ourscope; if (find_last_paren(start, '(', ')') ! && (trypos = find_match_paren(curbuf->b_ind_maxparen)) ! != NULL) lnum = trypos->lnum; /* *************** *** 7449,7455 **** && cin_iscase(skipwhite(ml_get_curline()), FALSE))) amount = get_indent(); else ! amount = skip_label(lnum, &l, curbuf->b_ind_maxcomment); start_brace = BRACE_AT_END; } --- 7435,7441 ---- && cin_iscase(skipwhite(ml_get_curline()), FALSE))) amount = get_indent(); else ! amount = skip_label(lnum, &l); start_brace = BRACE_AT_END; } *************** *** 7478,7491 **** lookfor = LOOKFOR_INITIAL; if (cin_iselse(theline)) lookfor = LOOKFOR_IF; ! else if (cin_iswhileofdo(theline, cur_curpos.lnum, ! curbuf->b_ind_maxparen)) /* XXX */ lookfor = LOOKFOR_DO; if (lookfor != LOOKFOR_INITIAL) { curwin->w_cursor.lnum = cur_curpos.lnum; ! if (find_match(lookfor, ourscope, curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment) == OK) { amount = get_indent(); /* XXX */ goto theend; --- 7464,7475 ---- lookfor = LOOKFOR_INITIAL; if (cin_iselse(theline)) lookfor = LOOKFOR_IF; ! else if (cin_iswhileofdo(theline, cur_curpos.lnum)) /* XXX */ lookfor = LOOKFOR_DO; if (lookfor != LOOKFOR_INITIAL) { curwin->w_cursor.lnum = cur_curpos.lnum; ! if (find_match(lookfor, ourscope) == OK) { amount = get_indent(); /* XXX */ goto theend; *************** *** 7611,7617 **** * If we're in a comment now, skip to the start of the * comment. */ ! trypos = find_start_comment(curbuf->b_ind_maxcomment); if (trypos != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; --- 7595,7601 ---- * If we're in a comment now, skip to the start of the * comment. */ ! trypos = ind_find_start_comment(); if (trypos != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; *************** *** 7636,7644 **** * (it's a variable declaration). */ if (start_brace != BRACE_IN_COL0 ! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum, ! 0, curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) { /* if the line is terminated with another ',' * it is a continued variable initialization. --- 7620,7626 ---- * (it's a variable declaration). */ if (start_brace != BRACE_IN_COL0 ! || !cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0)) { /* if the line is terminated with another ',' * it is a continued variable initialization. *************** *** 7670,7681 **** trypos = NULL; if (find_last_paren(l, '(', ')')) trypos = find_match_paren( ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment); if (trypos == NULL && find_last_paren(l, '{', '}')) ! trypos = find_start_brace( ! curbuf->b_ind_maxcomment); if (trypos != NULL) { --- 7652,7661 ---- trypos = NULL; if (find_last_paren(l, '(', ')')) trypos = find_match_paren( ! curbuf->b_ind_maxparen); if (trypos == NULL && find_last_paren(l, '{', '}')) ! trypos = find_start_brace(); if (trypos != NULL) { *************** *** 7733,7740 **** /* If we're in a comment now, skip to the start of * the comment. */ ! trypos = find_start_comment( ! curbuf->b_ind_maxcomment); if (trypos != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; --- 7713,7719 ---- /* If we're in a comment now, skip to the start of * the comment. */ ! trypos = ind_find_start_comment(); if (trypos != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; *************** *** 7764,7771 **** /* * If we're in a comment now, skip to the start of the comment. */ /* XXX */ ! if ((trypos = find_start_comment(curbuf->b_ind_maxcomment)) ! != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; --- 7743,7749 ---- /* * If we're in a comment now, skip to the start of the comment. */ /* XXX */ ! if ((trypos = ind_find_start_comment()) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; *************** *** 7819,7826 **** * Check that this case label is not for another * switch() */ /* XXX */ ! if ((trypos = find_start_brace( ! curbuf->b_ind_maxcomment)) == NULL || trypos->lnum == ourscope) { amount = get_indent(); /* XXX */ --- 7797,7803 ---- * Check that this case label is not for another * switch() */ /* XXX */ ! if ((trypos = find_start_brace()) == NULL || trypos->lnum == ourscope) { amount = get_indent(); /* XXX */ *************** *** 7894,7901 **** */ if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL) { ! if (find_last_paren(l, '{', '}') && (trypos = ! find_start_brace(curbuf->b_ind_maxcomment)) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; --- 7871,7878 ---- */ if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL) { ! if (find_last_paren(l, '{', '}') ! && (trypos = find_start_brace()) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; *************** *** 7906,7912 **** /* * Ignore jump labels with nothing after them. */ ! if (!curbuf->b_ind_js && cin_islabel(curbuf->b_ind_maxcomment)) { l = after_label(ml_get_curline()); if (l == NULL || cin_nocode(l)) --- 7883,7889 ---- /* * Ignore jump labels with nothing after them. */ ! if (!curbuf->b_ind_js && cin_islabel()) { l = after_label(ml_get_curline()); if (l == NULL || cin_nocode(l)) *************** *** 7952,7961 **** } else /* XXX */ ! amount = get_baseclass_amount(col, ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment, ! curbuf->b_ind_cpp_baseclass); break; } else if (lookfor == LOOKFOR_CPP_BASECLASS) --- 7929,7935 ---- } else /* XXX */ ! amount = get_baseclass_amount(col); break; } else if (lookfor == LOOKFOR_CPP_BASECLASS) *************** *** 7997,8005 **** * matching it will take us back to the start of the line. */ (void)find_last_paren(l, '(', ')'); ! trypos = find_match_paren( ! corr_ind_maxparen(curbuf->b_ind_maxparen, ! &cur_curpos), curbuf->b_ind_maxcomment); /* * If we are looking for ',', we also look for matching --- 7971,7977 ---- * matching it will take us back to the start of the line. */ (void)find_last_paren(l, '(', ')'); ! trypos = find_match_paren(corr_ind_maxparen(&cur_curpos)); /* * If we are looking for ',', we also look for matching *************** *** 8007,8013 **** */ if (trypos == NULL && terminated == ',' && find_last_paren(l, '{', '}')) ! trypos = find_start_brace(curbuf->b_ind_maxcomment); if (trypos != NULL) { --- 7979,7985 ---- */ if (trypos == NULL && terminated == ',' && find_last_paren(l, '{', '}')) ! trypos = find_start_brace(); if (trypos != NULL) { *************** *** 8051,8058 **** * ignoring any jump label. XXX */ if (!curbuf->b_ind_js) ! cur_amount = skip_label(curwin->w_cursor.lnum, ! &l, curbuf->b_ind_maxcomment); else cur_amount = get_indent(); /* --- 8023,8029 ---- * ignoring any jump label. XXX */ if (!curbuf->b_ind_js) ! cur_amount = skip_label(curwin->w_cursor.lnum, &l); else cur_amount = get_indent(); /* *************** *** 8162,8172 **** curwin->w_cursor.col = (colnr_T)(l - ml_get_curline()) + 1; ! if ((trypos = find_start_brace( ! curbuf->b_ind_maxcomment)) == NULL ! || find_match(LOOKFOR_IF, trypos->lnum, ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment) == FAIL) break; } } --- 8133,8141 ---- curwin->w_cursor.col = (colnr_T)(l - ml_get_curline()) + 1; ! if ((trypos = find_start_brace()) == NULL ! || find_match(LOOKFOR_IF, trypos->lnum) ! == FAIL) break; } } *************** *** 8261,8268 **** * If so: Ignore until the matching "do". */ /* XXX */ ! else if (cin_iswhileofdo_end(terminated, curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) { /* * Found an unterminated line after a while ();, line up --- 8230,8236 ---- * If so: Ignore until the matching "do". */ /* XXX */ ! else if (cin_iswhileofdo_end(terminated)) { /* * Found an unterminated line after a while ();, line up *************** *** 8380,8387 **** l = ml_get_curline(); if (find_last_paren(l, '(', ')') && (trypos = find_match_paren( ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) != NULL) { /* * Check if we are on a case label now. This is --- 8348,8354 ---- l = ml_get_curline(); if (find_last_paren(l, '(', ')') && (trypos = find_match_paren( ! curbuf->b_ind_maxparen)) != NULL) { /* * Check if we are on a case label now. This is *************** *** 8415,8422 **** * Get indent and pointer to text for current line, * ignoring any jump label. */ ! amount = skip_label(curwin->w_cursor.lnum, ! &l, curbuf->b_ind_maxcomment); if (theline[0] == '{') amount += curbuf->b_ind_open_extra; --- 8382,8388 ---- * Get indent and pointer to text for current line, * ignoring any jump label. */ ! amount = skip_label(curwin->w_cursor.lnum, &l); if (theline[0] == '{') amount += curbuf->b_ind_open_extra; *************** *** 8439,8449 **** && cin_iselse(l) && whilelevel == 0) { ! if ((trypos = find_start_brace( ! curbuf->b_ind_maxcomment)) == NULL ! || find_match(LOOKFOR_IF, trypos->lnum, ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment) == FAIL) break; continue; } --- 8405,8413 ---- && cin_iselse(l) && whilelevel == 0) { ! if ((trypos = find_start_brace()) == NULL ! || find_match(LOOKFOR_IF, trypos->lnum) ! == FAIL) break; continue; } *************** *** 8453,8461 **** * that block. */ l = ml_get_curline(); ! if (find_last_paren(l, '{', '}') ! && (trypos = find_start_brace( ! curbuf->b_ind_maxcomment)) != NULL) /* XXX */ { curwin->w_cursor = *trypos; /* if not "else {" check for terminated again */ --- 8417,8424 ---- * that block. */ l = ml_get_curline(); ! if (find_last_paren(l, '{', '}') /* XXX */ ! && (trypos = find_start_brace()) != NULL) { curwin->w_cursor = *trypos; /* if not "else {" check for terminated again */ *************** *** 8516,8524 **** && !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, ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment) && !cin_isterminated(theline, FALSE, TRUE)) { amount = curbuf->b_ind_func_type; --- 8479,8485 ---- && !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) && !cin_isterminated(theline, FALSE, TRUE)) { amount = curbuf->b_ind_func_type; *************** *** 8540,8547 **** /* * If we're in a comment now, skip to the start of the comment. */ /* XXX */ ! if ((trypos = find_start_comment( ! curbuf->b_ind_maxcomment)) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; --- 8501,8507 ---- /* * If we're in a comment now, skip to the start of the comment. */ /* XXX */ ! if ((trypos = ind_find_start_comment()) != NULL) { curwin->w_cursor.lnum = trypos->lnum + 1; curwin->w_cursor.col = 0; *************** *** 8561,8569 **** if (n) { /* XXX */ ! amount = get_baseclass_amount(col, curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment, ! curbuf->b_ind_cpp_baseclass); break; } --- 8521,8527 ---- if (n) { /* XXX */ ! amount = get_baseclass_amount(col); break; } *************** *** 8595,8602 **** /* take us back to opening paren */ if (find_last_paren(l, '(', ')') && (trypos = find_match_paren( ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) != NULL) curwin->w_cursor = *trypos; /* For a line ending in ',' that is a continuation line go --- 8553,8559 ---- /* take us back to opening paren */ if (find_last_paren(l, '(', ')') && (trypos = find_match_paren( ! curbuf->b_ind_maxparen)) != NULL) curwin->w_cursor = *trypos; /* For a line ending in ',' that is a continuation line go *************** *** 8627,8635 **** * 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, ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) /* XXX */ break; l = ml_get_curline(); --- 8584,8590 ---- * 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)) /* XXX */ break; l = ml_get_curline(); *************** *** 8677,8685 **** * line (and the ones that follow) needs to be indented as * parameters. */ ! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0, ! curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) { amount = curbuf->b_ind_param; break; --- 8632,8638 ---- * line (and the ones that follow) needs to be indented as * parameters. */ ! if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0)) { amount = curbuf->b_ind_param; break; *************** *** 8710,8717 **** */ find_last_paren(l, '(', ')'); ! if ((trypos = find_match_paren(curbuf->b_ind_maxparen, ! curbuf->b_ind_maxcomment)) != NULL) curwin->w_cursor = *trypos; amount = get_indent(); /* XXX */ break; --- 8663,8669 ---- */ find_last_paren(l, '(', ')'); ! if ((trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) curwin->w_cursor = *trypos; amount = get_indent(); /* XXX */ break; *************** *** 8754,8764 **** } static int ! find_match(lookfor, ourscope, ind_maxparen, ind_maxcomment) int lookfor; linenr_T ourscope; - int ind_maxparen; - int ind_maxcomment; { char_u *look; pos_T *theirscope; --- 8706,8714 ---- } static int ! find_match(lookfor, ourscope) int lookfor; linenr_T ourscope; { char_u *look; pos_T *theirscope; *************** *** 8788,8800 **** if (cin_iselse(look) || cin_isif(look) || cin_isdo(look) /* XXX */ ! || cin_iswhileofdo(look, curwin->w_cursor.lnum, ind_maxparen)) { /* * if we've gone outside the braces entirely, * we must be out of scope... */ ! theirscope = find_start_brace(ind_maxcomment); /* XXX */ if (theirscope == NULL) break; --- 8738,8750 ---- if (cin_iselse(look) || cin_isif(look) || cin_isdo(look) /* XXX */ ! || cin_iswhileofdo(look, curwin->w_cursor.lnum)) { /* * if we've gone outside the braces entirely, * we must be out of scope... */ ! theirscope = find_start_brace(); /* XXX */ if (theirscope == NULL) break; *************** *** 8832,8838 **** * if it was a "while" then we need to go back to * another "do", so increment whilelevel. XXX */ ! if (cin_iswhileofdo(look, curwin->w_cursor.lnum, ind_maxparen)) { ++whilelevel; continue; --- 8782,8788 ---- * if it was a "while" then we need to go back to * another "do", so increment whilelevel. XXX */ ! if (cin_iswhileofdo(look, curwin->w_cursor.lnum)) { ++whilelevel; continue; *** ../vim-7.4.070/src/proto/misc1.pro 2013-11-05 07:12:59.000000000 +0100 --- src/proto/misc1.pro 2013-11-06 03:19:45.000000000 +0100 *************** *** 81,87 **** char_u *FullName_save __ARGS((char_u *fname, int force)); pos_T *find_start_comment __ARGS((int ind_maxcomment)); void do_c_expr_indent __ARGS((void)); ! int cin_islabel __ARGS((int ind_maxcomment)); int cin_iscase __ARGS((char_u *s, int strict)); int cin_isscopedecl __ARGS((char_u *s)); void parse_cino __ARGS((buf_T *buf)); --- 81,87 ---- char_u *FullName_save __ARGS((char_u *fname, int force)); pos_T *find_start_comment __ARGS((int ind_maxcomment)); void do_c_expr_indent __ARGS((void)); ! int cin_islabel __ARGS((void)); int cin_iscase __ARGS((char_u *s, int strict)); int cin_isscopedecl __ARGS((char_u *s)); void parse_cino __ARGS((buf_T *buf)); *** ../vim-7.4.070/src/version.c 2013-11-05 17:40:47.000000000 +0100 --- src/version.c 2013-11-06 03:43:44.000000000 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 71, /**/ -- A law to reduce crime states: "It is mandatory for a motorist with criminal intentions to stop at the city limits and telephone the chief of police as he is entering the town. [real standing law in Washington, United States of America] /// 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 ///