A WITH statement has the form:
WITH id = e DO S END
where id is an identifier, e an expression,
and S a statement.
The statement declares id with scope S as an
alias for the variable e or as a readonly name for
the value e. The expression e is evaluated once, at entry
to the WITH statement.
The statement is like the procedure call P(e), where P is declared as:
PROCEDURE P(mode id: type of e) = BEGIN S END P;
If e is a
writable designator,
mode is VAR; otherwise,
mode is READONLY.
The only difference
between the WITH statement and the call P(e) is that free
variables, RETURNs, and EXITs that occur in the WITH
statement are interpreted in the context of the WITH statement,
not in the context of P.
A single WITH can contain multiple bindings, which are evaluated sequentially. That is:
WITH id_1 = e_1, id_2 = e_2, ...
is equivalent to:
WITH id_1 = e_1 DO
WITH id_2 = e_2 DO ....
m3-request@src.dec.com
Last modified on Mon Dec 19 08:18:03 PST 1994 by kalsow