changeset 35391:571a03ed0bb9 v9.1.0481

patch 9.1.0481: Vim9: term_getjob() throws an exception on error Commit: https://github.com/vim/vim/commit/a78eb25db3089b864dab8a9cc6c9e5270bf09644 Author: Ernie Rael <errael@raelity.com> Date: Thu Jun 13 17:24:54 2024 +0200 patch 9.1.0481: Vim9: term_getjob() throws an exception on error Problem: Vim9: term_getjob() throws an exception on error Solution: Return null_job instead, when there is no job (Ernie Rael) closes: #14984 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 13 Jun 2024 17:30:06 +0200
parents 30b0097a8956
children d22c6dc112be
files runtime/doc/terminal.txt src/terminal.c src/testdir/test_vim9_builtin.vim src/version.c
diffstat 4 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt*	For Vim version 9.1.  Last change: 2024 Jun 08
+*terminal.txt*	For Vim version 9.1.  Last change: 2024 Jun 13
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -647,7 +647,8 @@ term_getcursor({buf})					*term_getcurso
 term_getjob({buf})					*term_getjob()*
 		Get the Job associated with terminal window {buf}.
 		{buf} is used as with |term_getsize()|.
-		Returns |v:null| when there is no job.
+		Returns |v:null| when there is no job. In Vim9 script, return
+		null_job when there is no job.
 
 		Can also be used as a |method|: >
 			GetBufnr()->term_getjob()
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -6171,8 +6171,16 @@ f_term_getjob(typval_T *argvars, typval_
     buf = term_get_buf(argvars, "term_getjob()");
     if (buf == NULL)
     {
-	rettv->v_type = VAR_SPECIAL;
-	rettv->vval.v_number = VVAL_NULL;
+	if (in_vim9script())
+	{
+	    rettv->v_type = VAR_JOB;
+	    rettv->vval.v_job = NULL;
+	}
+	else
+	{
+	    rettv->v_type = VAR_SPECIAL;
+	    rettv->vval.v_number = VVAL_NULL;
+	}
 	return;
     }
 
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -4557,6 +4557,7 @@ enddef
 def Test_term_getjob()
   CheckRunVimInTerminal
   v9.CheckSourceDefAndScriptFailure(['term_getjob(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
+  v9.CheckSourceDefAndScriptSuccess(['assert_true(term_getjob(0) == null_job)'])
 enddef
 
 def Test_term_getline()
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    481,
+/**/
     480,
 /**/
     479,