[fpc-devel] Semicolon before else

Marc Weustink marc.weustink at cuperus.nl
Fri Jan 29 13:27:55 CET 2010


Aleksa Todorovic wrote:
> On Fri, Jan 29, 2010 at 12:11, Marc Weustink<marc.weustink at cuperus.nl>  wrote:
>> Aleksa Todorovic wrote:
>>>
>>> On Fri, Jan 29, 2010 at 11:42, Michael Van Canneyt
>>> <michael at freepascal.org>    wrote:
>>>>
>>>> It breaks the behavious of case:
>>>>
>>>> case b of
>>>>   1 : something;
>>>>   2 : If a then
>>>>        DoSomethingElse;
>>>> else
>>>>   DoElse
>>>> end;
>>>>
>>>> As it is now, b=2 and a=False will result in no code executed.
>>>>
>>>> After the patch, B=2 and a=False will result in DoElse.
>>>>
>>>
>>> Have you actually tried it? I've tested those cases and they should work.
>>
>>
>> Then in your patch, how do you distinguish between the else belonging to the
>> case statement and the else belonging to the if ?
>
> When compiler hits 'end' inside 'case', it analyzes syntax tree
> created for the last branch, and checks if there was semicolon before
> last else or not (which is clear sign if that else is part of if
> statement or case).

So this feature is inconsistent ?

Imagine I've a case like:

  case Foo of
    1 : DoOne;
    2 : If a then DoA; else DoNotA;
    3 : DoThree;
  end;

Now, due to changed requirements, 1 and 3 shout do the same, so I change 
the case into:

  case Foo of
    1,3 : DoOneAndThree;
    2 : If a then DoA; else DoNotA;
  end;

This will affect the meaning of 2 too, without noticing...

No thank you.

Marc



More information about the fpc-devel mailing list