To: vim_dev@googlegroups.com Subject: Patch 8.2.5018 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 -- Bram@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 ///