updated for version 7.0f04
diff --git a/src/getchar.c b/src/getchar.c
index 629ad77..7b1cf87 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2321,7 +2321,8 @@
 			/*
 			 * Handle ":map <expr>": evaluate the {rhs} as an
 			 * expression.  Save and restore the typeahead so that
-			 * getchar() can be used.
+			 * getchar() can be used.  Also save and restore the
+			 * command line for "normal :".
 			 */
 			if (mp->m_expr)
 			{
@@ -4301,8 +4302,13 @@
 {
     char_u	*res;
     char_u	*p;
+    char_u	*save_cmd;
 
+    save_cmd = save_cmdline_alloc();
+    if (save_cmd == NULL)
+	return NULL;
     p = eval_to_string(str, NULL, FALSE);
+    restore_cmdline_alloc(save_cmd);
     if (p == NULL)
 	return NULL;
     res = vim_strsave_escape_csi(p);