patch 8.2.2944: Vim9: no error when using job or channel as a string

Problem:    Vim9: no error when using job or channel as a string.
Solution:   Be more strict about conversion to string. (closes #8312)
diff --git a/src/job.c b/src/job.c
index aeb2af7..189c06e 100644
--- a/src/job.c
+++ b/src/job.c
@@ -1927,4 +1927,34 @@
 	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