Subject: Re: bug#56236: Package: emacs, ada-mode

From: Lars Ingebrigtsen <[email-masked]>
Date: Tue, 28 Jun 2022 15:24:03 +0200

(Forwarding to make it land in the bug tracker; resending didn't work,
apparently.)

Cameron Howie <[email-masked]> writes:

> Hi Lars, 
>
> Following up on the emails of yesterday, I have pasted below into this message a
> concrete example Ada code that raises issues with the Ada Mode plug-in regarding
> using of a "declaration expression" inside a Postcondition. As commented in the code
> itself, if you remove the comment markers from the Postcondition the Ada Mode
> parser indicates all sorts of errors when in fact the Postcondition is legal Ada 2022.
>
> I didn't want to send to the "[email-masked] address as you may have some
> better way of handling this internally...
>
> -------- EXAMPLE FILE main.adb STARTS HERE
>
> --  Build with e.g., "gnatmake main.adb -gnat2020"
> --  EMACS ADA MODE ISSUE: remove the 'commented out' Postcondition for 
> --                        Absolute_Difference and the Ada Mode parser signals 
> --                        all sorts of errors.
>
> with Ada.Text_IO; use Ada.Text_IO;
>
> procedure Main
> is
>    procedure Absolute_Difference
>      (x, y : Integer;
>       diff : out Integer)
>       --  with Post => (declare
>       --     min : constant Integer := Integer'Min(x, y);
>       --     max : constant Integer := Integer'Max(x, y);
>       --     begin diff = max - min)
>    is
>    begin
>       diff := abs x - y;
>    end Absolute_Difference;
>
>    u : constant Integer := 95;
>    v : constant Integer := 5;
>    d : Integer;
> begin
>    Absolute_Difference (u, v, diff => d);
>    Put_Line ("Absolute difference =" & d'Img);  --  prints "90"
> end Main;
>
> -------- END OF EXAMPLE FILE main.adb
>
> On Sunday, June 26, 2022, 06:09:57 PM GMT+2, Lars Ingebrigtsen <[email-masked]>
> wrote: 
>
> (Resending with the debbugs address in the CC header so that it lands in
> the bug tracker.)
>
> Cameron Howie <[email-masked]> writes:
>
>> No immediately, Lars, no. However, I can send one through tomorrow. Off the top
> of
>> my head, the issue arises when I use a declare expression in a Post condition, so
>> something like this:
>>
>> procedure Foo 
>>    (x, y : Integer; 
>>      arr : in out Integer_Array)
>> with Post => (declare sum : constant Integer := Sum_Elements (arr); begin sum >=
> x
>> + y);
>>
>> I've not yet used the declare expression syntax in a subprogram body, just (so far)
> in
>> contract specifications. 
>>
>> On Sunday, June 26, 2022, 05:54:21 PM GMT+2, Lars Ingebrigtsen
> <[email-masked]>
>> wrote: 
>>
>> Cameron Howie via "Bug reports for GNU Emacs, the Swiss army knife of
>>
>> text editors" <[email-masked]> writes:
>>
>>> I'm using Ada Mode version 7.2.0. The internal parser is currently
>>> failing to handle Ada 2022 "declare expression" syntax. This leads to
>>> other problems like various parsing-sensitive commands failing. My
>>> only (current) solution is to use older Ada syntax.
>>
>> Do you have a code snippet that demonstrates these problems?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no