On Sun, Aug 13, 2017 at 2:55 PM, Johnny Billquist <bqt(a)update.uu.se> wrote:
On 2017-08-13 19:24, Dave Horsfall
<dave(a)horsfall.org> wrote:
On Sat, 12 Aug 2017, Steve Johnson wrote:
A little Googling shows that the IF I mentioned
was called the
"arithmetic IF".
Ah yes. It was in FORTRAN II, as I recall.
Still there in FORTRAN 77.
There was also a Computed GOTO that branched to one of N labels
depending
on the value of the expression.
I think that was still in FORTRAN IV?
Still there in FORTRAN 77.
And an Assigned GOTO whose main use, as I remember, was to allow for
error
recovery when a subroutine failed...
A real ugly statement; you assigned a statement number to a variable, then
did a sort of indirect GOTO (or did the compiler recognise "GOTO I")?
The compiler recognize "GOTO I". And I have to be assigned to a statement
number (label). It has to be an integer variable, and when you assign it to
a label, you cannot do any arithmetic with it anymore. And you assign it
with a special statement. Thus, it can be used to store what label to jump
to, but you cannot use arithmetic to set what it should jump to.
How those poor devils ever debugged their code with such monstrous
constructions I'll never know.
It's actually not that hard. All this stuff is fairly simple to deal with.
The real horror in FORTRAN is EQUIVALENCE, which can give C a fair fight
for real horror stories.
IIRC, PRIMOS was written in FORTRAN, and they had an extension where you
could pass assigned GOTO variables as parameters and to jump globally; I
don't recall the stack semantics, but I would guess setjmp/longjmp style.
-- Charles