 						
 						// must be local variable/assignment or list of local variables/assignments
 						
+						// special case for "y, x = 3;" which at this point is stored as {y, x = 3}
+						if (call.evaluatedMethod == operators[';'])
+						{
+							if (call.evaluatedParams.length != 1 || !(call.compiledParams[0] is CompiledFunctionCall))
+								throwInvalidSyntax(stmt);
+							// remove the operator ';' wrapper
+							tokens[startIndex + iPattern] = token = call = call.compiledParams[0];
+						}
+						
 						// if there is only a single variable, wrap it in an operator ',' call
 						if (!call.compiledParams || call.evaluatedMethod == operators['='])
-							tokens[startIndex + i] = token = call = compileOperator(',', [call]);
+							tokens[startIndex + iPattern] = token = call = compileOperator(',', [call]);
 						
-						// special case for "x = 3;" which becomes {x = 3}
-						if (call.evaluatedMethod == operators[';'] && call.compiledParams.length == 1)
-						{
-							call.compiledMethod = new CompiledConstant(',', operators[',']);
-							call.evaluateConstants();
-						}
-							
 						if (call.evaluatedMethod != operators[','] || call.compiledParams.length == 0)
 							throwInvalidSyntax(stmt);
 						
 						varNames = [];
-						for (var i:int = 0; i < call.compiledParams.length; i++)
+						for (var iParam:int = 0; iParam < call.compiledParams.length; iParam++)
 						{
-							var variable:CompiledFunctionCall = call.compiledParams[i] as CompiledFunctionCall;
+							var variable:CompiledFunctionCall = call.compiledParams[iParam] as CompiledFunctionCall;
 							if (!variable)
 								throwInvalidSyntax(stmt);
 							
 							if (!variable.compiledParams) // local initialization
 							{
 								// variable initialization only -- remove from ',' params
-								call.compiledParams.splice(i--, 1);
+								call.compiledParams.splice(iParam--, 1);
 								varNames.push(variable.evaluatedMethod);
 							}
 							else if (variable.evaluatedMethod == operators['='] && variable.compiledParams.length == 2) // local assignment

					}
					
					if (n == 2) // infix op
						return StringUtil.substitute("({0} {1} {2})", params[0], op, params[1]);
					
					if (n == 3 && op == '?:') // ternary op
						return StringUtil.substitute("({0} ? {1} : {2})", params);
				}
				
				if (op == ST_VAR)

			// find a matching statement pattern
			nextPattern: for each (var pattern:Array in _validStatementPatterns)
			{
				for (var iPattern:int = 0; iPattern < pattern.length; iPattern++)
				{
					if (startIndex + iPattern >= tokens.length)
						continue nextPattern;
					
					var type:String = pattern[iPattern];
					var token:Object = tokens[startIndex + iPattern];
					call = token as CompiledFunctionCall;
					
					if (statements.hasOwnProperty(type) && token != type)
