> # While the Algol 60 part is correct, the C mechanism is quite a bit more
> # than just a jump to another, calling procedure. It is intended to trap
> # all kinds of error conditions, something Algol 60 could not.
>
> procedure A; begin
> switch AX := X;
> procedure B(eexit); switch eexit; begin
> C(eexit);
Nowhere in this example the trapping of error conditions is present.
So I do not understand the purpose. [ Remainder snipped.]
> # Nesting of procedures and jumping out of inner procedures is something
> # different from trapping on error conditions.
>
> CAR Hoare "Here is a language so far ahead of its time, that it was not
> only an improvement on its predecessors, but also on nearly all its
> successors."
Except that you could not trap on error conditions. Moreover, there
were strange constructs like Jensen's device and:
"begin"
"procedure" B(x, b); "Boolean" b;
"begin"
"if" b "then" "goto" b "else" z := z + b;
"end";
"integer" z;
z := 0;
B(5, "false");
B(5, "true");
B(5, "false");
5:
"end"
where a procedure acts more like a macro than like a real procedure.
(And, yes, I know of at least one compiler that did this correct.
Most compilers did not allow it.)