 					throw new Error("Misplaced unary operator '" + token + "'");
 				
 				// skip infix operator
-				if (index > 0 && compiledTokens[index - 1] is ICompiledObject)
+				if (index > 0 && compiledTokens[index - 1] is ICompiledObject && (index < 2 || !blockOperators.hasOwnProperty(compiledTokens[index - 2])))
 				{
 					call = compiledTokens[index - 1] as CompiledFunctionCall;
 					if (!call || call.evaluatedMethod != operators[';'])

			operators[ST_THROW] = function(e:*):* { throw e; };
			
			// 'if' statement can be considered a pure operator
			pureOperators[ST_IF] = function(c:*, t:*, f:*):* { return c ? t : f; };
			// math
			pureOperators["**"] = Math.pow;
			pureOperators["*"] = function(x:*, y:*):Number { return x * y; };


			var op:String;
			
			// copy over special operators
			for (op in pureOperators)
				operators[op] = pureOperators[op];
			for (op in assignmentOperators)
				operators[op] = assignmentOperators[op];
			for (op in blockOperators)
				operators[op] = blockOperators[op];
			
			// create a corresponding function name for each operator
			for (op in operators)
