<div dir="ltr">I am trying to implement a program transformation with Hoopl. The<br>transformation replaces a particular statement with variable<br>declarations provided that the variables have not been previously<br>declared. A map keeps track of declared variables where the map keys<br>store variable names.<br><br>The transformation works only for programs without loops. In the<br>program below, it should replace line<br>2 rec #3 INxt B37H00G<br>with<br>1 Global Field B37H00G<br>2 Global Array B37HO3R<br>3 rec #3 INxt B37H00G<br>but it doesn't.<br><br>=== Example graph ==<br>0 goto L4<br>1 L4:<br>2 rec #3 INxt B37H00G<br>3 while #3 goto L5 goto L2<br>4 L5:<br>5 Global Field VSTF01a<br>6 goto L4<br>7 L2:<br><br>I think the reason it fails is because there are two paths leading to<br>L4, one from the program start (line 0) and a second when the loop<br>repeats from line 6. In the first case the transformation produces the<br>substitution graph since the two variables are not in the map. In the<br>analysis of the second path however, the variables are in the name space so<br>the rewrite function returns Nothing. In the end, the second<br>transformation result is preserved (i.e. Nothing) and the graph is not<br>transformed.<br><br>Do I understand correctly why the transformation fails for loops? How would you suggest to solve this problem?<br><br>Regards<br></div>