]> granicus.if.org Git - vim/commitdiff
patch 8.2.1857: Vim9: using job_status() on an unused var gives an error v8.2.1857
authorBram Moolenaar <Bram@vim.org>
Sat, 17 Oct 2020 16:51:52 +0000 (18:51 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 17 Oct 2020 16:51:52 +0000 (18:51 +0200)
Problem:    Vim9: using job_status() on an unused var gives an error.
Solution:   Return "fail". (closes #7158)

src/job.c
src/testdir/test_vim9_assign.vim
src/version.c

index f55a8cd8139ea90da7f3f2b6e0b2a50a1d59927d..5876c28cb0c361f039fc9014d4cc85da5fd23dad 100644 (file)
--- a/src/job.c
+++ b/src/job.c
@@ -1894,12 +1894,21 @@ f_job_start(typval_T *argvars, typval_T *rettv)
     void
 f_job_status(typval_T *argvars, typval_T *rettv)
 {
-    job_T      *job = get_job_arg(&argvars[0]);
-
-    if (job != NULL)
+    if (argvars[0].v_type == VAR_JOB && argvars[0].vval.v_job == NULL)
     {
+       // A job that never started returns "fail".
        rettv->v_type = VAR_STRING;
-       rettv->vval.v_string = vim_strsave((char_u *)job_status(job));
+       rettv->vval.v_string = vim_strsave((char_u *)"fail");
+    }
+    else
+    {
+       job_T   *job = get_job_arg(&argvars[0]);
+
+       if (job != NULL)
+       {
+           rettv->v_type = VAR_STRING;
+           rettv->vval.v_string = vim_strsave((char_u *)job_status(job));
+       }
     }
 }
 
index 478a1e5cd7a4aeb2eb3fc0bc84a6838af55dcfd1..5f5a45985cc002e96587e8e61eefff6b69d9373a 100644 (file)
@@ -74,7 +74,11 @@ def Test_assignment()
 
   if has('channel')
     var chan1: channel
+    assert_equal('fail', ch_status(chan1))
+
     var job1: job
+    assert_equal('fail', job_status(job1))
+
     # calling job_start() is in test_vim9_fails.vim, it causes leak reports
   endif
   if has('float')
index ff532f1f7cf3a24a57a46db8bfb6bda49189021e..6ea39c07ecbbbe9a49c8fb7be880a5d36d362c1c 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1857,
 /**/
     1856,
 /**/