 				{
 					if (isFunctionHeader(tokens[i]))
 						tokens.splice(i, 2, compileFunctionDefinition(tokens[i], tokens[i + 1]));
-					else if (assignmentOperators.hasOwnProperty(tokens[i]))
+					else if (assignmentOperators.hasOwnProperty(tokens[i]) && unaryOperatorSymbols.indexOf(tokens[i]) < 0)
 						break;
 				}
 				if (i < 0)

			};
			operators[ST_VAR] = function(..._):*{};
			operators[ST_IMPORT] = function(..._):*{};
			// loop statements
			operators[ST_DO] = function(x:*, y:*):* { return x && y; };
			operators[ST_WHILE] = function(x:*, y:*):* { return x && y; };
			operators[ST_FOR] = function(x:*, y:*):* { return x && y; };
			operators[ST_FOR_DO] = function(x:*, y:*):* { return x && y; };
			operators[ST_FOR_IN] = function(..._):*{};
			operators[ST_FOR_EACH] = function(..._):*{};
			// jump statements
			operators[ST_BREAK] = function(..._):*{};
			operators[ST_CONTINUE] = function(..._):*{};


			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)
