 			if (operators['#'])
 				compileUnaryOperators(tokens, ['#']);
 			
-			// next step: compile infix '**' operators
+			// next step: compile statements
+			compileStatements(tokens);
+			
+			// next step: compile infix '**' operators
 			compileInfixOperators(tokens, ['**']);
-			
+			
 			// next step: compile unary operators
-			compileUnaryOperators(tokens, unaryOperatorSymbols);
-			
+			compileUnaryOperators(tokens, unaryOperatorSymbols);
+			
 			// next step: compile remaining infix operators in order
 			for (i = 0; i < orderedOperators.length; i++)
-				compileInfixOperators(tokens, orderedOperators[i]);
-			
+				compileInfixOperators(tokens, orderedOperators[i]);
+			
 			// next step: compile conditional branches
 			conditionals: while (true)
 			{

					// The function token hasn't been compiled yet.
					if (constants.hasOwnProperty(token))
						compiledToken = new CompiledConstant(token as String, constants[token]);
					else if (!BRANCH_LOOKUP.hasOwnProperty(token)) // branch will be handled below
						compiledToken = compileVariable(token as String);
				}

				// handle access and descendants operators

					constants[OPERATOR_ESCAPE + op] = operators[op];
			
			// fill branch reverse-lookup dictionary
			BRANCH_LOOKUP[constants[OPERATOR_ESCAPE + '?:']] = true;
			BRANCH_LOOKUP[constants[OPERATOR_ESCAPE + '&&']] = true;
			BRANCH_LOOKUP[constants[OPERATOR_ESCAPE + '||']] = false;
