changeset 30531:2650a01b8bbc v9.0.0601

patch 9.0.0601: too much indent Commit: https://github.com/vim/vim/commit/368aa6908862874fdb901c534ee99033ac977e4a Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Sep 27 11:46:48 2022 +0100 patch 9.0.0601: too much indent Problem: Too much indent. Solution: Return out early from a funtion. (Yegappan Lakshmanan, close #11238)
author Bram Moolenaar <Bram@vim.org>
date Tue, 27 Sep 2022 13:00:04 +0200
parents f501627bf532
children e8bb811789c1
files src/beval.c src/blob.c src/version.c
diffstat 3 files changed, 278 insertions(+), 229 deletions(-) [+]
line wrap: on
line diff
--- a/src/beval.c
+++ b/src/beval.c
@@ -39,94 +39,94 @@ find_word_under_cursor(
 
     *textp = NULL;
     wp = mouse_find_win(&row, &col, FAIL_POPUP);
-    if (wp != NULL && row >= 0 && row < wp->w_height && col < wp->w_width)
-    {
-	// Found a window and the cursor is in the text.  Now find the line
-	// number.
-	if (!mouse_comp_pos(wp, &row, &col, &lnum, NULL))
-	{
-	    // Not past end of the file.
-	    lbuf = ml_get_buf(wp->w_buffer, lnum, FALSE);
-	    if (col <= win_linetabsize(wp, lnum, lbuf, (colnr_T)MAXCOL))
-	    {
-		// Not past end of line.
-		if (getword)
-		{
-		    // For Netbeans we get the relevant part of the line
-		    // instead of the whole line.
-		    int		len;
-		    pos_T	*spos = NULL, *epos = NULL;
+    if (wp == NULL || row < 0 || row >= wp->w_height || col >= wp->w_width)
+	return FAIL;
 
-		    if (VIsual_active)
-		    {
-			if (LT_POS(VIsual, curwin->w_cursor))
-			{
-			    spos = &VIsual;
-			    epos = &curwin->w_cursor;
-			}
-			else
-			{
-			    spos = &curwin->w_cursor;
-			    epos = &VIsual;
-			}
-		    }
+    // Found a window and the cursor is in the text.  Now find the line
+    // number.
+    if (mouse_comp_pos(wp, &row, &col, &lnum, NULL))
+	return FAIL;		// position is below the last line
 
-		    col = vcol2col(wp, lnum, col);
-		    scol = col;
+    // Not past end of the file.
+    lbuf = ml_get_buf(wp->w_buffer, lnum, FALSE);
+    if (col > win_linetabsize(wp, lnum, lbuf, (colnr_T)MAXCOL))
+	return FAIL;		// past end of line
 
-		    if (VIsual_active
-			    && wp->w_buffer == curwin->w_buffer
-			    && (lnum == spos->lnum
-				? col >= (int)spos->col
-				: lnum > spos->lnum)
-			    && (lnum == epos->lnum
-				? col <= (int)epos->col
-				: lnum < epos->lnum))
-		    {
-			// Visual mode and pointing to the line with the
-			// Visual selection: return selected text, with a
-			// maximum of one line.
-			if (spos->lnum != epos->lnum || spos->col == epos->col)
-			    return FAIL;
+    // Not past end of line.
+    if (getword)
+    {
+	// For Netbeans we get the relevant part of the line
+	// instead of the whole line.
+	int		len;
+	pos_T	*spos = NULL, *epos = NULL;
 
-			lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE);
-			len = epos->col - spos->col;
-			if (*p_sel != 'e')
-			    len += mb_ptr2len(lbuf + epos->col);
-			lbuf = vim_strnsave(lbuf + spos->col, len);
-			lnum = spos->lnum;
-			col = spos->col;
-			scol = col;
-		    }
-		    else
-		    {
-			// Find the word under the cursor.
-			++emsg_off;
-			len = find_ident_at_pos(wp, lnum, (colnr_T)col,
-							  &lbuf, &scol, flags);
-			--emsg_off;
-			if (len == 0)
-			    return FAIL;
-			lbuf = vim_strnsave(lbuf, len);
-		    }
-		}
-		else
-		    scol = col;
-
-		if (winp != NULL)
-		    *winp = wp;
-		if (lnump != NULL)
-		    *lnump = lnum;
-		*textp = lbuf;
-		if (colp != NULL)
-		    *colp = col;
-		if (startcolp != NULL)
-		    *startcolp = scol;
-		return OK;
+	if (VIsual_active)
+	{
+	    if (LT_POS(VIsual, curwin->w_cursor))
+	    {
+		spos = &VIsual;
+		epos = &curwin->w_cursor;
+	    }
+	    else
+	    {
+		spos = &curwin->w_cursor;
+		epos = &VIsual;
 	    }
 	}
+
+	col = vcol2col(wp, lnum, col);
+	scol = col;
+
+	if (VIsual_active
+		&& wp->w_buffer == curwin->w_buffer
+		&& (lnum == spos->lnum
+		    ? col >= (int)spos->col
+		    : lnum > spos->lnum)
+		&& (lnum == epos->lnum
+		    ? col <= (int)epos->col
+		    : lnum < epos->lnum))
+	{
+	    // Visual mode and pointing to the line with the
+	    // Visual selection: return selected text, with a
+	    // maximum of one line.
+	    if (spos->lnum != epos->lnum || spos->col == epos->col)
+		return FAIL;
+
+	    lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE);
+	    len = epos->col - spos->col;
+	    if (*p_sel != 'e')
+		len += mb_ptr2len(lbuf + epos->col);
+	    lbuf = vim_strnsave(lbuf + spos->col, len);
+	    lnum = spos->lnum;
+	    col = spos->col;
+	    scol = col;
+	}
+	else
+	{
+	    // Find the word under the cursor.
+	    ++emsg_off;
+	    len = find_ident_at_pos(wp, lnum, (colnr_T)col,
+		    &lbuf, &scol, flags);
+	    --emsg_off;
+	    if (len == 0)
+		return FAIL;
+	    lbuf = vim_strnsave(lbuf, len);
+	}
     }
-    return FAIL;
+    else
+	scol = col;
+
+    if (winp != NULL)
+	*winp = wp;
+    if (lnump != NULL)
+	*lnump = lnum;
+    *textp = lbuf;
+    if (colp != NULL)
+	*colp = col;
+    if (startcolp != NULL)
+	*startcolp = scol;
+
+    return OK;
 }
 #endif
 
@@ -220,6 +220,92 @@ can_use_beval(void)
 	     ) && msg_scrolled == 0;
 }
 
+# ifdef FEAT_EVAL
+/*
+ * Evaluate the expression 'bexpr' and set the text in the balloon 'beval'.
+ */
+    static void
+bexpr_eval(
+	BalloonEval	*beval,
+	char_u		*bexpr,
+	win_T		*wp,
+	linenr_T	lnum,
+	int		col,
+	char_u		*text)
+{
+    win_T	*cw;
+    long	winnr = 0;
+    buf_T	*save_curbuf;
+    int		use_sandbox;
+    static char_u  *result = NULL;
+    size_t	len;
+
+    sctx_T	save_sctx = current_sctx;
+
+    // Convert window pointer to number.
+    for (cw = firstwin; cw != wp; cw = cw->w_next)
+	++winnr;
+
+    set_vim_var_nr(VV_BEVAL_BUFNR, (long)wp->w_buffer->b_fnum);
+    set_vim_var_nr(VV_BEVAL_WINNR, winnr);
+    set_vim_var_nr(VV_BEVAL_WINID, wp->w_id);
+    set_vim_var_nr(VV_BEVAL_LNUM, (long)lnum);
+    set_vim_var_nr(VV_BEVAL_COL, (long)(col + 1));
+    set_vim_var_string(VV_BEVAL_TEXT, text, -1);
+    vim_free(text);
+
+    /*
+     * Temporarily change the curbuf, so that we can determine whether
+     * the buffer-local balloonexpr option was set insecurely.
+     */
+    save_curbuf = curbuf;
+    curbuf = wp->w_buffer;
+    use_sandbox = was_set_insecurely((char_u *)"balloonexpr",
+	    *curbuf->b_p_bexpr == NUL ? 0 : OPT_LOCAL);
+    curbuf = save_curbuf;
+    if (use_sandbox)
+	++sandbox;
+    ++textlock;
+
+    if (bexpr == p_bexpr)
+    {
+	sctx_T *sp = get_option_sctx("balloonexpr");
+
+	if (sp != NULL)
+	    current_sctx = *sp;
+    }
+    else
+	current_sctx = curbuf->b_p_script_ctx[BV_BEXPR];
+
+    vim_free(result);
+    result = eval_to_string(bexpr, TRUE);
+
+    // Remove one trailing newline, it is added when the result was a
+    // list and it's hardly ever useful.  If the user really wants a
+    // trailing newline he can add two and one remains.
+    if (result != NULL)
+    {
+	len = STRLEN(result);
+	if (len > 0 && result[len - 1] == NL)
+	    result[len - 1] = NUL;
+    }
+
+    if (use_sandbox)
+	--sandbox;
+    --textlock;
+    current_sctx = save_sctx;
+
+    set_vim_var_string(VV_BEVAL_TEXT, NULL, -1);
+    if (result != NULL && result[0] != NUL)
+	post_balloon(beval, result, NULL);
+
+    // The 'balloonexpr' evaluation may show something on the screen
+    // that requires a screen update.
+    if (must_redraw)
+	redraw_after_callback(FALSE, FALSE);
+}
+# endif
+
 /*
  * Common code, invoked when the mouse is resting for a moment.
  */
@@ -229,15 +315,9 @@ general_beval_cb(BalloonEval *beval, int
 #ifdef FEAT_EVAL
     win_T	*wp;
     int		col;
-    int		use_sandbox;
     linenr_T	lnum;
     char_u	*text;
-    static char_u  *result = NULL;
-    long	winnr = 0;
     char_u	*bexpr;
-    buf_T	*save_curbuf;
-    size_t	len;
-    win_T	*cw;
 #endif
     static int	recursive = FALSE;
 
@@ -259,70 +339,7 @@ general_beval_cb(BalloonEval *beval, int
 						    : wp->w_buffer->b_p_bexpr;
 	if (*bexpr != NUL)
 	{
-	    sctx_T	save_sctx = current_sctx;
-
-	    // Convert window pointer to number.
-	    for (cw = firstwin; cw != wp; cw = cw->w_next)
-		++winnr;
-
-	    set_vim_var_nr(VV_BEVAL_BUFNR, (long)wp->w_buffer->b_fnum);
-	    set_vim_var_nr(VV_BEVAL_WINNR, winnr);
-	    set_vim_var_nr(VV_BEVAL_WINID, wp->w_id);
-	    set_vim_var_nr(VV_BEVAL_LNUM, (long)lnum);
-	    set_vim_var_nr(VV_BEVAL_COL, (long)(col + 1));
-	    set_vim_var_string(VV_BEVAL_TEXT, text, -1);
-	    vim_free(text);
-
-	    /*
-	     * Temporarily change the curbuf, so that we can determine whether
-	     * the buffer-local balloonexpr option was set insecurely.
-	     */
-	    save_curbuf = curbuf;
-	    curbuf = wp->w_buffer;
-	    use_sandbox = was_set_insecurely((char_u *)"balloonexpr",
-				 *curbuf->b_p_bexpr == NUL ? 0 : OPT_LOCAL);
-	    curbuf = save_curbuf;
-	    if (use_sandbox)
-		++sandbox;
-	    ++textlock;
-
-	    if (bexpr == p_bexpr)
-	    {
-		sctx_T *sp = get_option_sctx("balloonexpr");
-
-		if (sp != NULL)
-		    current_sctx = *sp;
-	    }
-	    else
-		current_sctx = curbuf->b_p_script_ctx[BV_BEXPR];
-
-	    vim_free(result);
-	    result = eval_to_string(bexpr, TRUE);
-
-	    // Remove one trailing newline, it is added when the result was a
-	    // list and it's hardly ever useful.  If the user really wants a
-	    // trailing newline he can add two and one remains.
-	    if (result != NULL)
-	    {
-		len = STRLEN(result);
-		if (len > 0 && result[len - 1] == NL)
-		    result[len - 1] = NUL;
-	    }
-
-	    if (use_sandbox)
-		--sandbox;
-	    --textlock;
-	    current_sctx = save_sctx;
-
-	    set_vim_var_string(VV_BEVAL_TEXT, NULL, -1);
-	    if (result != NULL && result[0] != NUL)
-		post_balloon(beval, result, NULL);
-
-	    // The 'balloonexpr' evaluation may show something on the screen
-	    // that requires a screen update.
-	    if (must_redraw)
-		redraw_after_callback(FALSE, FALSE);
-
+	    bexpr_eval(beval, bexpr, wp, lnum, col, text);
 	    recursive = FALSE;
 	    return;
 	}
--- a/src/blob.c
+++ b/src/blob.c
@@ -60,29 +60,31 @@ rettv_blob_set(typval_T *rettv, blob_T *
     int
 blob_copy(blob_T *from, typval_T *to)
 {
-    int	    ret = OK;
+    int		len;
 
     to->v_type = VAR_BLOB;
     to->v_lock = 0;
     if (from == NULL)
+    {
 	to->vval.v_blob = NULL;
-    else if (rettv_blob_alloc(to) == FAIL)
-	ret = FAIL;
-    else
-    {
-	int  len = from->bv_ga.ga_len;
+	return OK;
+    }
+
+    if (rettv_blob_alloc(to) == FAIL)
+	return FAIL;
 
-	if (len > 0)
-	{
-	    to->vval.v_blob->bv_ga.ga_data =
-					 vim_memsave(from->bv_ga.ga_data, len);
-	    if (to->vval.v_blob->bv_ga.ga_data == NULL)
-		len = 0;
-	}
-	to->vval.v_blob->bv_ga.ga_len = len;
-	to->vval.v_blob->bv_ga.ga_maxlen = len;
+    len = from->bv_ga.ga_len;
+    if (len > 0)
+    {
+	to->vval.v_blob->bv_ga.ga_data =
+	    vim_memsave(from->bv_ga.ga_data, len);
+	if (to->vval.v_blob->bv_ga.ga_data == NULL)
+	    len = 0;
     }
-    return ret;
+    to->vval.v_blob->bv_ga.ga_len = len;
+    to->vval.v_blob->bv_ga.ga_maxlen = len;
+
+    return OK;
 }
 
     void
@@ -280,6 +282,93 @@ failed:
     return NULL;
 }
 
+/*
+ * Returns a slice of 'blob' from index 'n1' to 'n2' in 'rettv'.  The length of
+ * the blob is 'len'.  Returns an empty blob if the indexes are out of range.
+ */
+    static int
+blob_slice(
+	blob_T		*blob,
+	long		len,
+	varnumber_T	n1,
+	varnumber_T	n2,
+	int		exclusive,
+	typval_T	*rettv)
+{
+    if (n1 < 0)
+    {
+	n1 = len + n1;
+	if (n1 < 0)
+	    n1 = 0;
+    }
+    if (n2 < 0)
+	n2 = len + n2;
+    else if (n2 >= len)
+	n2 = len - (exclusive ? 0 : 1);
+    if (exclusive)
+	--n2;
+    if (n1 >= len || n2 < 0 || n1 > n2)
+    {
+	clear_tv(rettv);
+	rettv->v_type = VAR_BLOB;
+	rettv->vval.v_blob = NULL;
+    }
+    else
+    {
+	blob_T  *new_blob = blob_alloc();
+	long    i;
+
+	if (new_blob != NULL)
+	{
+	    if (ga_grow(&new_blob->bv_ga, n2 - n1 + 1) == FAIL)
+	    {
+		blob_free(new_blob);
+		return FAIL;
+	    }
+	    new_blob->bv_ga.ga_len = n2 - n1 + 1;
+	    for (i = n1; i <= n2; i++)
+		blob_set(new_blob, i - n1, blob_get(blob, i));
+
+	    clear_tv(rettv);
+	    rettv_blob_set(rettv, new_blob);
+	}
+    }
+
+    return OK;
+}
+
+/*
+ * Return the byte value in 'blob' at index 'idx' in 'rettv'.  If the index is
+ * too big or negative that is an error.  The length of the blob is 'len'.
+ */
+    static int
+blob_index(
+	blob_T		*blob,
+	int		len,
+	varnumber_T	idx,
+	typval_T	*rettv)
+{
+    // The resulting variable is a byte value.
+    // If the index is too big or negative that is an error.
+    if (idx < 0)
+	idx = len + idx;
+    if (idx < len && idx >= 0)
+    {
+	int v = blob_get(blob, idx);
+
+	clear_tv(rettv);
+	rettv->v_type = VAR_NUMBER;
+	rettv->vval.v_number = v;
+    }
+    else
+    {
+	semsg(_(e_blob_index_out_of_range_nr), idx);
+	return FAIL;
+    }
+
+    return OK;
+}
+
     int
 blob_slice_or_index(
 	blob_T		*blob,
@@ -289,71 +378,12 @@ blob_slice_or_index(
 	int		exclusive,
 	typval_T	*rettv)
 {
-    long	    len = blob_len(blob);
+    long	len = blob_len(blob);
 
     if (is_range)
-    {
-	// The resulting variable is a sub-blob.  If the indexes
-	// are out of range the result is empty.
-	if (n1 < 0)
-	{
-	    n1 = len + n1;
-	    if (n1 < 0)
-		n1 = 0;
-	}
-	if (n2 < 0)
-	    n2 = len + n2;
-	else if (n2 >= len)
-	    n2 = len - (exclusive ? 0 : 1);
-	if (exclusive)
-	    --n2;
-	if (n1 >= len || n2 < 0 || n1 > n2)
-	{
-	    clear_tv(rettv);
-	    rettv->v_type = VAR_BLOB;
-	    rettv->vval.v_blob = NULL;
-	}
-	else
-	{
-	    blob_T  *new_blob = blob_alloc();
-	    long    i;
-
-	    if (new_blob != NULL)
-	    {
-		if (ga_grow(&new_blob->bv_ga, n2 - n1 + 1) == FAIL)
-		{
-		    blob_free(new_blob);
-		    return FAIL;
-		}
-		new_blob->bv_ga.ga_len = n2 - n1 + 1;
-		for (i = n1; i <= n2; i++)
-		    blob_set(new_blob, i - n1, blob_get(blob, i));
-
-		clear_tv(rettv);
-		rettv_blob_set(rettv, new_blob);
-	    }
-	}
-    }
+	return blob_slice(blob, len, n1, n2, exclusive, rettv);
     else
-    {
-	// The resulting variable is a byte value.
-	// If the index is too big or negative that is an error.
-	if (n1 < 0)
-	    n1 = len + n1;
-	if (n1 < len && n1 >= 0)
-	{
-	    int v = blob_get(blob, n1);
-
-	    clear_tv(rettv);
-	    rettv->v_type = VAR_NUMBER;
-	    rettv->vval.v_number = v;
-	}
-	else
-	{
-	    semsg(_(e_blob_index_out_of_range_nr), n1);
-	    return FAIL;
-	}
-    }
+	return blob_index(blob, len, n1, rettv);
     return OK;
 }
 
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    601,
+/**/
     600,
 /**/
     599,