[fpc-devel] Semicolon before else

Juha Manninen juha.manninen at phnet.fi
Fri Jan 29 08:52:59 CET 2010

>   if x < 2 then
>     if x > 0 then
>       Writeln('x=1');
>     else
>       Writeln('x=0');

I was going to write that's not backward compatible, but it doesn't actually 
compile with current FPC. I remembered now ELSE would be tied to the first IF. 
Anyway, there are some weird cases when it's difficult to tell which IF the 
ELSE belongs to. Those are very rare and then one really should use BEGIN END 
blocks anyway.

So, if this change is backward compatible then it should absolutely be 
accepted in FPC.

For Graeme and others: the problem is not the amount of typing. The problem is 
that you can easily forget this semicolon when you for example add ELSE to an 
existing IF. First there had to be a semicolon and then there must not be 
semicolon... Non-intuitive.
So, the goal is to make the language more intuitive and programmer-friendly.

The compiler can deal with complicated things. It could easily understand the 
semicolon (as we can see with this patch). Instead giving an error feels 
stupid. It is like with the "const array" syntax. The compiler essentially 
"Hey you stupid programmer, you left a semicolon there. I easily understand 
what your code means but still you must change it yourself."

Ok, it is a small thing but still, this language is otherwise clean and 
Using BEGIN END blocks always solves the problem but they are not used always.

Juha Manninen

More information about the fpc-devel mailing list