Corrective action for PERFORM . . . VARYING . . . AFTER
If a PERFORM ... VARYING statement is flagged by FLAGMIG, that statement
will have to be converted. A possible way of converting a PERFORM ... VARYING
statement that has all four dependencies is as follows:
PERFORM xx
VARYING id-2 FROM id-3 BY id-4 UNTIL cond-1
AFTER id-5 FROM id-6 BY id-7 UNTIL cond-2
AFTER id-8 FROM id-9 BY id-10 UNTIL cond-3.
is converted into:
MOVE id-3 TO id-2.
MOVE id-6 TO id-5
MOVE id-9 TO id-8
PERFORM UNTIL cond-1
PERFORM UNTIL cond-2
PERFORM UNTIL cond-3
PERFORM xx
ADD id-10 TO id-8
END-PERFORM
MOVE id-9 TO id-8
ADD id-7 TO id-5
END-PERFORM
MOVE id-6 TO id-5
ADD id-4 TO id-2
END-PERFORM
This example assumes that all id-x are identifiers. If any are index-names, then SET statements must be used in place of MOVE statements.
The example above is a worst-case conversion. It could be refined by changing
only the parts of the statement that use those identifiers for which a dependency
(potentially) exists. For example, if only id-6 is dependent on id-2 and no
other dependency exists, the conversion above can be reduced to:
MOVE id-3 TO id-2.
MOVE id-6 TO id-5.
PERFORM UNTIL cond-1
PERFORM UNTIL cond-2
PERFORM VARYING id-8 FROM id-9 BY id-10 UNTIL cond-3
PERFORM XX
END-PERFORM
ADD id-7 TO id-5
END-PERFORM
MOVE id-6 TO id-5
ADD id-4 TO id-2
END-PERFORM