If you mean that "if X" doesn't cause mirc to jump to :error, this is because the former is placed after the error label. This is most probably by design (one reason for this is that if you example didn't have /halt, it would go into an infinite loop if :error worked like you're suggesting).