formatter: like square and curly brackets, parentheses are on the block stack
diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
index 857c6fc..775be8a 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -980,8 +980,7 @@
 			} else {
 				switch (token.getType()) {
 					case ASTokenTypes.TOKEN_SEMICOLON: {
-						if (inControlFlowStatement && !blockStack.isEmpty() && blockStack.get(blockStack.size() - 1).token
-								.getType() == ASTokenTypes.TOKEN_KEYWORD_FOR) {
+						if (inControlFlowStatement && isInForStatement(blockStack)) {
 							if (insertSpaceAfterSemicolonInForStatements) {
 								requiredSpace = true;
 							}
@@ -1185,15 +1184,19 @@
 						break;
 					}
 					case ASTokenTypes.TOKEN_PAREN_OPEN: {
+						blockStack.add(new BlockStackItem(token));
 						if (inControlFlowStatement) {
 							controlFlowParenStack++;
 						}
-						else {
-							blockStack.add(new BlockStackItem(token));
-						}
 						break;
 					}
 					case ASTokenTypes.TOKEN_PAREN_CLOSE: {
+						if (!blockStack.isEmpty()) {
+							BlockStackItem item = blockStack.get(blockStack.size() - 1);
+							if (item.token.getType() == ASTokenTypes.TOKEN_PAREN_OPEN) {
+								blockStack.remove(item);
+							}
+						}
 						if (inControlFlowStatement) {
 							controlFlowParenStack--;
 							if (controlFlowParenStack <= 0) {
@@ -1215,14 +1218,6 @@
 								}
 							}
 						}
-						else {
-							if (!blockStack.isEmpty()) {
-								BlockStackItem item = blockStack.get(blockStack.size() - 1);
-								if (item.token.getType() == ASTokenTypes.TOKEN_PAREN_OPEN) {
-									blockStack.remove(item);
-								}
-							}
-						}
 						break;
 					}
 					case ASTokenTypes.TOKEN_KEYWORD_CASE: {
@@ -1435,6 +1430,27 @@
 		return builder.toString();
 	}
 
+	private boolean isInForStatement(List<BlockStackItem> blockStack) {
+		for (int i = blockStack.size() - 1; i >= 0; i--) {
+			BlockStackItem item = blockStack.get(i);
+			switch (item.token.getType()) {
+				case ASTokenTypes.TOKEN_BLOCK_OPEN:
+				case ASTokenTypes.TOKEN_SQUARE_OPEN:
+				case ASTokenTypes.TOKEN_PAREN_OPEN: {
+					// these tokens are fine, keep searching
+					break;
+				}
+				case ASTokenTypes.TOKEN_KEYWORD_FOR: {
+					return true;
+				}
+				default: {
+					return false;
+				}
+			}
+		}
+		return false;
+	}
+
 	private boolean isInListing(String lineText, boolean alreadyInListing) {
 		int searchIndex = 0;
 		boolean inListing = alreadyInListing;