Re: Patch 8.2.2944

2021-06-06 Fir de Conversatie Bram Moolenaar


John Marriott wrote:

> On 06-Jun-2021 04:52, Bram Moolenaar wrote:
> > Patch 8.2.2944
> > Problem:Vim9: no error when using job or channel as a string.
> > Solution:   Be more strict about conversion to string. (closes #8312)
> > Files:  src/typval.c, src/job.c, src/proto/job.pro, src/channel.c,
> >  src/proto/channel.pro, src/eval.c, src/vim9execute.c,
> >  src/testdir/test_vim9_builtin.vim
> >
> >
> After this patch, mingw64 (gcc 11.1.0) throws this warning and then this 
> linker error if FEAT_JOB_CHANNEL is disabled:
> 
> gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 
> -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO 
> -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return 
> -fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD eval.c -o gobjnative/eval.o
> eval.c: In function 'echo_string_core':
> eval.c:5063:41: warning: implicit declaration of function 
> 'job_to_string_buf' [-Wimplicit-function-declaration]
>   5063 | r = tv->v_type == VAR_JOB ? job_to_string_buf(tv, 
> numbuf)
>    | ^
> eval.c:5064:46: warning: implicit declaration of function 
> 'channel_to_string_buf' [-Wimplicit-function-declaration]
>   5064 |    : 
> channel_to_string_buf(tv, numbuf);
>    | ^
> eval.c:5063:15: warning: assignment to 'char_u *' {aka 'unsigned char 
> *'} from 'int' makes pointer from integer without a cast [-Wint-conversion]
>   5063 | r = tv->v_type == VAR_JOB ? job_to_string_buf(tv, 
> numbuf)
>    |   ^
> 
> 
> The attachment patch tries to fix it.

Thanks, I moved the #ifdef instead of copying it.

-- 
MICHAEL PALIN PLAYED: 1ST SOLDIER WITH A KEEN INTEREST IN BIRDS, DENNIS, MR
  DUCK (A VILLAGE CARPENTER WHO IS ALMOST KEENER THAN
  ANYONE ELSE TO BURN WITCHES), THREE-HEADED KNIGHT, SIR
  GALAHAD, KING OF SWAMP CASTLE, BROTHER MAYNARD'S ROOMATE
 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- b...@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///

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202106061001.156A12D2259158%40masaka.moolenaar.net.


Re: Patch 8.2.2944

2021-06-05 Fir de Conversatie John Marriott



On 06-Jun-2021 04:52, Bram Moolenaar wrote:

Patch 8.2.2944
Problem:Vim9: no error when using job or channel as a string.
Solution:   Be more strict about conversion to string. (closes #8312)
Files:  src/typval.c, src/job.c, src/proto/job.pro, src/channel.c,
 src/proto/channel.pro, src/eval.c, src/vim9execute.c,
 src/testdir/test_vim9_builtin.vim


After this patch, mingw64 (gcc 11.1.0) throws this warning and then this 
linker error if FEAT_JOB_CHANNEL is disabled:


gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 
-DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO 
-pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return 
-fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD eval.c -o gobjnative/eval.o

eval.c: In function 'echo_string_core':
eval.c:5063:41: warning: implicit declaration of function 
'job_to_string_buf' [-Wimplicit-function-declaration]
 5063 | r = tv->v_type == VAR_JOB ? job_to_string_buf(tv, 
numbuf)

  | ^
eval.c:5064:46: warning: implicit declaration of function 
'channel_to_string_buf' [-Wimplicit-function-declaration]
 5064 |    : 
channel_to_string_buf(tv, numbuf);

  | ^
eval.c:5063:15: warning: assignment to 'char_u *' {aka 'unsigned char 
*'} from 'int' makes pointer from integer without a cast [-Wint-conversion]
 5063 | r = tv->v_type == VAR_JOB ? job_to_string_buf(tv, 
numbuf)

  |   ^
...
gcc -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 
-DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO 
-pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return 
-fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD -Wl,-nxcompat,-dynamicbase 
-municode -s -mwindows -o gvim.exe gobjnative/arabic.o 
gobjnative/arglist.o gobjnative/autocmd.o gobjnative/beval.o 
gobjnative/blob.o gobjnative/blowfish.o gobjnative/buffer.o 
gobjnative/bufwrite.o gobjnative/change.o gobjnative/charset.o 
gobjnative/cindent.o gobjnative/clientserver.o gobjnative/clipboard.o 
gobjnative/cmdexpand.o gobjnative/cmdhist.o gobjnative/crypt.o 
gobjnative/crypt_zip.o gobjnative/debugger.o gobjnative/dict.o 
gobjnative/diff.o gobjnative/digraph.o gobjnative/drawline.o 
gobjnative/drawscreen.o gobjnative/edit.o gobjnative/eval.o 
gobjnative/evalbuffer.o gobjnative/evalfunc.o gobjnative/evalvars.o 
gobjnative/evalwindow.o gobjnative/ex_cmds.o gobjnative/ex_cmds2.o 
gobjnative/ex_docmd.o gobjnative/ex_eval.o gobjnative/ex_getln.o 
gobjnative/fileio.o gobjnative/filepath.o gobjnative/findfile.o 
gobjnative/float.o gobjnative/fold.o gobjnative/getchar.o 
gobjnative/gui_xim.o gobjnative/hardcopy.o gobjnative/hashtab.o 
gobjnative/help.o gobjnative/highlight.o gobjnative/if_cscope.o 
gobjnative/indent.o gobjnative/insexpand.o gobjnative/json.o 
gobjnative/list.o gobjnative/locale.o gobjnative/main.o gobjnative/map.o 
gobjnative/mark.o gobjnative/match.o gobjnative/memfile.o 
gobjnative/memline.o gobjnative/menu.o gobjnative/message.o 
gobjnative/misc1.o gobjnative/misc2.o gobjnative/mouse.o 
gobjnative/move.o gobjnative/mbyte.o gobjnative/normal.o 
gobjnative/ops.o gobjnative/option.o gobjnative/optionstr.o 
gobjnative/os_mswin.o gobjnative/os_win32.o gobjnative/pathdef.o 
gobjnative/popupmenu.o gobjnative/popupwin.o gobjnative/profiler.o 
gobjnative/quickfix.o gobjnative/regexp.o gobjnative/register.o 
gobjnative/scriptfile.o gobjnative/screen.o gobjnative/search.o 
gobjnative/session.o gobjnative/sha256.o gobjnative/sign.o 
gobjnative/spell.o gobjnative/spellfile.o gobjnative/spellsuggest.o 
gobjnative/syntax.o gobjnative/tag.o gobjnative/term.o 
gobjnative/testing.o gobjnative/textformat.o gobjnative/textobject.o 
gobjnative/textprop.o gobjnative/time.o gobjnative/typval.o 
gobjnative/ui.o gobjnative/undo.o gobjnative/usercmd.o 
gobjnative/userfunc.o gobjnative/version.o gobjnative/vim9compile.o 
gobjnative/vim9execute.o gobjnative/vim9script.o gobjnative/vim9type.o 
gobjnative/viminfo.o gobjnative/winclip.o gobjnative/window.o 
gobjnative/os_w32exe.o gobjnative/vimres.o gobjnative/xdiffi.o 
gobjnative/xemit.o gobjnative/xprepare.o gobjnative/xutils.o 
gobjnative/xhistogram.o gobjnative/xpatience.o gobjnative/gui.o 
gobjnative/gui_w32.o gobjnative/gui_beval.o -lkernel32 -luser32 -lgdi32 
-ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion -lole32 -luuid
d:/users/john/documents/software/mingw/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: 
gobjnative/eval.o:eval.c:(.text+0x3f19): undefined reference to 
`channel_to_string_buf'
d:/users/john/documents/software/mingw/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: 
gobjnative/eval.o:eval.c:(.text+0x41c1): undefined reference to 
`job_to_string_buf'

collect2.exe: error: ld returned 1 exit statu

Patch 8.2.2944

2021-06-05 Fir de Conversatie Bram Moolenaar


Patch 8.2.2944
Problem:Vim9: no error when using job or channel as a string.
Solution:   Be more strict about conversion to string. (closes #8312)
Files:  src/typval.c, src/job.c, src/proto/job.pro, src/channel.c,
src/proto/channel.pro, src/eval.c, src/vim9execute.c,
src/testdir/test_vim9_builtin.vim


*** ../vim-8.2.2943/src/typval.c2021-05-09 23:19:17.093003109 +0200
--- src/typval.c2021-06-05 20:42:37.974740560 +0200
***
*** 414,420 
  char_u *
  tv_get_string_buf(typval_T *varp, char_u *buf)
  {
! char_u*res =  tv_get_string_buf_chk(varp, buf);
  
  return res != NULL ? res : (char_u *)"";
  }
--- 414,420 
  char_u *
  tv_get_string_buf(typval_T *varp, char_u *buf)
  {
! char_u*res = tv_get_string_buf_chk(varp, buf);
  
  return res != NULL ? res : (char_u *)"";
  }
***
*** 478,521 
break;
case VAR_JOB:
  #ifdef FEAT_JOB_CHANNEL
{
!   job_T *job = varp->vval.v_job;
!   char  *status;
! 
!   if (job == NULL)
!   return (char_u *)"no process";
!   status = job->jv_status == JOB_FAILED ? "fail"
!   : job->jv_status >= JOB_ENDED ? "dead"
!   : "run";
! # ifdef UNIX
!   vim_snprintf((char *)buf, NUMBUFLEN,
!   "process %ld %s", (long)job->jv_pid, status);
! # elif defined(MSWIN)
!   vim_snprintf((char *)buf, NUMBUFLEN,
!   "process %ld %s",
!   (long)job->jv_proc_info.dwProcessId,
!   status);
! # else
!   // fall-back
!   vim_snprintf((char *)buf, NUMBUFLEN, "process ? %s", status);
! # endif
!   return buf;
}
  #endif
break;
case VAR_CHANNEL:
  #ifdef FEAT_JOB_CHANNEL
{
!   channel_T *channel = varp->vval.v_channel;
!   char  *status = channel_status(channel, -1);
! 
!   if (channel == NULL)
!   vim_snprintf((char *)buf, NUMBUFLEN, "channel %s", status);
!   else
!   vim_snprintf((char *)buf, NUMBUFLEN,
!"channel %d %s", channel->ch_id, status);
!   return buf;
}
  #endif
break;
case VAR_UNKNOWN:
--- 478,499 
break;
case VAR_JOB:
  #ifdef FEAT_JOB_CHANNEL
+   if (in_vim9script())
{
!   semsg(_(e_using_invalid_value_as_string_str), "job");
!   break;
}
+   return job_to_string_buf(varp, buf);
  #endif
break;
case VAR_CHANNEL:
  #ifdef FEAT_JOB_CHANNEL
+   if (in_vim9script())
{
!   semsg(_(e_using_invalid_value_as_string_str), "channel");
!   break;
}
+   return channel_to_string_buf(varp, buf);
  #endif
break;
case VAR_UNKNOWN:
*** ../vim-8.2.2943/src/job.c   2020-12-09 13:16:09.970838581 +0100
--- src/job.c   2021-06-05 20:40:14.811192286 +0200
***
*** 1927,1930 
--- 1927,1960 
rettv->vval.v_number = job_stop(job, argvars, NULL);
  }
  
+ /*
+  * Get a string with information about the job in "varp" in "buf".
+  * "buf" must be at least NUMBUFLEN long.
+  */
+ char_u *
+ job_to_string_buf(typval_T *varp, char_u *buf)
+ {
+ job_T *job = varp->vval.v_job;
+ char  *status;
+ 
+ if (job == NULL)
+   return (char_u *)"no process";
+ status = job->jv_status == JOB_FAILED ? "fail"
+   : job->jv_status >= JOB_ENDED ? "dead"
+   : "run";
+ # ifdef UNIX
+ vim_snprintf((char *)buf, NUMBUFLEN,
+   "process %ld %s", (long)job->jv_pid, status);
+ # elif defined(MSWIN)
+ vim_snprintf((char *)buf, NUMBUFLEN,
+   "process %ld %s",
+   (long)job->jv_proc_info.dwProcessId,
+   status);
+ # else
+ // fall-back
+ vim_snprintf((char *)buf, NUMBUFLEN, "process ? %s", status);
+ # endif
+ return buf;
+ }
+ 
  #endif // FEAT_JOB_CHANNEL
*** ../vim-8.2.2943/src/proto/job.pro   2020-09-05 15:48:32.469546692 +0200
--- src/proto/job.pro   2021-06-05 20:40:29.843144301 +0200
***
*** 34,37 
--- 34,38 
  void f_job_start(typval_T *argvars, typval_T *rettv);
  void f_job_status(typval_T *argvars, typval_T *rettv);
  void f_job_stop(typval_T *argvars, typval_T *rettv);
+ char_u *job_to_string_buf(typval_T *varp, char_u *buf);
  /* vim: set ft=c : */
*** ../vim-8.2.2943/src/chan