Pat.Terry@p101.f19.n490.z2.fidonet.org (Pat Terry) (08/06/89)
(* RETURN and HALT at level 0
Recently doubt has been expressed as to the meaning of RETURN in program
modules, and level 0 modules.
I suggest that RETURN = HALT normally in main modules and
               RETURN = RETURN        in level 0 modules
At least one compiler has other ideas.
I would be curious to have the results for compilers to which I do not have
access.  A simple test program follows
*)
MODULE Return;
FROM InOut IMPORT WriteString;
   MODULE Inner;
     IMPORT WriteString;
     BEGIN
       WriteString('inner1');
       RETURN;
       WriteString('inner2')
     END Inner;
BEGIN
  WriteString('main1');
  RETURN;
  WriteString('main2')
END Return.
(*
Compiler                    Output
------------------------------------
Ana 68 (Sun)             |
Collier V2               |  inner1main1
FST                      |  inner1main1 - but RETURN is not "abnormal"
                                          whereas HALT would be
FTL                      |  rejects RETURN in both places
Hamburg VAX              |
HP9000/800               |
Logitech (MS-DOS 3.03)   |  inner1main1
Logitech (VAX)           |
MacMeth                  |
MacModula-2              |
Modula/370               |
Oregon (80386/Xenix)     |
Oregon (Sun)             |
Pecan Modula-2           |
Rowley                   |
Stonybrook               |
Stonybrook  (Quickmod)   |  inner1   (treats inner RETURN as HALT)
Taylor                   |
TDI (Atari ST)           |
TopSpeed                 |  inner1main1
Volition Sage/Stride     |  inner1main1
*)
--  
uucp: {mcvax!uunet,tektronix,sun!nosun}!oresoft!dawggon!2!490!19.101!Pat.Terry
Internet: Pat.Terry@p101.f19.n490.z2.fidonet.orgMSRS002@ECNCDC.BITNET ("THE DOCTOR.") (08/09/89)
I tried the example module "Return" in TopSpeed and got inner1main1. Tom Ruby MSRS002@ECNCDC