# HG changeset patch # User Bram Moolenaar # Date 1652350503 -7200 # Node ID bf013128ccf45125eff33480c907159f770037de # Parent 2754c0b032dc69851a9440d452d61b5e497c5efd patch 8.2.4940: some code is never used Commit: https://github.com/vim/vim/commit/d0132f4862342eebe6d8e7a9096adf956ba6588b Author: Bram Moolenaar Date: Thu May 12 11:05:40 2022 +0100 patch 8.2.4940: some code is never used Problem: Some code is never used. Solution: Remove dead code. Add a few more test cases. diff --git a/src/proto/vim9expr.pro b/src/proto/vim9expr.pro --- a/src/proto/vim9expr.pro +++ b/src/proto/vim9expr.pro @@ -2,7 +2,7 @@ int generate_ppconst(cctx_T *cctx, ppconst_T *ppconst); void clear_ppconst(ppconst_T *ppconst); int compile_member(int is_slice, int *keeping_dict, cctx_T *cctx); -int compile_load_scriptvar(cctx_T *cctx, char_u *name, char_u *start, char_u **end, int error); +int compile_load_scriptvar(cctx_T *cctx, char_u *name, char_u *start, char_u **end); int compile_load(char_u **arg, char_u *end_arg, cctx_T *cctx, int is_expr, int error); char_u *to_name_end(char_u *arg, int use_namespace); char_u *to_name_const_end(char_u *arg); diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -4083,6 +4083,11 @@ def Test_substitute() assert_equal("4", substitute("3", '\d', '\=str2nr(submatch(0)) + 1', 'g')) END v9.CheckDefAndScriptSuccess(lines) + + lines =<< trim END + assert_equal("4", substitute("3", '\d', '\="text" x', 'g')) + END + v9.CheckDefAndScriptFailure(lines, 'E488: Trailing characters: x') enddef def Test_swapinfo() diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -2695,6 +2695,21 @@ def Test_expr8funcref() Test() END v9.CheckScriptSuccess(lines) + + # using funcref in legacy script + lines =<< trim END + def s:Refme(): string + return 'yes' + enddef + + def TestFunc() + var TheRef = s:Refme + assert_equal('yes', TheRef()) + enddef + + call TestFunc() + END + v9.CheckScriptSuccess(lines) enddef let g:test_space_dict = {'': 'empty', ' ': 'space'} diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4940, +/**/ 4939, /**/ 4938, diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1140,7 +1140,7 @@ generate_loadvar( break; case dest_script: compile_load_scriptvar(cctx, - name + (name[1] == ':' ? 2 : 0), NULL, NULL, TRUE); + name + (name[1] == ':' ? 2 : 0), NULL, NULL); break; case dest_env: // Include $ in the name here diff --git a/src/vim9expr.c b/src/vim9expr.c --- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -140,9 +140,8 @@ compile_member(int is_slice, int *keepin typep->type_curr = &t_any; typep->type_decl = &t_any; } - if (may_generate_2STRING(-1, FALSE, cctx) == FAIL) - return FAIL; - if (generate_instr_drop(cctx, ISN_MEMBER, 1) == FAIL) + if (may_generate_2STRING(-1, FALSE, cctx) == FAIL + || generate_instr_drop(cctx, ISN_MEMBER, 1) == FAIL) return FAIL; if (keeping_dict != NULL) *keeping_dict = TRUE; @@ -246,8 +245,7 @@ compile_load_scriptvar( cctx_T *cctx, char_u *name, // variable NUL terminated char_u *start, // start of variable - char_u **end, // end of variable, may be NULL - int error) // when TRUE may give error + char_u **end) // end of variable, may be NULL { scriptitem_T *si; int idx; @@ -368,14 +366,10 @@ compile_load_scriptvar( return OK; } - if (idx == -1 || si->sn_version != SCRIPT_VERSION_VIM9) - // variable is not in sn_var_vals: old style script. - return generate_OLDSCRIPT(cctx, ISN_LOADS, name, current_sctx.sc_sid, + // Can only get here if we know "name" is a script variable and not in a + // Vim9 script (variable is not in sn_var_vals): old style script. + return generate_OLDSCRIPT(cctx, ISN_LOADS, name, current_sctx.sc_sid, &t_any); - - if (error) - semsg(_(e_item_not_found_str), name); - return FAIL; } static int @@ -462,7 +456,7 @@ compile_load( res = generate_funcref(cctx, name, FALSE); else res = compile_load_scriptvar(cctx, name, - NULL, &end, error); + NULL, &end); break; case 'g': if (vim_strchr(name, AUTOLOAD_CHAR) == NULL) { @@ -538,7 +532,7 @@ compile_load( // already exists in a Vim9 script or when it's imported. if (script_var_exists(*arg, len, cctx, NULL) == OK || find_imported(name, 0, FALSE) != NULL) - res = compile_load_scriptvar(cctx, name, *arg, &end, FALSE); + res = compile_load_scriptvar(cctx, name, *arg, &end); // When evaluating an expression and the name starts with an // uppercase letter it can be a user defined function.