On 20 May 2000, at 9:31, Russ Whitaker wrote:
So what does the Pascal specs say?
The Extended Pascal standard, section 6.9.3.9.1, says:
"After a for-statement is executed, other than being left by a goto-statement, the control-variable shall be undefined."
That's remarkably clear. :-) That means that variable "b" in the code below isn't guaranteed to be true:
procedure p; var i : integer; b : Boolean; begin for i := 1 to 10 do ; b := (i > 10); end;
The next part of the standard is a bit less clear:
"Neither a for-statement nor any procedure-and-function-declaration-part of the block that closest-contains a for-statement shall contain a statement threatening (see 6.9.4) a variable-access denoting the variable denoted by the control-variable of the for-statement."
I believe that says that you can't modify the control variable of a for- statement (a "threat" is defined in the standard as one of ten ways that a variable may be assigned a value). So this would clearly be illegal:
procedure p; var i : integer; begin for i := 1 to 10 do i := 11; end;
However, it also says that a block containing a for-statement cannot contain a threat to the control variable. In other words, this would be illegal too:
procedure p; var i : integer; begin i := 0; for i := 1 to 10 do end;
I suppose the reason is to disallow something like this:
procedure p; var i : integer; label 1, 2, 3; begin goto 1; 2: i := 11; goto 3;
1: for i := 1 to 10 do begin goto 2; 3: end end;
...which is functionally equivalent to the second code example.
So it would seem that to comply with the EP standard, GPC must prohibit any threat (i.e., variable assignment) to a for-statement control variable anywhere within the scope of that variable, and not just within the for- statement itself.
-- Dave