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 -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220525181541.D4AFC1C0B4C%40moolenaar.net.

Raspunde prin e-mail lui