formatter: chained variable declarations
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 1f4d27a..857c6fc 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -661,6 +661,7 @@
 		boolean indentedStatement = false;
 		boolean caseOrDefaultBlockOpenPending = false;
 		boolean skipFormatting = false;
+		int varOrConstChainLevel = -1;
 		List<BlockStackItem> blockStack = new ArrayList<BlockStackItem>();
 		int controlFlowParenStack = 0;
 		int ternaryStack = 0;
@@ -927,6 +928,7 @@
 							indent = decreaseIndent(indent);
 						}
 						inVarOrConstDeclaration = false;
+						varOrConstChainLevel = -1;
 						break;
 					}
 					case ASTokenTypes.TOKEN_ASDOC_COMMENT: {
@@ -1099,6 +1101,7 @@
 					case ASTokenTypes.TOKEN_KEYWORD_CONST: {
 						inVarOrConstDeclaration = true;
 						requiredSpace = true;
+						varOrConstChainLevel = blockStack.size();
 						break;
 					}
 					case ASTokenTypes.TOKEN_KEYWORD_CATCH:
@@ -1185,6 +1188,9 @@
 						if (inControlFlowStatement) {
 							controlFlowParenStack++;
 						}
+						else {
+							blockStack.add(new BlockStackItem(token));
+						}
 						break;
 					}
 					case ASTokenTypes.TOKEN_PAREN_CLOSE: {
@@ -1209,6 +1215,14 @@
 								}
 							}
 						}
+						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: {
@@ -1310,6 +1324,9 @@
 						break;
 					}
 					case ASTokenTypes.TOKEN_COMMA: {
+						if (varOrConstChainLevel == blockStack.size()) {
+							inVarOrConstDeclaration = true;
+						}
 						if (insertSpaceAfterCommaDelimiter && !skipWhitespaceBeforeSemicolon) {
 							requiredSpace = true;
 						}
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java b/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java
index 4959baa..37b2a9c 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestVariableDeclaration.java
@@ -119,4 +119,23 @@
 				// @formatter:on
 				result);
 	}
+
+	@Test
+	public void testChained() {
+		FORMATTER formatter = new FORMATTER();
+		formatter.insertSpaceAfterKeywordsInControlFlowStatements = true;
+		formatter.placeOpenBraceOnNewLine = true;
+		formatter.insertSpaces = false;
+		String result = formatter.formatActionScriptText(
+		// @formatter:off
+			"var myVar:Number = what(hi, 2), myVar2:Number = 456.7;",
+			// @formatter:on
+			problems
+		);
+		assertEquals(
+		// @formatter:off
+				"var myVar:Number = what(hi, 2), myVar2:Number = 456.7;",
+				// @formatter:on
+				result);
+	}
 }