 			if (tokens.indexOf(';') >= 0)
 				return compileOperator(';', compileArray(tokens, ';'));
 
+			// next step: compile statements
+			compileStatements(tokens);
+			
 			// last step: verify there is only one token left
 			if (tokens.length == 1)
 				return tokens[0];

					var cfc:CompiledFunctionCall = nextToken as CompiledFunctionCall;
					if (cfc && cfc.evaluatedMethod is String) // variable lookup
					{
						compiledTokens.splice(index, 2, compileOperator(token, [cfc.compiledMethod, new CompiledConstant("1", 1)]));
					}
					else if (cfc && cfc.evaluatedMethod == operators['.'])
					{
						// switch to the unary operator
						cfc.compiledParams.push(new CompiledConstant("1", 1));
						compiledTokens.splice(index, 2, compileOperator(token, cfc.compiledParams));
					}
					else

				if (!lhs || !rhs)
					throw new Error("Invalid " + (!lhs ? 'left' : 'right') + "-hand-side of '" + tokens[i] + "'");
				
				// lhs should either be a constant or a call to operator '.'
				
				if (lhs.evaluatedMethod is String) // lhs is a variable lookup
				{
					tokens.splice(i - 1, 3, compileOperator(tokens[i], [lhs.compiledMethod, tokens[i + 1]]));
				}
				else if (lhs.evaluatedMethod == operators['.'])
				{
					// switch to the assignment operator
					lhs.compiledParams.push(tokens[i + 1]);
					tokens.splice(i - 1, 3, compileOperator(tokens[i], lhs.compiledParams));
				}
				else
					throw new Error("Invalid left-hand-side of '" + tokens[i] + "'");
			}

			// next step: handle multiple comma- or semicolon-separated expressions
