patch 7.4.1229
Problem:    "eval" and "expr" channel commands don't work yet.
Solution:   Implement them.  Update the error numbers.  Also add "redraw".
diff --git a/src/eval.c b/src/eval.c
index 4c530a0..5035126 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -16897,8 +16897,6 @@
 {
     char_u	*text;
     char_u	*resp;
-    typval_T	nrtv;
-    typval_T	listtv;
     typval_T	typetv;
     int		ch_idx;
 
@@ -16906,19 +16904,9 @@
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
 
-    nrtv.v_type = VAR_NUMBER;
-    nrtv.vval.v_number = channel_get_id();
-    if (rettv_list_alloc(&listtv) == FAIL)
+    text = json_encode_nr_expr(channel_get_id(), &argvars[1]);
+    if (text == NULL)
 	return;
-    if (list_append_tv(listtv.vval.v_list, &nrtv) == FAIL
-	    || list_append_tv(listtv.vval.v_list, &argvars[1]) == FAIL)
-    {
-	list_unref(listtv.vval.v_list);
-	return;
-    }
-
-    text = json_encode(&listtv);
-    list_unref(listtv.vval.v_list);
 
     ch_idx = send_common(argvars, text, "sendexpr");
     if (ch_idx >= 0)
@@ -16929,7 +16917,7 @@
 	resp = channel_read_block(ch_idx);
 	if (resp != NULL)
 	{
-	    channel_decode_json(resp, &typetv, rettv);
+	    channel_decode_json(resp, &typetv, rettv, NULL);
 	    vim_free(resp);
 	}
     }