HELP CHAIN R. Barrett et al 1984
Updated: Adrian Howard Mar 1992
chain(P)
The procedure -chain- takes one argument, a procedure. When a procedure
C calls -chain-, control is immediately transferred to P. Any remaining
instructions in C are never executed. Local variable values are not
passed on from C to the procedure called by -chain-. When the procedure
given as argument to -chain- is run, all variable values are set to what
they were when C inherited them. When P finishes, control returns to the
procedure which originally called C.
Procedure -b-, below, has been altered to "chain" -c- rather than
calling it normally:
vars x;
define c;
npr('running C');
x * 2 -> x; x =>
npr('C finished');
enddefine;
define b;
dlocal x;
npr('running B');
x * 2 -> x; x =>
chain(c); ;;; the call to -chain- to procedure -c-
x =>
npr('B finished');
enddefine;
define a;
dlocal x;
npr('running A');
3 -> x; x =>
b();
npr('continuing to run A');
x =>
npr('A finished');
enddefine;
The effect of the non-standard control structure can be seen when we run
-a-:
a();
running A
** 3 ;;; -x- is 3 in -a-
running B
** 6 ;;; -x- is 6 in -b-. This value for -x- will not
;;; be passed on to -c-, as it is local to -b-.
;;; At this point -c- is "chained" to.
running C ;;; -x- is reset to what it was before entry to
;;; -b-, i.e. 3.
** 6 ;;; -c- immediately doubles the value of -x- and
;;; prints it out
C finished continuing to run A
** 6 ;;; -x- is global to -c-, and is therefore not
;;; reset when control returns from -c- to -a-
;;; (not to -b-).
A finished
The caller of -chain-, procedure -b-, is exited from, and a -chain- to
-c- is made. The value of -x- in -c- is set as it was when -b- inherited
it (to what it was in -a-.) When -c- finishes, control returns to -a-,
not to -b-. The instructions in -b- after the call of -c- are never
executed. Since -x- is not local to -c-, its value is not reset in -a-.
For other non-standard control structures, see *CHAINFROM, *CHAINTO,
*EXITTO, *EXITFROM, *CATCH, *JUMPOUT
Also see:
HELP *CALLER
Procedure identifying a single caller at a specified level
HELP *INTERRUPT
On POP-11 interrupt procedures
HELP *CONTROL
A summary of control structures in POP-11
REF *PROCEDURE
Full details of POP-11 procedure calling mechanisms
--- C.all/help/chain
--- Copyright University of Sussex 1992. All rights reserved. ----------Author: R. Barrett et al 1984