* ADA Compiler Query
@ 1991-02-11 15:41 Gordon Russell
1991-02-13 15:27 ` wayne
0 siblings, 1 reply; 2+ messages in thread
From: Gordon Russell @ 1991-02-11 15:41 UTC (permalink / raw)
Hi out there,
I am hoping that someone on the network can answer a compiler implementation
problem for me. The problem stems from my PhD research into compiler
techniques. If we consider the following program extract...
variable1 : integer;
procedure MAIN is
variable1 : integer;
result : integer;
----------------------------------------------------
procedure GET_RESULT(variable2: in out integer) is
begin
variable1=2;
variable2=variable1 + variable2;
end GET_RESULT;
----------------------------------------------------
begin
variable1=10;
get_result(variable1);
end MAIN;
My question is.......what is variable1 equal to at the end of MAIN?
There appears to be a number of options....either
(1) 4
(2) 12
(3) Something wierd
(4) Compiler dependent.
Evidentally, it is reliant on whether GET_RESULT operates on variable2
directly or indirectly. I am hoping that the results are compiler
dependent. Does anyone have an ADA compiler who is willing to test this?
I am especially interested to hear from official sources (if they are
reading this), since I do not want to break any validation suite
program.
Reply either to this newsgroup or by email. I will post a concensus if
comments are mailed directly to me. Please no flames if this program is
not syntatically correct, as it is the mechanism which I am inquiring
after. And yes, I do think that this is poor programming practice,
but when has that stopped anyone!
Thanx in advance.....Gordon Russell
gor@cs.strath.ac.uk
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: ADA Compiler Query
1991-02-11 15:41 ADA Compiler Query Gordon Russell
@ 1991-02-13 15:27 ` wayne
0 siblings, 0 replies; 2+ messages in thread
From: wayne @ 1991-02-13 15:27 UTC (permalink / raw)
The compiler actions are well defined. According to the LRM (section 6.2:6)
for a scalar parameter (integers, etc) of mode IN OUT the value of the
formal parameter, variable2, is a copy of the actual parameter, variable1
and it in this case it should have the value of 10. At the end of GET_RESULT
variable1 will be updated from variable2. Mode IN OUT is not "call by
reference" for scalar types.
1 procedure MAIN is
2 variable1 : integer;
3 result : integer;
4 ----------------------------------------------------
5 procedure GET_RESULT(variable2: in out integer) is
6 begin
7 variable1 := 2;
8 variable2 := variable1 + variable2;
9 end GET_RESULT;
10 ----------------------------------------------------
11 begin
12 variable1 := 10;
13 get_result(variable1);
14 end MAIN;
So at line 6 both variable1 and variable2 have the value of 10.
After line 7 is executed, variable1 has the value of 2, and variable2
still has the value of 10.
The answer should therefore be
(2) 12
Wayne Wylupski
Intermetrics, Inc.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~1991-02-13 15:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1991-02-11 15:41 ADA Compiler Query Gordon Russell
1991-02-13 15:27 ` wayne
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox