 			return compileFunctionCall(new CompiledConstant(operatorName, constants[operatorName]), compiledParams);
 		}
 		
+		private function compileVariableAssignment(assignmentOperator:String, lhs:CompiledFunctionCall, rhs:ICompiledObject):ICompiledObject
+		{
+			if (!lhs || !rhs)
+				throw new Error("Invalid " + (!lhs ? 'left' : 'right') + "-hand-side of '" + assignmentOperator + "'");
+			
+			// lhs should either be a variable lookup or a call to operator '.'
+			if (lhs.evaluatedMethod is String) // lhs is a variable lookup
+			{
+				return compileOperator(assignmentOperator, [lhs.compiledMethod, rhs]);
+			}
+			else if (lhs.evaluatedMethod == operators['.'])
+			{
+				// switch to the assignment operator
+				lhs.compiledParams.push(rhs);
+				return compileOperator(assignmentOperator, lhs.compiledParams);
+			}
+			else
+				throw new Error("Invalid left-hand-side of '" + assignmentOperator + "'");
+		}
+		
 		/**
 		 * This function assumes that every token except statements have already been compiled.
 		 * @param tokens

			}
		}
	}
}

			return wrapperFunction;
		}

		public static const _do_continue_test:String = <![CDATA[
			var test = true;
			do
			{
