patch 8.2.3423: Vim9: list += list creates a new list in :def function

Problem:    Vim9: list += list creates a new list in :def function.
Solution:   Append to the existing list.
diff --git a/src/vim9compile.c b/src/vim9compile.c
index a4d8423..e7c7c07 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -690,12 +690,16 @@
     return OK;
 }
 
+/*
+ * Generate instruction for "+".  For a list this creates a new list.
+ */
     static int
 generate_add_instr(
 	cctx_T *cctx,
 	vartype_T vartype,
 	type_T *type1,
-	type_T *type2)
+	type_T *type2,
+	exprtype_T expr_type)
 {
     garray_T	*stack = &cctx->ctx_type_stack;
     isn_T	*isn = generate_instr_drop(cctx,
@@ -715,7 +719,12 @@
 	return FAIL;
 
     if (isn != NULL)
-	isn->isn_arg.op.op_type = EXPR_ADD;
+    {
+	if (isn->isn_type == ISN_ADDLIST)
+	    isn->isn_arg.op.op_type = expr_type;
+	else
+	    isn->isn_arg.op.op_type = EXPR_ADD;
+    }
 
     // When concatenating two lists with different member types the member type
     // becomes "any".
@@ -769,7 +778,8 @@
     switch (*op)
     {
 	case '+':
-		  if (generate_add_instr(cctx, vartype, type1, type2) == FAIL)
+		  if (generate_add_instr(cctx, vartype, type1, type2,
+							    EXPR_COPY) == FAIL)
 		      return FAIL;
 		  break;
 
@@ -7186,7 +7196,8 @@
 	    {
 		if (generate_add_instr(cctx,
 			    operator_type(lhs.lhs_member_type, stacktype),
-				       lhs.lhs_member_type, stacktype) == FAIL)
+				       lhs.lhs_member_type, stacktype,
+							  EXPR_APPEND) == FAIL)
 		    goto theend;
 	    }
 	    else if (generate_two_op(cctx, op) == FAIL)