On Fri, Mar 17, 2017 at 11:42 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Fabien COELHO <coelho@cri.ensmp.fr> writes: >> I also fear that there are corner cases where the behavior would still >> be inconsistent. Consider >> >> \if ... >> \set foo `echo \endif should not appear here`
> In this instance, ISTM that there is no problem. On "\if true", set is > executed, all is well. On "\if false", the whole line would be skipped > because the if-related commands are only expected on their own line, all > is well again. No problem.
AFAICS, you misunderstood the example completely, or else you're proposing syntax restrictions that are even more bizarre and unintelligible than I thought before. We cannot have a situation where the syntax rules for backslash commands inside an \if are fundamentally different from what they are elsewhere; that's just going to lead to confusion and bug reports.
regards, tom lane
I think Fabien was arguing that inside a false block there would be no syntax rules beyond "is the first non-space character on this line a '\' and if so is it followed with a if/elif/else/endif?". If the answer is no, skip the line. To me that seems somewhat similar to Tom's suggestion that a false branch just keeps consuming text until it encounters a \conditional or EOF.