Re: Patch 8.2.2944
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
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
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