Index: sexp.cpp
===================================================================
--- sexp.cpp	(revision 10739)
+++ sexp.cpp	(working copy)
@@ -8468,13 +8468,13 @@
 		// only eval this argument if it's valid
 		if (Sexp_nodes[n].flags & SNF_ARGUMENT_VALID)
 		{
-			// flush conditional to avoid short-circuiting
-			flush_sexp_tree(condition_node);
-
 			// evaluate conditional for current argument
 			Sexp_replacement_arguments.push_back(Sexp_nodes[n].text);
 			val = eval_sexp(condition_node);
 
+			// flush conditional to avoid short-circuiting
+			flush_sexp_tree(condition_node);
+
 			switch (val)
 			{
 				case SEXP_TRUE:
@@ -8542,13 +8542,13 @@
 	{
 		// since we can't see or modify the validity, assume all are valid
 		{
-			// flush conditional to avoid short-circuiting
-			flush_sexp_tree(condition_node);
-
 			// evaluate conditional for current argument
 			Sexp_replacement_arguments.push_back(argument_vector[i]);
 			val = eval_sexp(condition_node);
 
+			// flush conditional to avoid short-circuiting
+			flush_sexp_tree(condition_node);
+
 			switch (val)
 			{
 				case SEXP_TRUE:
@@ -8741,12 +8741,14 @@
 	{
 		// flush stuff
 		Sexp_applicable_argument_list.clear_nesting_level();
-		flush_sexp_tree(condition_node);
 
 		// evaluate conditional for current argument
 		Sexp_replacement_arguments.push_back(Sexp_nodes[n].text);
 		val = eval_sexp(condition_node);
 
+		// flush conditional to avoid short-circuiting
+		flush_sexp_tree(condition_node);
+
 		// true?
 		if (val == SEXP_TRUE || val == SEXP_KNOWN_TRUE)
 		{
@@ -8790,12 +8792,14 @@
 	{
 		// flush stuff
 		Sexp_applicable_argument_list.clear_nesting_level();
-		flush_sexp_tree(condition_node);
 
 		// evaluate conditional for current argument
 		Sexp_replacement_arguments.push_back(Sexp_nodes[n].text);
 		val = eval_sexp(condition_node);
 
+		// flush conditional to avoid short-circuiting
+		flush_sexp_tree(condition_node);
+
 		// true?
 		if (val == SEXP_TRUE || val == SEXP_KNOWN_TRUE)
 		{
