From: madmats@elma.epfl.ch (Mats Weber)
Subject: Parameter passing mechanisms
Date: 23 Feb 89 13:08:02 GMT [thread overview]
Message-ID: <890223140802.21a00384@elcc.epfl.ch> (raw)
Tim Harrison <harrison@software.org> writes:
>The program in question is not erroneous. LRM 6.2(13) says that "the value
>of the formal is undefined after updating the actual other than by updating
>formal." In the example program the actual is A_Vector and the formals are
>V and W. The example program is only updating the formal (W) not the actual
>(A_Vector)....
My example was:
> procedure Is_This_Program_Erroneous is
>
> type Vector is array (1..5) of Float;
>
> A_Vector : Vector := (0.35, 0.67, 1.8, 2.0, 7.7);
>
> procedure Add (V : in Vector; W : in out Vector) is
> begin
> for I in 1..5 loop
> W(I) := V(I) + W(I);
> end loop;
> end Add;
>
> begin
> Add(A_Vector, A_Vector);
> end Is_This_Program_Erroneous;
There are two points:
1) This program is not erroueous according to the LRM because its effect does
not depend on whether V and W are passed by reference or by copy.
6.2(13) is a NOTE and according to LRM 1.2(7), notes are not part of the
standard. The problem with 6.2(13) is that it is not a consequence of
other rules.
2) 6.2(13) applies here because if V and W are passed by reference, the
actual A_Vector is updated by the assignment W(1) := V(1) + W(1); other
than by updating the formal V, which makes V(2..5) undefined according
to 6.2(13).
(See 6.2(7): "... by arranging that every use of the formal parameter
be treated as a use of the associated actual parameter...").
Mats Weber
Swiss Federal Institute of Technology
EPFL DI LITh
1015 Lausanne
Switzerland
e-mail : madmats@elma.epfl.ch
next reply other threads:[~1989-02-23 13:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
1989-02-23 13:08 Mats Weber [this message]
-- strict thread matches above, loose matches on Subject: below --
1989-02-22 12:28 Parameter passing mechanisms Tim Harrison
1989-02-20 16:38 Mats Weber
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox