changeset 20830:9064044fd4f6 v8.2.0967

patch 8.2.0967: unnecessary type casts for vim_strnsave() Commit: https://github.com/vim/vim/commit/71ccd03ee8a43b20000214a9c99dcc90f039edca Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 12 22:59:11 2020 +0200 patch 8.2.0967: unnecessary type casts for vim_strnsave() Problem: Unnecessary type casts for vim_strnsave(). Solution: Remove the type casts.
author Bram Moolenaar <Bram@vim.org>
date Fri, 12 Jun 2020 23:00:04 +0200
parents 3d0d6410aecd
children 415f3c972a53
files src/evalvars.c src/ex_cmds.c src/ex_eval.c src/fileio.c src/filepath.c src/findfile.c src/highlight.c src/if_perl.xs src/if_ruby.c src/insexpand.c src/json.c src/mark.c src/memline.c src/menu.c src/misc1.c src/ops.c src/os_win32.c src/regexp.c src/regexp_bt.c src/regexp_nfa.c src/register.c src/search.c src/sign.c src/syntax.c src/term.c src/terminal.c src/undo.c src/usercmd.c src/userfunc.c src/version.c src/vim9compile.c
diffstat 31 files changed, 66 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -2534,7 +2534,7 @@ lookup_scriptvar(char_u *name, size_t le
     }
     else
     {
-	p = vim_strnsave(name, (int)len);
+	p = vim_strnsave(name, len);
 	if (p == NULL)
 	    return NULL;
     }
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3221,7 +3221,7 @@ ex_append(exarg_T *eap)
 	    p = vim_strchr(eap->nextcmd, NL);
 	    if (p == NULL)
 		p = eap->nextcmd + STRLEN(eap->nextcmd);
-	    theline = vim_strnsave(eap->nextcmd, (int)(p - eap->nextcmd));
+	    theline = vim_strnsave(eap->nextcmd, p - eap->nextcmd);
 	    if (*p != NUL)
 		++p;
 	    eap->nextcmd = p;
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -439,7 +439,7 @@ get_exception_string(
 	{
 	    cmdlen = (int)STRLEN(cmdname);
 	    ret = (char *)vim_strnsave((char_u *)"Vim(",
-					   4 + cmdlen + 2 + (int)STRLEN(mesg));
+						4 + cmdlen + 2 + STRLEN(mesg));
 	    if (ret == NULL)
 		return ret;
 	    STRCPY(&ret[4], cmdname);
@@ -448,7 +448,7 @@ get_exception_string(
 	}
 	else
 	{
-	    ret = (char *)vim_strnsave((char_u *)"Vim:", 4 + (int)STRLEN(mesg));
+	    ret = (char *)vim_strnsave((char_u *)"Vim:", 4 + STRLEN(mesg));
 	    if (ret == NULL)
 		return ret;
 	    val = ret + 4;
@@ -806,7 +806,7 @@ report_pending(int action, int pending, 
 	    if (pending & CSTP_THROW)
 	    {
 		vim_snprintf((char *)IObuff, IOSIZE, mesg, _("Exception"));
-		mesg = (char *)vim_strnsave(IObuff, (int)STRLEN(IObuff) + 4);
+		mesg = (char *)vim_strnsave(IObuff, STRLEN(IObuff) + 4);
 		STRCAT(mesg, ": %s");
 		s = (char *)((except_T *)value)->value;
 	    }
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2724,7 +2724,7 @@ next_fenc(char_u **pp, int *alloced)
     }
     else
     {
-	r = vim_strnsave(*pp, (int)(p - *pp));
+	r = vim_strnsave(*pp, p - *pp);
 	*pp = p + 1;
 	if (r != NULL)
 	{
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -389,7 +389,7 @@ repeat:
 	if (mch_isdir(*fnamep))
 	{
 	    // Make room for one or two extra characters.
-	    *fnamep = vim_strnsave(*fnamep, (int)STRLEN(*fnamep) + 2);
+	    *fnamep = vim_strnsave(*fnamep, STRLEN(*fnamep) + 2);
 	    vim_free(*bufp);	// free any allocated file name
 	    *bufp = *fnamep;
 	    if (*fnamep == NULL)
@@ -655,7 +655,7 @@ repeat:
 	    p = vim_strchr(s, sep);
 	    if (p != NULL)
 	    {
-		pat = vim_strnsave(s, (int)(p - s));
+		pat = vim_strnsave(s, p - s);
 		if (pat != NULL)
 		{
 		    s = p + 1;
@@ -663,7 +663,7 @@ repeat:
 		    p = vim_strchr(s, sep);
 		    if (p != NULL)
 		    {
-			sub = vim_strnsave(s, (int)(p - s));
+			sub = vim_strnsave(s, p - s);
 			str = vim_strnsave(*fnamep, *fnamelen);
 			if (sub != NULL && str != NULL)
 			{
@@ -1296,7 +1296,7 @@ mkdir_recurse(char_u *dir, int prot)
 	return OK;
 
     // If the directory exists we're done.  Otherwise: create it.
-    updir = vim_strnsave(dir, (int)(p - dir));
+    updir = vim_strnsave(dir, p - dir);
     if (updir == NULL)
 	return FAIL;
     if (mch_isdir(updir))
@@ -1594,7 +1594,7 @@ f_readfile(typval_T *argvars, typval_T *
 			    --prevlen;
 		}
 		if (prevlen == 0)
-		    s = vim_strnsave(start, (int)len);
+		    s = vim_strnsave(start, len);
 		else
 		{
 		    // Change "prev" buffer to be the right size.  This way
@@ -3037,7 +3037,7 @@ expand_backtick(
     int		i;
 
     // Create the command: lop off the backticks.
-    cmd = vim_strnsave(pat + 1, (int)STRLEN(pat) - 2);
+    cmd = vim_strnsave(pat + 1, STRLEN(pat) - 2);
     if (cmd == NULL)
 	return -1;
 
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -451,7 +451,7 @@ vim_findfile_init(
 		if (walker)
 		{
 		    search_ctx->ffsc_stopdirs_v[dircount-1] =
-				 vim_strnsave(helper, (int)(walker - helper));
+					 vim_strnsave(helper, walker - helper);
 		    walker++;
 		}
 		else
@@ -484,7 +484,7 @@ vim_findfile_init(
 	char	*errpt;
 
 	// save the fix part of the path
-	search_ctx->ffsc_fix_path = vim_strnsave(path, (int)(wc_part - path));
+	search_ctx->ffsc_fix_path = vim_strnsave(path, wc_part - path);
 
 	/*
 	 * copy wc_path and add restricts to the '**' wildcard.
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -963,7 +963,7 @@ do_highlight(
 	    break;
 	}
 	vim_free(arg);
-	arg = vim_strnsave(arg_start, (int)(linep - arg_start));
+	arg = vim_strnsave(arg_start, linep - arg_start);
 	if (arg == NULL)
 	{
 	    error = TRUE;
@@ -5003,7 +5003,7 @@ ex_match(exarg_T *eap)
     {
 	p = skiptowhite(eap->arg);
 	if (!eap->skip)
-	    g = vim_strnsave(eap->arg, (int)(p - eap->arg));
+	    g = vim_strnsave(eap->arg, p - eap->arg);
 	p = skipwhite(p);
 	if (*p == NUL)
 	{
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -1435,7 +1435,7 @@ PerlIOVim_write(pTHX_ PerlIO *f, const v
     char_u *str;
     PerlIOVim * s = PerlIOSelf(f, PerlIOVim);
 
-    str = vim_strnsave((char_u *)vbuf, (int)count);
+    str = vim_strnsave((char_u *)vbuf, count);
     if (str == NULL)
 	return 0;
     msg_split((char_u *)str, s->attr);
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -1858,7 +1858,7 @@ ruby_convert_to_vim_value(VALUE val, typ
 
 		rettv->v_type = VAR_STRING;
 		rettv->vval.v_string = vim_strnsave((char_u *)RSTRING_PTR(str),
-							 (int)RSTRING_LEN(str));
+							     RSTRING_LEN(str));
 	    }
 	    break;
 	case T_ARRAY:
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -1579,7 +1579,7 @@ ins_compl_bs(void)
 	ins_compl_restart();
 
     vim_free(compl_leader);
-    compl_leader = vim_strnsave(line + compl_col, (int)(p - line) - compl_col);
+    compl_leader = vim_strnsave(line + compl_col, (p - line) - compl_col);
     if (compl_leader != NULL)
     {
 	ins_compl_new_leader();
@@ -1706,7 +1706,7 @@ ins_compl_addleader(int c)
     {
 	vim_free(compl_leader);
 	compl_leader = vim_strnsave(ml_get_curline() + compl_col,
-				     (int)(curwin->w_cursor.col - compl_col));
+					     curwin->w_cursor.col - compl_col);
 	if (compl_leader != NULL)
 	    ins_compl_new_leader();
     }
--- a/src/json.c
+++ b/src/json.c
@@ -662,7 +662,7 @@ json_decode_item(js_read_T *reader, typv
 	    if (cur_item != NULL)
 	    {
 		cur_item->v_type = VAR_STRING;
-		cur_item->vval.v_string = vim_strnsave(key, (int)(p - key));
+		cur_item->vval.v_string = vim_strnsave(key, p - key);
 		top_item->jd_key = cur_item->vval.v_string;
 	    }
 	    reader->js_used += (int)(p - key);
--- a/src/mark.c
+++ b/src/mark.c
@@ -680,7 +680,7 @@ mark_line(pos_T *mp, int lead_len)
     if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
 	return vim_strsave((char_u *)"-invalid-");
     // Allow for up to 5 bytes per character.
-    s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns * 5);
+    s = vim_strnsave(skipwhite(ml_get(mp->lnum)), Columns * 5);
     if (s == NULL)
 	return NULL;
     // Truncate the line to fit it in the window.
--- a/src/memline.c
+++ b/src/memline.c
@@ -1375,7 +1375,7 @@ ml_recover(int checkext)
 #endif
 	for (p = b0p->b0_fname + fnsize; p > b0p->b0_fname && p[-1] != NUL; --p)
 	    ;
-	b0_fenc = vim_strnsave(p, (int)(b0p->b0_fname + fnsize - p));
+	b0_fenc = vim_strnsave(p, b0p->b0_fname + fnsize - p);
     }
 
     mf_put(mfp, hp, FALSE, FALSE);	// release block 0
--- a/src/menu.c
+++ b/src/menu.c
@@ -1810,7 +1810,7 @@ menu_text(char_u *str, int *mnemonic, ch
     {
 	if (actext != NULL)
 	    *actext = vim_strsave(p + 1);
-	text = vim_strnsave(str, (int)(p - str));
+	text = vim_strnsave(str, p - str);
     }
     else
 	text = vim_strsave(str);
@@ -2716,7 +2716,7 @@ ex_menutranslate(exarg_T *eap UNUSED)
 		if (from != NULL)
 		{
 		    from_noamp = menu_text(from, NULL, NULL);
-		    to = vim_strnsave(to, (int)(arg - to));
+		    to = vim_strnsave(to, arg - to);
 		    if (from_noamp != NULL && to != NULL)
 		    {
 			menu_translate_tab_and_shift(from);
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -1795,7 +1795,7 @@ vim_getenv(char_u *name, int *mustfree)
 	    if (p == exe_name || p == p_hf)
 #endif
 		// check that the result is a directory name
-		p = vim_strnsave(p, (int)(pend - p));
+		p = vim_strnsave(p, pend - p);
 
 	    if (p != NULL && !mch_isdir(p))
 		VIM_CLEAR(p);
@@ -2576,7 +2576,7 @@ get_isolated_shell_name(void)
 
 #ifdef MSWIN
     p = gettail(p_sh);
-    p = vim_strnsave(p, (int)(skiptowhite(p) - p));
+    p = vim_strnsave(p, skiptowhite(p) - p);
 #else
     p = skiptowhite(p_sh);
     if (*p == NUL)
@@ -2593,7 +2593,7 @@ get_isolated_shell_name(void)
 	for (p2 = p_sh; p2 < p; MB_PTR_ADV(p2))
 	    if (vim_ispathsep(*p2))
 		p1 = p2 + 1;
-	p = vim_strnsave(p1, (int)(p - p1));
+	p = vim_strnsave(p1, p - p1);
     }
 #endif
     return p;
--- a/src/ops.c
+++ b/src/ops.c
@@ -1616,7 +1616,7 @@ op_insert(oparg_T *oap, long count1)
 	if (pre_textlen >= 0
 		     && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
 	{
-	    ins_text = vim_strnsave(firstline, (int)ins_len);
+	    ins_text = vim_strnsave(firstline, ins_len);
 	    if (ins_text != NULL)
 	    {
 		// block handled here
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -477,8 +477,7 @@ get_exe_name(void)
 
     if (exe_path == NULL && exe_name != NULL)
     {
-	exe_path = vim_strnsave(exe_name,
-				     (int)(gettail_sep(exe_name) - exe_name));
+	exe_path = vim_strnsave(exe_name, gettail_sep(exe_name) - exe_name);
 	if (exe_path != NULL)
 	{
 	    // Append our starting directory to $PATH, so that when doing
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1846,7 +1846,7 @@ fill_submatch_list(int argc UNUSED, typv
 	if (s == NULL || rsm.sm_match->endp[i] == NULL)
 	    s = NULL;
 	else
-	    s = vim_strnsave(s, (int)(rsm.sm_match->endp[i] - s));
+	    s = vim_strnsave(s, rsm.sm_match->endp[i] - s);
 	li->li_tv.v_type = VAR_STRING;
 	li->li_tv.vval.v_string = s;
 	li = li->li_next;
@@ -2462,7 +2462,7 @@ reg_submatch(int no)
 	if (s == NULL || rsm.sm_match->endp[no] == NULL)
 	    retval = NULL;
 	else
-	    retval = vim_strnsave(s, (int)(rsm.sm_match->endp[no] - s));
+	    retval = vim_strnsave(s, rsm.sm_match->endp[no] - s);
     }
 
     return retval;
--- a/src/regexp_bt.c
+++ b/src/regexp_bt.c
@@ -4588,7 +4588,7 @@ regtry(
 		if (reg_startzp[i] != NULL && reg_endzp[i] != NULL)
 		    re_extmatch_out->matches[i] =
 			    vim_strnsave(reg_startzp[i],
-					(int)(reg_endzp[i] - reg_startzp[i]));
+						reg_endzp[i] - reg_startzp[i]);
 	    }
 	}
     }
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -7103,8 +7103,7 @@ nfa_regtry(
 
 		if (lpos->start != NULL && lpos->end != NULL)
 		    re_extmatch_out->matches[i] =
-			    vim_strnsave(lpos->start,
-					      (int)(lpos->end - lpos->start));
+			    vim_strnsave(lpos->start, lpos->end - lpos->start);
 	    }
 	}
     }
--- a/src/register.c
+++ b/src/register.c
@@ -2655,7 +2655,7 @@ write_reg_contents_ex(
     {
 	char_u	    *p, *s;
 
-	p = vim_strnsave(str, (int)len);
+	p = vim_strnsave(str, len);
 	if (p == NULL)
 	    return;
 	if (must_append && expr_line != NULL)
--- a/src/search.c
+++ b/src/search.c
@@ -1916,7 +1916,7 @@ find_rawstring_end(char_u *linep, pos_T 
     for (p = linep + startpos->col + 1; *p && *p != '('; ++p)
 	;
     delim_len = (p - linep) - startpos->col - 1;
-    delim_copy = vim_strnsave(linep + startpos->col + 1, (int)delim_len);
+    delim_copy = vim_strnsave(linep + startpos->col + 1, delim_len);
     if (delim_copy == NULL)
 	return FALSE;
     for (lnum = startpos->lnum; lnum <= endpos->lnum; ++lnum)
--- a/src/sign.c
+++ b/src/sign.c
@@ -1309,22 +1309,22 @@ sign_define_cmd(char_u *sign_name, char_
 	if (STRNCMP(arg, "icon=", 5) == 0)
 	{
 	    arg += 5;
-	    icon = vim_strnsave(arg, (int)(p - arg));
+	    icon = vim_strnsave(arg, p - arg);
 	}
 	else if (STRNCMP(arg, "text=", 5) == 0)
 	{
 	    arg += 5;
-	    text = vim_strnsave(arg, (int)(p - arg));
+	    text = vim_strnsave(arg, p - arg);
 	}
 	else if (STRNCMP(arg, "linehl=", 7) == 0)
 	{
 	    arg += 7;
-	    linehl = vim_strnsave(arg, (int)(p - arg));
+	    linehl = vim_strnsave(arg, p - arg);
 	}
 	else if (STRNCMP(arg, "texthl=", 7) == 0)
 	{
 	    arg += 7;
-	    texthl = vim_strnsave(arg, (int)(p - arg));
+	    texthl = vim_strnsave(arg, p - arg);
 	}
 	else
 	{
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -4652,7 +4652,7 @@ get_syn_options(
 		arg = skiptowhite(arg);
 		if (gname_start == arg)
 		    return NULL;
-		gname = vim_strnsave(gname_start, (int)(arg - gname_start));
+		gname = vim_strnsave(gname_start, arg - gname_start);
 		if (gname == NULL)
 		    return NULL;
 		if (STRCMP(gname, "NONE") == 0)
@@ -4662,7 +4662,8 @@ get_syn_options(
 		    syn_id = syn_name2id(gname);
 		    for (i = curwin->w_s->b_syn_patterns.ga_len; --i >= 0; )
 			if (SYN_ITEMS(curwin->w_s)[i].sp_syn.id == syn_id
-			      && SYN_ITEMS(curwin->w_s)[i].sp_type == SPTYPE_START)
+			      && SYN_ITEMS(curwin->w_s)[i].sp_type
+							       == SPTYPE_START)
 			{
 			    *opt->sync_idx = i;
 			    break;
@@ -5656,7 +5657,7 @@ get_syn_pattern(char_u *arg, synpat_T *c
 	return NULL;
     }
     // store the pattern and compiled regexp program
-    if ((ci->sp_pattern = vim_strnsave(arg + 1, (int)(end - arg - 1))) == NULL)
+    if ((ci->sp_pattern = vim_strnsave(arg + 1, end - arg - 1)) == NULL)
 	return NULL;
 
     // Make 'cpoptions' empty, to avoid the 'l' flag
@@ -5836,8 +5837,9 @@ syn_cmd_sync(exarg_T *eap, int syncing U
 	    if (!eap->skip)
 	    {
 		// store the pattern and compiled regexp program
-		if ((curwin->w_s->b_syn_linecont_pat = vim_strnsave(next_arg + 1,
-				      (int)(arg_end - next_arg - 1))) == NULL)
+		if ((curwin->w_s->b_syn_linecont_pat =
+			    vim_strnsave(next_arg + 1,
+				      arg_end - next_arg - 1)) == NULL)
 		{
 		    finished = TRUE;
 		    break;
@@ -6272,7 +6274,7 @@ ex_syntax(exarg_T *eap)
     // isolate subcommand name
     for (subcmd_end = arg; ASCII_ISALPHA(*subcmd_end); ++subcmd_end)
 	;
-    subcmd_name = vim_strnsave(arg, (int)(subcmd_end - arg));
+    subcmd_name = vim_strnsave(arg, subcmd_end - arg);
     if (subcmd_name != NULL)
     {
 	if (eap->skip)		// skip error messages for all subcommands
--- a/src/term.c
+++ b/src/term.c
@@ -4086,11 +4086,11 @@ add_termcode(char_u *name, char_u *strin
     }
 
 #if defined(MSWIN) && !defined(FEAT_GUI)
-    s = vim_strnsave(string, (int)STRLEN(string) + 1);
+    s = vim_strnsave(string, STRLEN(string) + 1);
 #else
 # ifdef VIMDLL
     if (!gui.in_use)
-	s = vim_strnsave(string, (int)STRLEN(string) + 1);
+	s = vim_strnsave(string, STRLEN(string) + 1);
     else
 # endif
 	s = vim_strsave(string);
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -3011,7 +3011,7 @@ handle_settermprop(
     {
 	case VTERM_PROP_TITLE:
 	    strval = vim_strnsave((char_u *)value->string.str,
-						       (int)value->string.len);
+							    value->string.len);
 	    if (strval == NULL)
 		break;
 	    vim_free(term->tl_title);
@@ -3073,7 +3073,7 @@ handle_settermprop(
 
 	case VTERM_PROP_CURSORCOLOR:
 	    strval = vim_strnsave((char_u *)value->string.str,
-						       (int)value->string.len);
+							    value->string.len);
 	    if (strval == NULL)
 		break;
 	    cursor_color_copy(&term->tl_cursor_color, strval);
--- a/src/undo.c
+++ b/src/undo.c
@@ -849,7 +849,7 @@ u_get_undo_file_name(char_u *buf_ffname,
 	{
 	    // Use same directory as the ffname,
 	    // "dir/name" -> "dir/.name.un~"
-	    undo_file_name = vim_strnsave(ffname, (int)(STRLEN(ffname) + 5));
+	    undo_file_name = vim_strnsave(ffname, STRLEN(ffname) + 5);
 	    if (undo_file_name == NULL)
 		break;
 	    p = gettail(undo_file_name);
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -676,7 +676,7 @@ parse_compl_arg(
     }
 
     if (arg != NULL)
-	*compl_arg = vim_strnsave(arg, (int)arglen);
+	*compl_arg = vim_strnsave(arg, arglen);
 # endif
     return OK;
 }
@@ -939,7 +939,7 @@ uc_add_command(
     {
 	if (ga_grow(gap, 1) != OK)
 	    goto fail;
-	if ((p = vim_strnsave(name, (int)name_len)) == NULL)
+	if ((p = vim_strnsave(name, name_len)) == NULL)
 	    goto fail;
 
 	cmd = USER_CMD_GA(gap, i);
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2699,7 +2699,7 @@ def_function(exarg_T *eap, char_u *name_
 	    p = skip_type(ret_type);
 	    if (p > ret_type)
 	    {
-		ret_type = vim_strnsave(ret_type, (int)(p - ret_type));
+		ret_type = vim_strnsave(ret_type, p - ret_type);
 		p = skipwhite(p);
 	    }
 	    else
@@ -2972,12 +2972,12 @@ def_function(exarg_T *eap, char_u *name_
 		    // Ignore leading white space.
 		    p = skipwhite(p + 4);
 		    heredoc_trimmed = vim_strnsave(theline,
-			    (int)(skipwhite(theline) - theline));
+						 skipwhite(theline) - theline);
 		}
 		if (*p == NUL)
 		    skip_until = vim_strsave((char_u *)".");
 		else
-		    skip_until = vim_strnsave(p, (int)(skiptowhite(p) - p));
+		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
 		do_concat = FALSE;
 		is_heredoc = TRUE;
 	    }
@@ -3002,9 +3002,9 @@ def_function(exarg_T *eap, char_u *name_
 			// Ignore leading white space.
 			p = skipwhite(p + 4);
 			heredoc_trimmed = vim_strnsave(theline,
-					  (int)(skipwhite(theline) - theline));
+						 skipwhite(theline) - theline);
 		    }
-		    skip_until = vim_strnsave(p, (int)(skiptowhite(p) - p));
+		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
 		    do_concat = FALSE;
 		    is_heredoc = TRUE;
 		}
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    967,
+/**/
     966,
 /**/
     965,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1575,7 +1575,7 @@ generate_STRINGMEMBER(cctx_T *cctx, char
     RETURN_OK_IF_SKIP(cctx);
     if ((isn = generate_instr(cctx, ISN_STRINGMEMBER)) == NULL)
 	return FAIL;
-    isn->isn_arg.string = vim_strnsave(name, (int)len);
+    isn->isn_arg.string = vim_strnsave(name, len);
 
     // check for dict type
     type = ((type_T **)stack->ga_data)[stack->ga_len - 1];
@@ -1671,7 +1671,7 @@ reserve_local(cctx_T *cctx, char_u *name
     // entries.  This is less efficient, but memory is cheap these days.
     lvar->lv_idx = cctx->ctx_locals_count++;
 
-    lvar->lv_name = vim_strnsave(name, (int)(len == 0 ? STRLEN(name) : len));
+    lvar->lv_name = vim_strnsave(name, len == 0 ? STRLEN(name) : len);
     lvar->lv_const = isConst;
     lvar->lv_type = type;
 
@@ -4627,7 +4627,7 @@ compile_assignment(char_u *arg, exarg_T 
 	--p;
 
     varlen = p - arg;
-    name = vim_strnsave(arg, (int)varlen);
+    name = vim_strnsave(arg, varlen);
     if (name == NULL)
 	return NULL;
 
@@ -6268,7 +6268,7 @@ compile_exec(char_u *line, exarg_T *eap,
 	{
 	    if (p > start)
 	    {
-		generate_PUSHS(cctx, vim_strnsave(start, (int)(p - start)));
+		generate_PUSHS(cctx, vim_strnsave(start, p - start));
 		++count;
 	    }
 	    p += 2;