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/typval.c b/src/typval.c
index 3d1bd7f..f08d1aa 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -414,7 +414,7 @@
     char_u *
 tv_get_string_buf(typval_T *varp, char_u *buf)
 {
-    char_u	*res =  tv_get_string_buf_chk(varp, buf);
+    char_u	*res = tv_get_string_buf_chk(varp, buf);
 
     return res != NULL ? res : (char_u *)"";
 }
@@ -478,44 +478,22 @@
 	    break;
 	case VAR_JOB:
 #ifdef FEAT_JOB_CHANNEL
+	    if (in_vim9script())
 	    {
-		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;
+		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())
 	    {
-		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;
+		semsg(_(e_using_invalid_value_as_string_str), "channel");
+		break;
 	    }
+	    return channel_to_string_buf(varp, buf);
 #endif
 	    break;
 	case VAR_UNKNOWN: