We now use the special “unset” value as the return value for a handler when no explicit return statement is present. That way, we can detect whether something was actually returned or not. Unset behaves just like an empty string unless you explicitly call LEOGetIsUnsetValue(), so this is no change in behaviour as far as scripters are concerned.
ParseCommandOrExpression now actyually tries to parse an expression, and only if that fails, a command.