 				{
 					token = compileOperator(ST_VAR, [new CompiledConstant(null, varNames)]);
 					call = params[0];
-					if (call.compiledParams.length > 0)
+					if (call.evaluatedMethod == operators['in'])
+					{
+						call.compiledParams[0] = compileOperator(',', [token, call.compiledParams[0]]);
+						call.evaluateConstants();
+						token = call;
+					}
+					else if (call.compiledParams.length > 0)
 					{
 						call.compiledParams.unshift(token);
 						call.evaluateConstants();

						
						// implemented as "for (each|in)(\in(list), item=undefined, stmt)
						var _in:CompiledFunctionCall = forParams.compiledParams[0];
						var _item:ICompiledObject = compileVariableAssignment(_in.compiledParams[0], '=', newUndefinedConstant());
						var _list:ICompiledObject = compileOperator('in', [_in.compiledParams[1]]);
						tokens[startIndex] = compileOperator(stmt, [_list, _item, params[1]]);
					}
				}
				else if (_jumpStatements.indexOf(stmt) >= 0)

						if (!call.compiledParams || call.evaluatedMethod == operators['='])
							tokens[startIndex + iPattern] = token = call = compileOperator(',', [call]);
						
						// special case for "for (var x in y) { }"
						if (call.evaluatedMethod == operators['in'] && call.compiledParams.length == 2)
						{
							// check the variable
							call = call.compiledParams[0] as CompiledFunctionCall;
							if (!call || call.compiledParams) // not a variable?
								throwInvalidSyntax(stmt);
							// save single variable name
							varNames = [call.evaluatedMethod];
							continue;
						}
						
						if (call.evaluatedMethod != operators[','] || call.compiledParams.length == 0)
							throwInvalidSyntax(stmt);
						
