diff --git a/src/vim9instr.c b/src/vim9instr.c
index 3a8d695..f20d993 100644
--- a/src/vim9instr.c
+++ b/src/vim9instr.c
@@ -355,11 +355,6 @@
     vartype_T	vartype1 = tv1 != NULL ? tv1->v_type : type1->tt_type;
     vartype_T	vartype2 = tv2 != NULL ? tv2->v_type : type2->tt_type;
 
-    if (vartype1 == VAR_UNKNOWN)
-	vartype1 = VAR_ANY;
-    if (vartype2 == VAR_UNKNOWN)
-	vartype2 = VAR_ANY;
-
     if (vartype1 == vartype2)
     {
 	switch (vartype1)
@@ -462,11 +457,8 @@
     isn->isn_arg.op.op_ic = ic;
 
     // takes two arguments, puts one bool back
-    if (stack->ga_len >= 2)
-    {
-	--stack->ga_len;
-	set_type_on_stack(cctx, &t_bool, 0);
-    }
+    --stack->ga_len;
+    set_type_on_stack(cctx, &t_bool, 0);
 
     return OK;
 }
@@ -485,9 +477,6 @@
 
     RETURN_OK_IF_SKIP(cctx);
 
-    if (count < 1)
-	return FAIL;
-
     if ((isn = generate_instr(cctx, ISN_CONCAT)) == NULL)
 	return FAIL;
     isn->isn_arg.number = count;
@@ -578,80 +567,74 @@
 /*
  * Generate a PUSH instruction for "tv".
  * "tv" will be consumed or cleared.
- * Nothing happens if "tv" is NULL or of type VAR_UNKNOWN;
  */
     int
 generate_tv_PUSH(cctx_T *cctx, typval_T *tv)
 {
-    if (tv != NULL)
+    switch (tv->v_type)
     {
-	switch (tv->v_type)
-	{
-	    case VAR_UNKNOWN:
-		break;
-	    case VAR_BOOL:
-		generate_PUSHBOOL(cctx, tv->vval.v_number);
-		break;
-	    case VAR_SPECIAL:
-		generate_PUSHSPEC(cctx, tv->vval.v_number);
-		break;
-	    case VAR_NUMBER:
-		generate_PUSHNR(cctx, tv->vval.v_number);
-		break;
+	case VAR_BOOL:
+	    generate_PUSHBOOL(cctx, tv->vval.v_number);
+	    break;
+	case VAR_SPECIAL:
+	    generate_PUSHSPEC(cctx, tv->vval.v_number);
+	    break;
+	case VAR_NUMBER:
+	    generate_PUSHNR(cctx, tv->vval.v_number);
+	    break;
 #ifdef FEAT_FLOAT
-	    case VAR_FLOAT:
-		generate_PUSHF(cctx, tv->vval.v_float);
-		break;
+	case VAR_FLOAT:
+	    generate_PUSHF(cctx, tv->vval.v_float);
+	    break;
 #endif
-	    case VAR_BLOB:
-		generate_PUSHBLOB(cctx, tv->vval.v_blob);
-		tv->vval.v_blob = NULL;
-		break;
-	    case VAR_LIST:
-		if (tv->vval.v_list != NULL)
-		    iemsg("non-empty list constant not supported");
-		generate_NEWLIST(cctx, 0, TRUE);
-		break;
-	    case VAR_DICT:
-		if (tv->vval.v_dict != NULL)
-		    iemsg("non-empty dict constant not supported");
-		generate_NEWDICT(cctx, 0, TRUE);
-		break;
+	case VAR_BLOB:
+	    generate_PUSHBLOB(cctx, tv->vval.v_blob);
+	    tv->vval.v_blob = NULL;
+	    break;
+	case VAR_LIST:
+	    if (tv->vval.v_list != NULL)
+		iemsg("non-empty list constant not supported");
+	    generate_NEWLIST(cctx, 0, TRUE);
+	    break;
+	case VAR_DICT:
+	    if (tv->vval.v_dict != NULL)
+		iemsg("non-empty dict constant not supported");
+	    generate_NEWDICT(cctx, 0, TRUE);
+	    break;
 #ifdef FEAT_JOB_CHANNEL
-	    case VAR_JOB:
-		if (tv->vval.v_job != NULL)
-		    iemsg("non-null job constant not supported");
-		generate_PUSHJOB(cctx);
-		break;
-	    case VAR_CHANNEL:
-		if (tv->vval.v_channel != NULL)
-		    iemsg("non-null channel constant not supported");
-		generate_PUSHCHANNEL(cctx);
-		break;
+	case VAR_JOB:
+	    if (tv->vval.v_job != NULL)
+		iemsg("non-null job constant not supported");
+	    generate_PUSHJOB(cctx);
+	    break;
+	case VAR_CHANNEL:
+	    if (tv->vval.v_channel != NULL)
+		iemsg("non-null channel constant not supported");
+	    generate_PUSHCHANNEL(cctx);
+	    break;
 #endif
-	    case VAR_FUNC:
-		if (tv->vval.v_string != NULL)
-		    iemsg("non-null function constant not supported");
-		generate_PUSHFUNC(cctx, NULL, &t_func_unknown);
-		break;
-	    case VAR_PARTIAL:
-		if (tv->vval.v_partial != NULL)
-		    iemsg("non-null partial constant not supported");
-		if (generate_instr_type(cctx, ISN_NEWPARTIAL, &t_func_unknown)
-								       == NULL)
-		    return FAIL;
-		break;
-	    case VAR_STRING:
-		generate_PUSHS(cctx, &tv->vval.v_string);
-		tv->vval.v_string = NULL;
-		break;
-	    default:
-		iemsg("constant type not supported");
-		clear_tv(tv);
+	case VAR_FUNC:
+	    if (tv->vval.v_string != NULL)
+		iemsg("non-null function constant not supported");
+	    generate_PUSHFUNC(cctx, NULL, &t_func_unknown);
+	    break;
+	case VAR_PARTIAL:
+	    if (tv->vval.v_partial != NULL)
+		iemsg("non-null partial constant not supported");
+	    if (generate_instr_type(cctx, ISN_NEWPARTIAL, &t_func_unknown)
+								   == NULL)
 		return FAIL;
-	}
-	tv->v_type = VAR_UNKNOWN;
+	    break;
+	case VAR_STRING:
+	    generate_PUSHS(cctx, &tv->vval.v_string);
+	    tv->vval.v_string = NULL;
+	    break;
+	default:
+	    siemsg("constant type %d not supported", tv->v_type);
+	    clear_tv(tv);
+	    return FAIL;
     }
+    tv->v_type = VAR_UNKNOWN;
     return OK;
 }
 
@@ -735,22 +718,21 @@
 generate_PUSHS(cctx_T *cctx, char_u **str)
 {
     isn_T	*isn;
+    int		ret = OK;
 
-    if (cctx->ctx_skip == SKIP_YES)
+    if (cctx->ctx_skip != SKIP_YES)
     {
-	if (str != NULL)
-	    VIM_CLEAR(*str);
-	return OK;
+	if ((isn = generate_instr_type(cctx, ISN_PUSHS, &t_string)) == NULL)
+	    ret = FAIL;
+	else
+	{
+	    isn->isn_arg.string = str == NULL ? NULL : *str;
+	    return OK;
+	}
     }
-    if ((isn = generate_instr_type(cctx, ISN_PUSHS, &t_string)) == NULL)
-    {
-	if (str != NULL)
-	    VIM_CLEAR(*str);
-	return FAIL;
-    }
-    isn->isn_arg.string = str == NULL ? NULL : *str;
-
-    return OK;
+    if (str != NULL)
+	VIM_CLEAR(*str);
+    return ret;
 }
 
 /*
@@ -864,6 +846,7 @@
  * Generate an ISN_GETITEM instruction with "index".
  * "with_op" is TRUE for "+=" and other operators, the stack has the current
  * value below the list with values.
+ * Caller must check the type is a list.
  */
     int
 generate_GETITEM(cctx_T *cctx, int index, int with_op)
@@ -874,12 +857,6 @@
 
     RETURN_OK_IF_SKIP(cctx);
 
-    if (type->tt_type != VAR_LIST)
-    {
-	// cannot happen, caller has checked the type
-	emsg(_(e_list_required));
-	return FAIL;
-    }
     item_type = type->tt_member;
     if ((isn = generate_instr(cctx, ISN_GETITEM)) == NULL)
 	return FAIL;
@@ -1048,8 +1025,7 @@
     int
 generate_LOADV(
 	cctx_T	    *cctx,
-	char_u	    *name,
-	int	    error)
+	char_u	    *name)
 {
     int	    di_flags;
     int	    vidx = find_vim_var(name, &di_flags);
@@ -1058,8 +1034,7 @@
     RETURN_OK_IF_SKIP(cctx);
     if (vidx < 0)
     {
-	if (error)
-	    semsg(_(e_variable_not_found_str), name);
+	semsg(_(e_variable_not_found_str), name);
 	return FAIL;
     }
     type = get_vim_var_type(vidx, cctx->ctx_type_list);
@@ -1258,23 +1233,22 @@
 generate_NEWFUNC(cctx_T *cctx, char_u *lambda_name, char_u *func_name)
 {
     isn_T	*isn;
+    int		ret = OK;
 
-    if (cctx->ctx_skip == SKIP_YES)
+    if (cctx->ctx_skip != SKIP_YES)
     {
-	vim_free(lambda_name);
-	vim_free(func_name);
-	return OK;
+	if ((isn = generate_instr(cctx, ISN_NEWFUNC)) == NULL)
+	    ret = FAIL;
+	else
+	{
+	    isn->isn_arg.newfunc.nf_lambda = lambda_name;
+	    isn->isn_arg.newfunc.nf_global = func_name;
+	    return OK;
+	}
     }
-    if ((isn = generate_instr(cctx, ISN_NEWFUNC)) == NULL)
-    {
-	vim_free(lambda_name);
-	vim_free(func_name);
-	return FAIL;
-    }
-    isn->isn_arg.newfunc.nf_lambda = lambda_name;
-    isn->isn_arg.newfunc.nf_global = func_name;
-
-    return OK;
+    vim_free(lambda_name);
+    vim_free(func_name);
+    return ret;
 }
 
 /*
@@ -1827,19 +1801,20 @@
 generate_EXEC(cctx_T *cctx, isntype_T isntype, char_u *str)
 {
     isn_T	*isn;
+    int		ret = OK;
 
-    if (cctx->ctx_skip == SKIP_YES)
+    if (cctx->ctx_skip != SKIP_YES)
     {
-	vim_free(str);
-	return OK;
+	if ((isn = generate_instr(cctx, isntype)) == NULL)
+	    ret = FAIL;
+	else
+	{
+	    isn->isn_arg.string = str;
+	    return OK;
+	}
     }
-    if ((isn = generate_instr(cctx, isntype)) == NULL)
-    {
-	vim_free(str);
-	return FAIL;
-    }
-    isn->isn_arg.string = str;
-    return OK;
+    vim_free(str);
+    return ret;
 }
 
     int
