TypeCobol icon indicating copy to clipboard operation
TypeCobol copied to clipboard

Adapt codegen for Type Bool and IBM Enterprise COBOL for z/OS 6.2

Open smedilol opened this issue 1 year ago • 1 comments

What is the current problem With IBM Enterprise COBOL for z/OS 6.2 we can now use set xxx to false syntax. This will simplify the code generation of our type Bool.

With this sample:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Sample.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 Var1 type Bool.
      
       procedure division.
           set Var1 to false
           .
       END PROGRAM Sample.

Current codegen

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Sample.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      *01 Var1 type Bool.
       01  Var1-value PIC X VALUE LOW-VALUE.
           88  Var1       VALUE 'T'.
           88  Var1-false VALUE 'F'
                           X'00' thru 'S'
                           'U' thru X'FF'.

       procedure division.
      *    set Var1 to false
           SET Var1-false TO TRUE     
           .
       END PROGRAM Sample.

Describe the solution you'd like New codegen:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Sample.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      *01 Var1 type Bool.
       01  Var1-value PIC X VALUE LOW-VALUE.
           88  Var1       VALUE 'T' FALSE 'F'.

       procedure division.
           set Var1 to false                            
           .
       END PROGRAM Sample.

Technical

  • In Skeleton.xml, delete rule BOOL.SET which change set to false instruction
  • In Skeleton.xml, adapt rule BOOL.DECLARE :
        @{
        var items = "";
        if (@Model.value.Length == 0) {
        items = @Model.level + "  " + @Model.name + "-value PIC X VALUE LOW-VALUE" + @Model.global + ".";
        }
        else {
        items = @Model.level + "  " + @Model.name + "-value PIC X VALUE " +  @Model.value + @Model.global + ".";
        }
        }
@items
    88  @Model.name       VALUE 'T' false 'F'.

Warning: I didn't test this code.

  • Use autoReplace to regenerate all tests results and check that they are ok

How to test automatically Standard codegen tests.

smedilol avatar May 25 '23 14:05 smedilol