[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Gm2] HALT procedure
From: |
Tom Breeden |
Subject: |
Re: [Gm2] HALT procedure |
Date: |
Mon, 21 Aug 2017 13:05:24 -0400 (EDT) |
User-agent: |
YAM/2.10-dev (AmigaOS4; PPC; rv:20170801-4431502f) |
On 08/21/2017, you wrote:
> The HALT procedure calls the C abort by default, which aborts the
> program abnormally. Though this isn't explicit in PIM, I believe it is
> in ISO/IEC 10514-1 (mainly because of the introduction of the parameter
> for the program return value).
>
> More specifically, I understood that HALT (without parameters) should
> behave as if the end of the program had been reached. This was added to
> compensate for the removal of the GOTO, which in Pascal was typically
> used to go the end of the file.
>
> Put another way, I get 'Aborted' as output when using HALT, but the XREF
> and Processes examples in PIM seem to suggest that HALT is a the way of
> ending the processing of the program before it has completed, the same
> as GOTO 9999 in Pascal. The ISO standard, if memory serves, has a return
> value of 0 (1 under Unix?) for HALT, if the parameter isn't specified, but
> I get 134 when using HALT.
>
> Am I misunderstanding its use?
It looks like ISO did define HALT similar to GOTO 99999, but
there os a little more to the ISO behaviour.
>From the ISO 10514-1 document:
6.10.3.5 The Procedure HALT
The procedure HALT can be used to terminate the execution
of a program at a point other than the end of the program
block.
A call of HALT shall have no actual parameters.
The call HALT shall be a program termination event - see 6.1.7
And section 6.1.7 defines four ways program termination can be
invoked:
a) the end of the normal part of the program module
initialization body is reached,
b) a RETURN statement is executed in the program module
initialization body,
c) the standard procedure HALT is called,
d) an exception is raised and this exception is not handled.
So like GOTO 99999, HALT does not imply an abnormal termination.
6.1.7 defines further rules describing what happens with execution
of module termination sections and when c) and d) occur in
a coroutine.
ISO required system built-in modules EXCEPTIONS and TERMINATION
provide procedures and functions for module termination sections
to figure out what's going on at program ending.
eg. functions
PROCEDURE IsTerminating():BOOLEAN;
(* Returns TRUE if any coroutine has started program
termination and FALSE otherwise. *)
PROCEDURE HasHalted(): BOOLEAN ;
(* Returns TRUE if a call to HALT has been made and FALSE
otherwise. *)
PROCEDURE IsExceptionalExecution 0: BOOLEAN;
(* If the current coroutine is in the exceptional execution
state because of the raising of an exception,
returns TRUE, and otherwise returns FALSE. *)
tom