diff --git a/src/job.c b/src/job.c index f55a8cd813..5876c28cb0 100644 --- 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)); + } } } diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 478a1e5cd7..5f5a45985c 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -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') diff --git a/src/version.c b/src/version.c index ff532f1f7c..6ea39c07ec 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1857, /**/ 1856, /**/