 			if (name.indexOf(OPERATOR_ESCAPE) == 0)
 			{
 				var op:String = name.substr(OPERATOR_ESCAPE.length);
-				if (op == '.' && params.length >= 2)
+				if ((op == '.' || assignmentOperators.hasOwnProperty(op)) && params.length > 0)
 				{
 					var result:String = params[0];
-					for (i = 1; i < params.length; i++)
+					var n:int = params.length;
+					if (op != '.')
+						n--;
+					for (i = 1; i < n; i++)
 					{
 						// if the evaluated param compiles as a variable, use the '.' syntax
 						constant = call.compiledParams[i] as CompiledConstant;


			// handle operators (find the longest matching operator)
			// this function assumes operators has already been initialized
			endIndex = index;
			var op:String = null;
			while (endIndex < n)
			{
				op = expression.substring(index, endIndex + 1);
				if (operators[op] == undefined)
					break;
				endIndex++;
			}
			if (index < endIndex)
				return expression.substring(index, endIndex);
			
			// handle whitespace (find the longest matching sequence)
			endIndex = index;

						break;
				}
				
//				assertValidStatementParams(tokens, firstSiblingIndex, tokenIndex);
			}
		}
		
		private function assertValidStatementParams(tokens:Array, index:int):void
		{
			var statement:String = tokens[index] as String;
			if (statements[statement]) // requires parameters?
			{
				var params:CompiledFunctionCall = tokens[index + 1] as CompiledFunctionCall;
				if (!params)
					throwInvalidSyntax(statement);
				
