"Blady"
wrote in message
news:unoep3$2uqo6$2@dont-email.me...
> Le 11/01/2024 à 03:18, Randy Brukardt a écrit :
>> "Blady" wrote in message
>> news:unls1j$2f0up$3@dont-email.me...
>>> Is a procedure renaming equivalent to a simple call?
>>
>> General point: "Equivalent" is never true in programming language design.
>> If
>> construct A is equivalent in every way to construct B, then they have to
>> be
>> the same construct.
>>
>> For instance, in your example below, the two subprogram declarations have
>> different identifiers which have different visibility (two declarations
>> cannot be at exactly the same place), so there is at least one way that
>> they're not equivalent.
>>
>> So, if you want to talk about "equivalence", you need to qualify that by
>> what properties you are interested in.
>
> Well, I hadn't find a better word :-(
You have to say something like "equivalent in run-time behavior";
"equivalent" by itself is always False.
>> ...
>>> What is happening if My_Generic_Handler change?
>>
>> Nothing. The names in a renaming are evaluated when the renaming is
>> declared. If there are parts that could change, the compiler has to save
>> the
>> values at the point of the renaming. That's true for all forms of
>> renaming
>> (some names, like package names, can't change meaning so the example
>> isn't
>> possible, of course).
>
> Yet, the code:
> My_Log_3 ("Hei");
> My_Generic_Handler := My_Full_Handler'Access;
> My_Log_3 ("Hei");
> gives:
> Hei
> Full Hei
>
> I thought that was correct, wasn't it?
Shouldn't be correct. The "name" is evaluated during a renaming, and the
renamed entity does not change afterwards. So whatever subprogram My_Log_3
designates for the first call should be the same for the second call.
> GNAT issue ?
Appears to be (of course, without seeing the full code I can't say
definitively; people here often post snippets that aren't quite the same as
the actual code they tried to run. I wouldn't expect that with you, but we
all make mistakes. :-).
Randy.