diff --git a/src/evalwindow.c b/src/evalwindow.c
index f8c0c7a..8b47b98 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -718,66 +718,66 @@
 
     id = (int)tv_get_number(argvars);
     wp = win_id2wp_tp(id, &tp);
-    if (wp != NULL && tp != NULL)
+    if (wp == NULL || tp == NULL)
+	return;
+
+    pos_T	curpos = wp->w_cursor;
+    char_u	cwd[MAXPATHL];
+    int	cwd_status = FAIL;
+#ifdef FEAT_AUTOCHDIR
+    char_u	autocwd[MAXPATHL];
+    int	apply_acd = FALSE;
+#endif
+
+    // Getting and setting directory can be slow on some systems, only do
+    // this when the current or target window/tab have a local directory or
+    // 'acd' is set.
+    if (curwin != wp
+	    && (curwin->w_localdir != NULL
+		|| wp->w_localdir != NULL
+		|| (curtab != tp
+		    && (curtab->tp_localdir != NULL
+			|| tp->tp_localdir != NULL))
+#ifdef FEAT_AUTOCHDIR
+		|| p_acd
+#endif
+	       ))
+	cwd_status = mch_dirname(cwd, MAXPATHL);
+
+#ifdef FEAT_AUTOCHDIR
+    // If 'acd' is set, check we are using that directory.  If yes, then
+    // apply 'acd' afterwards, otherwise restore the current directory.
+    if (cwd_status == OK && p_acd)
     {
-	pos_T	curpos = wp->w_cursor;
-	char_u	cwd[MAXPATHL];
-	int	cwd_status = FAIL;
-#ifdef FEAT_AUTOCHDIR
-	char_u	autocwd[MAXPATHL];
-	int	apply_acd = FALSE;
+	do_autochdir();
+	apply_acd = mch_dirname(autocwd, MAXPATHL) == OK
+	    && STRCMP(cwd, autocwd) == 0;
+    }
 #endif
 
-	// Getting and setting directory can be slow on some systems, only do
-	// this when the current or target window/tab have a local directory or
-	// 'acd' is set.
-	if (curwin != wp
-		&& (curwin->w_localdir != NULL
-		    || wp->w_localdir != NULL
-		    || (curtab != tp
-			&& (curtab->tp_localdir != NULL
-			    || tp->tp_localdir != NULL))
+    if (switch_win_noblock(&switchwin, wp, tp, TRUE) == OK)
+    {
+	check_cursor();
+	execute_common(argvars, rettv, 1);
+    }
+    restore_win_noblock(&switchwin, TRUE);
 #ifdef FEAT_AUTOCHDIR
-		    || p_acd
+    if (apply_acd)
+	do_autochdir();
+    else
 #endif
-		    ))
-	    cwd_status = mch_dirname(cwd, MAXPATHL);
-
-#ifdef FEAT_AUTOCHDIR
-	// If 'acd' is set, check we are using that directory.  If yes, then
-	// apply 'acd' afterwards, otherwise restore the current directory.
-	if (cwd_status == OK && p_acd)
-	{
-	    do_autochdir();
-	    apply_acd = mch_dirname(autocwd, MAXPATHL) == OK
-						  && STRCMP(cwd, autocwd) == 0;
-	}
-#endif
-
-	if (switch_win_noblock(&switchwin, wp, tp, TRUE) == OK)
-	{
-	    check_cursor();
-	    execute_common(argvars, rettv, 1);
-	}
-	restore_win_noblock(&switchwin, TRUE);
-#ifdef FEAT_AUTOCHDIR
-	if (apply_acd)
-	    do_autochdir();
-	else
-#endif
-	    if (cwd_status == OK)
+	if (cwd_status == OK)
 	    mch_chdir((char *)cwd);
 
-	// Update the status line if the cursor moved.
-	if (win_valid(wp) && !EQUAL_POS(curpos, wp->w_cursor))
-	    wp->w_redr_status = TRUE;
+    // Update the status line if the cursor moved.
+    if (win_valid(wp) && !EQUAL_POS(curpos, wp->w_cursor))
+	wp->w_redr_status = TRUE;
 
-	// In case the command moved the cursor or changed the Visual area,
-	// check it is valid.
-	check_cursor();
-	if (VIsual_active)
-	    check_pos(curbuf, &VIsual);
-    }
+    // In case the command moved the cursor or changed the Visual area,
+    // check it is valid.
+    check_cursor();
+    if (VIsual_active)
+	check_pos(curbuf, &VIsual);
 }
 
 /*
@@ -1093,11 +1093,11 @@
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
     rettv->vval.v_string = alloc(2);
-    if (rettv->vval.v_string != NULL)
-    {
-	rettv->vval.v_string[0] = cmdwin_type;
-	rettv->vval.v_string[1] = NUL;
-    }
+    if (rettv->vval.v_string == NULL)
+	return;
+
+    rettv->vval.v_string[0] = cmdwin_type;
+    rettv->vval.v_string[1] = NUL;
 }
 
 /*
