Patch 8.2.5018
Problem: Vim9: some code is not covered by tests.
Solution: Delete dead code.
Files: src/vim9instr.c, src/proto/
vim9instr.pro, src/vim9compile.c,
src/vim9expr.c,
*** ../vim-8.2.5017/src/vim9instr.c 2022-05-17 16:12:35.708086414 +0100
--- src/vim9instr.c 2022-05-25 19:10:21.954489405 +0100
***************
*** 355,365 ****
vartype_T vartype1 = tv1 != NULL ? tv1->v_type : type1->tt_type;
vartype_T vartype2 = tv2 != NULL ? tv2->v_type : type2->tt_type;
- if (vartype1 == VAR_UNKNOWN)
- vartype1 = VAR_ANY;
- if (vartype2 == VAR_UNKNOWN)
- vartype2 = VAR_ANY;
-
if (vartype1 == vartype2)
{
switch (vartype1)
--- 355,360 ----
***************
*** 462,472 ****
isn->isn_arg.op.op_ic = ic;
// takes two arguments, puts one bool back
! if (stack->ga_len >= 2)
! {
! --stack->ga_len;
! set_type_on_stack(cctx, &t_bool, 0);
! }
return OK;
}
--- 457,464 ----
isn->isn_arg.op.op_ic = ic;
// takes two arguments, puts one bool back
! --stack->ga_len;
! set_type_on_stack(cctx, &t_bool, 0);
return OK;
}
***************
*** 485,493 ****
RETURN_OK_IF_SKIP(cctx);
- if (count < 1)
- return FAIL;
-
if ((isn = generate_instr(cctx, ISN_CONCAT)) == NULL)
return FAIL;
isn->isn_arg.number = count;
--- 477,482 ----
***************
*** 578,657 ****
/*
* Generate a PUSH instruction for "tv".
* "tv" will be consumed or cleared.
- * Nothing happens if "tv" is NULL or of type VAR_UNKNOWN;
*/
int
generate_tv_PUSH(cctx_T *cctx, typval_T *tv)
{
! if (tv != NULL)
{
! switch (tv->v_type)
! {
! case VAR_UNKNOWN:
! break;
! case VAR_BOOL:
! generate_PUSHBOOL(cctx, tv->vval.v_number);
! break;
! case VAR_SPECIAL:
! generate_PUSHSPEC(cctx, tv->vval.v_number);
! break;
! case VAR_NUMBER:
! generate_PUSHNR(cctx, tv->vval.v_number);
! break;
#ifdef FEAT_FLOAT
! case VAR_FLOAT:
! generate_PUSHF(cctx, tv->vval.v_float);
! break;
#endif
! case VAR_BLOB:
! generate_PUSHBLOB(cctx, tv->vval.v_blob);
! tv->vval.v_blob = NULL;
! break;
! case VAR_LIST:
! if (tv->vval.v_list != NULL)
! iemsg("non-empty list constant not supported");
! generate_NEWLIST(cctx, 0, TRUE);
! break;
! case VAR_DICT:
! if (tv->vval.v_dict != NULL)
! iemsg("non-empty dict constant not supported");
! generate_NEWDICT(cctx, 0, TRUE);
! break;
#ifdef FEAT_JOB_CHANNEL
! case VAR_JOB:
! if (tv->vval.v_job != NULL)
! iemsg("non-null job constant not supported");
! generate_PUSHJOB(cctx);
! break;
! case VAR_CHANNEL:
! if (tv->vval.v_channel != NULL)
! iemsg("non-null channel constant not supported");
! generate_PUSHCHANNEL(cctx);
! break;
#endif
! case VAR_FUNC:
! if (tv->vval.v_string != NULL)
! iemsg("non-null function constant not supported");
! generate_PUSHFUNC(cctx, NULL, &t_func_unknown);
! break;
! case VAR_PARTIAL:
! if (tv->vval.v_partial != NULL)
! iemsg("non-null partial constant not supported");
! if (generate_instr_type(cctx, ISN_NEWPARTIAL, &t_func_unknown)
! == NULL)
! return FAIL;
! break;
! case VAR_STRING:
! generate_PUSHS(cctx, &tv->vval.v_string);
! tv->vval.v_string = NULL;
! break;
! default:
! iemsg("constant type not supported");
! clear_tv(tv);
return FAIL;
! }
! tv->v_type = VAR_UNKNOWN;
}
return OK;
}
--- 567,640 ----
/*
* Generate a PUSH instruction for "tv".
* "tv" will be consumed or cleared.
*/
int
generate_tv_PUSH(cctx_T *cctx, typval_T *tv)
{
! switch (tv->v_type)
{
! case VAR_BOOL:
! generate_PUSHBOOL(cctx, tv->vval.v_number);
! break;
! case VAR_SPECIAL:
! generate_PUSHSPEC(cctx, tv->vval.v_number);
! break;
! case VAR_NUMBER:
! generate_PUSHNR(cctx, tv->vval.v_number);
! break;
#ifdef FEAT_FLOAT
! case VAR_FLOAT:
! generate_PUSHF(cctx, tv->vval.v_float);
! break;
#endif
! case VAR_BLOB:
! generate_PUSHBLOB(cctx, tv->vval.v_blob);
! tv->vval.v_blob = NULL;
! break;
! case VAR_LIST:
! if (tv->vval.v_list != NULL)
! iemsg("non-empty list constant not supported");
! generate_NEWLIST(cctx, 0, TRUE);
! break;
! case VAR_DICT:
! if (tv->vval.v_dict != NULL)
! iemsg("non-empty dict constant not supported");
! generate_NEWDICT(cctx, 0, TRUE);
! break;
#ifdef FEAT_JOB_CHANNEL
! case VAR_JOB:
! if (tv->vval.v_job != NULL)
! iemsg("non-null job constant not supported");
! generate_PUSHJOB(cctx);
! break;
! case VAR_CHANNEL:
! if (tv->vval.v_channel != NULL)
! iemsg("non-null channel constant not supported");
! generate_PUSHCHANNEL(cctx);
! break;
#endif
! case VAR_FUNC:
! if (tv->vval.v_string != NULL)
! iemsg("non-null function constant not supported");
! generate_PUSHFUNC(cctx, NULL, &t_func_unknown);
! break;
! case VAR_PARTIAL:
! if (tv->vval.v_partial != NULL)
! iemsg("non-null partial constant not supported");
! if (generate_instr_type(cctx, ISN_NEWPARTIAL, &t_func_unknown)
! == NULL)
return FAIL;
! break;
! case VAR_STRING:
! generate_PUSHS(cctx, &tv->vval.v_string);
! tv->vval.v_string = NULL;
! break;
! default:
! siemsg("constant type %d not supported", tv->v_type);
! clear_tv(tv);
! return FAIL;
}
+ tv->v_type = VAR_UNKNOWN;
return OK;
}
***************
*** 735,756 ****
generate_PUSHS(cctx_T *cctx, char_u **str)
{
isn_T *isn;
! if (cctx->ctx_skip == SKIP_YES)
{
! if (str != NULL)
! VIM_CLEAR(*str);
! return OK;
! }
! if ((isn = generate_instr_type(cctx, ISN_PUSHS, &t_string)) == NULL)
! {
! if (str != NULL)
! VIM_CLEAR(*str);
! return FAIL;
}
! isn->isn_arg.string = str == NULL ? NULL : *str;
!
! return OK;
}
/*
--- 718,738 ----
generate_PUSHS(cctx_T *cctx, char_u **str)
{
isn_T *isn;
+ int ret = OK;
! if (cctx->ctx_skip != SKIP_YES)
{
! if ((isn = generate_instr_type(cctx, ISN_PUSHS, &t_string)) == NULL)
! ret = FAIL;
! else
! {
! isn->isn_arg.string = str == NULL ? NULL : *str;
! return OK;
! }
}
! if (str != NULL)
! VIM_CLEAR(*str);
! return ret;
}
/*
***************
*** 864,869 ****
--- 846,852 ----
* Generate an ISN_GETITEM instruction with "index".
* "with_op" is TRUE for "+=" and other operators, the stack has the current
* value below the list with values.
+ * Caller must check the type is a list.
*/
int
generate_GETITEM(cctx_T *cctx, int index, int with_op)
***************
*** 874,885 ****
RETURN_OK_IF_SKIP(cctx);
- if (type->tt_type != VAR_LIST)
- {
- // cannot happen, caller has checked the type
- emsg(_(e_list_required));
- return FAIL;
- }
item_type = type->tt_member;
if ((isn = generate_instr(cctx, ISN_GETITEM)) == NULL)
return FAIL;
--- 857,862 ----
***************
*** 1048,1055 ****
int
generate_LOADV(
cctx_T *cctx,
! char_u *name,
! int error)
{
int di_flags;
int vidx = find_vim_var(name, &di_flags);
--- 1025,1031 ----
int
generate_LOADV(
cctx_T *cctx,
! char_u *name)
{
int di_flags;
int vidx = find_vim_var(name, &di_flags);
***************
*** 1058,1065 ****
RETURN_OK_IF_SKIP(cctx);
if (vidx < 0)
{
! if (error)
! semsg(_(e_variable_not_found_str), name);
return FAIL;
}
type = get_vim_var_type(vidx, cctx->ctx_type_list);
--- 1034,1040 ----
RETURN_OK_IF_SKIP(cctx);
if (vidx < 0)
{
! semsg(_(e_variable_not_found_str), name);
return FAIL;
}
type = get_vim_var_type(vidx, cctx->ctx_type_list);
***************
*** 1258,1280 ****
generate_NEWFUNC(cctx_T *cctx, char_u *lambda_name, char_u *func_name)
{
isn_T *isn;
! if (cctx->ctx_skip == SKIP_YES)
! {
! vim_free(lambda_name);
! vim_free(func_name);
! return OK;
! }
! if ((isn = generate_instr(cctx, ISN_NEWFUNC)) == NULL)
{
! vim_free(lambda_name);
! vim_free(func_name);
! return FAIL;
}
! isn->isn_arg.newfunc.nf_lambda = lambda_name;
! isn->isn_arg.newfunc.nf_global = func_name;
!
! return OK;
}
/*
--- 1233,1254 ----
generate_NEWFUNC(cctx_T *cctx, char_u *lambda_name, char_u *func_name)
{
isn_T *isn;
+ int ret = OK;
! if (cctx->ctx_skip != SKIP_YES)
{
! if ((isn = generate_instr(cctx, ISN_NEWFUNC)) == NULL)
! ret = FAIL;
! else
! {
! isn->isn_arg.newfunc.nf_lambda = lambda_name;
! isn->isn_arg.newfunc.nf_global = func_name;
! return OK;
! }
}
! vim_free(lambda_name);
! vim_free(func_name);
! return ret;
}
/*
***************
*** 1827,1845 ****
generate_EXEC(cctx_T *cctx, isntype_T isntype, char_u *str)
{
isn_T *isn;
! if (cctx->ctx_skip == SKIP_YES)
{
! vim_free(str);
! return OK;
! }
! if ((isn = generate_instr(cctx, isntype)) == NULL)
! {
! vim_free(str);
! return FAIL;
}
! isn->isn_arg.string = str;
! return OK;
}
int
--- 1801,1820 ----
generate_EXEC(cctx_T *cctx, isntype_T isntype, char_u *str)
{
isn_T *isn;
+ int ret = OK;
! if (cctx->ctx_skip != SKIP_YES)
{
! if ((isn = generate_instr(cctx, isntype)) == NULL)
! ret = FAIL;
! else
! {
! isn->isn_arg.string = str;
! return OK;
! }
}
! vim_free(str);
! return ret;
}
int
*** ../vim-8.2.5017/src/proto/
vim9instr.pro 2022-05-17 16:12:35.708086414 +0100
--- src/proto/
vim9instr.pro 2022-05-25 19:10:05.374501733 +0100
***************
*** 32,38 ****
int generate_STORENR(cctx_T *cctx, int idx, varnumber_T value);
int generate_LOAD(cctx_T *cctx, isntype_T isn_type, int idx, char_u *name, type_T *type);
int generate_LOADOUTER(cctx_T *cctx, int idx, int nesting, type_T *type);
! int generate_LOADV(cctx_T *cctx, char_u *name, int error);
int generate_UNLET(cctx_T *cctx, isntype_T isn_type, char_u *name, int forceit);
int generate_LOCKCONST(cctx_T *cctx);
int generate_OLDSCRIPT(cctx_T *cctx, isntype_T isn_type, char_u *name, int sid, type_T *type);
--- 32,38 ----
int generate_STORENR(cctx_T *cctx, int idx, varnumber_T value);
int generate_LOAD(cctx_T *cctx, isntype_T isn_type, int idx, char_u *name, type_T *type);
int generate_LOADOUTER(cctx_T *cctx, int idx, int nesting, type_T *type);
! int generate_LOADV(cctx_T *cctx, char_u *name);
int generate_UNLET(cctx_T *cctx, isntype_T isn_type, char_u *name, int forceit);
int generate_LOCKCONST(cctx_T *cctx);
int generate_OLDSCRIPT(cctx_T *cctx, isntype_T isn_type, char_u *name, int sid, type_T *type);
*** ../vim-8.2.5017/src/vim9compile.c 2022-05-17 16:12:35.712086412 +0100
--- src/vim9compile.c 2022-05-25 19:02:11.190901420 +0100
***************
*** 1151,1157 ****
generate_LOAD(cctx, ISN_LOADREG, name[1], NULL, &t_string);
break;
case dest_vimvar:
! generate_LOADV(cctx, name + 2, TRUE);
break;
case dest_local:
if (lvar->lv_from_outer > 0)
--- 1151,1157 ----
generate_LOAD(cctx, ISN_LOADREG, name[1], NULL, &t_string);
break;
case dest_vimvar:
! generate_LOADV(cctx, name + 2);
break;
case dest_local:
if (lvar->lv_from_outer > 0)
*** ../vim-8.2.5017/src/vim9expr.c 2022-05-22 22:07:48.059725754 +0100
--- src/vim9expr.c 2022-05-25 19:02:22.294890650 +0100
***************
*** 442,448 ****
switch (**arg)
{
! case 'v': res = generate_LOADV(cctx, name, error);
break;
case 's': if (current_script_is_vim9())
{
--- 442,448 ----
switch (**arg)
{
! case 'v': res = generate_LOADV(cctx, name);
break;
case 's': if (current_script_is_vim9())
{
*** ../vim-8.2.5017/src/version.c 2022-05-25 17:29:42.687364955 +0100
--- src/version.c 2022-05-25 18:42:16.552002531 +0100
***************
*** 736,737 ****
--- 736,739 ----
{ /* Add new patch number below this line */
+ /**/
+ 5018,
/**/
--
"Never be afraid to tell the world who you are."
-- Anonymous
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///