2023-05-03 11:06:20 +02:00
== Why is this an issue?
2021-04-28 16:49:39 +02:00
Using recursion with paragraphs is not a problem in itself but it potentially exposes the software to endless loop. This is the case when there is no condition to end the recursion or when this condition is always false.
This rule raises an issue when a paragraph contains a ``++PERFORM++`` to itself to warn the developer that there is a risk of endless loop. This rule can also be used to fully prevent recursion to be used.
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,cobol]
2021-04-28 16:49:39 +02:00
----
PROCEDURE DIVISION.
...
PERFORM READ-RELATED-REC-PARA
...
READ-RELATED-REC-PARA.
...
CALL MY-MODULE
IF MORE-RECS
PERFORM READ-RELATED-REC-PARA
...
----
2022-02-04 17:28:24 +01:00
[source,cobol]
2021-04-28 16:49:39 +02:00
----
999-ERROR.
"Write to a log file"
If "write fails:
"Display an error message"
PERFORM 999-ERROR.
----
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,cobol]
2021-04-28 16:49:39 +02:00
----
PROCEDURE DIVISION.
...
PERFORM READ-RELATED-REC-PARA
UNTIL NO-MORE-RELATED-RECS
OR MAX-NO-OF-RELATED-RECS
...
READ-RELATED-REC-PARA.
...
CALL MY-MODULE
IF MORE-RECS
SET MORE-RELATED-RECS TO TRUE
ADD 1 TO NO-OF-RELATED-RECS
ELSE
SET NO-MORE-RELATED-RECS TO TRUE
END-IF
...
----
2021-04-28 18:08:03 +02:00
2021-06-02 20:44:38 +02:00
2021-06-03 09:05:38 +02:00
ifdef::env-github,rspecator-view[]
2021-09-20 15:38:42 +02:00
'''
== Implementation Specification
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== Message
Refactor this code to remove the "PERFORM XXX" to remove the risk of a potential infinite loop.
=== Highlighting
PERFORM XXX
2021-09-20 15:38:42 +02:00
2021-06-08 15:52:13 +02:00
'''
2021-06-02 20:44:38 +02:00
== Comments And Links
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== on 14 Nov 2018, 18:26:58 Ann Campbell wrote:
\[~alexandre.gigleux] this seems to overlap RSPEC-925
2021-06-03 09:05:38 +02:00
endif::env-github,rspecator-view[]