Skip to content

Commit 745d02b

Browse files
Update
1 parent f9b5d9c commit 745d02b

File tree

3 files changed

+75
-36
lines changed

3 files changed

+75
-36
lines changed

cobc/ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
2024-12-18 Emilien Lemaire <[email protected]>
33

4+
* cobgen.c, field.c, tree.c, tree.h, typeck.c: Hand merge 2015-07-02
5+
about COMP-X.
46
* cobgen.c (output_size): use `compx_size` when usage is COMP-X
57
* cobgen.c (output_attr): override type to `COB_TYPE_NUMERIC_BINARY`
68
when usage is `COMP-X`
@@ -7325,6 +7327,10 @@
73257327
* codegen.c (output_size): Fix Bug #146 reference modification
73267328
ignored ODO size
73277329

7330+
2015-07-02 Ron Norman
7331+
* Fixes to tree.c, tree,h typeck.c field.c codegen.c to correctly
7332+
handle COMP-X data fields. This now works the same as Micro Focus
7333+
73287334
2015-06-12 Edward Hart <[email protected]>
73297335

73307336
* codegen.c: bug #78 - changed location of initialization of

cobc/tree.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,9 @@ cb_tree_type (const cb_tree x, const struct cb_field *f)
15331533
switch (CB_TREE_CATEGORY (x)) {
15341534
case CB_CATEGORY_ALPHABETIC:
15351535
case CB_CATEGORY_ALPHANUMERIC:
1536+
if (f->usage == CB_USAGE_COMP_X) {
1537+
return COB_TYPE_NUMERIC_BINARY;
1538+
}
15361539
return COB_TYPE_ALPHANUMERIC;
15371540
case CB_CATEGORY_ALPHANUMERIC_EDITED:
15381541
return COB_TYPE_ALPHANUMERIC_EDITED;

tests/testsuite.src/run_misc.at

Lines changed: 66 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15134,49 +15134,79 @@ AT_CHECK([COB_PROF_ENABLE=1 COB_PROF_FILE=prof.csv $COBCRUN_DIRECT ./caller], [0
1513415134
AT_CLEANUP
1513515135

1513615136

15137-
AT_SETUP([display all characters of COMP-X])
15138-
#AT_KEYWORDS([display comp-x])
15137+
AT_SETUP([PICTURE COMP-X])
15138+
AT_KEYWORDS([Numeric])
1513915139

1514015140
AT_DATA([prog.cob], [
1514115141
IDENTIFICATION DIVISION.
1514215142
PROGRAM-ID. prog.
15143-
15144-
DATA DIVISION.
15143+
DATA DIVISION.
1514515144
WORKING-STORAGE SECTION.
15146-
15147-
01 W-X PIC X COMP-X VALUE 99.
15148-
01 W-Y PIC X COMP-X VALUE 128.
15149-
01 W-Z PIC X VALUE "z".
15150-
01 W-ZR REDEFINES W-Z PIC X COMP-X.
15151-
01 W-A PIC XX COMP-X VALUE 256.
15152-
01 W-B PIC XX COMP-X VALUE 64046.
15145+
01 TST.
15146+
05 BVAL PIC 9999 BINARY VALUE 512.
15147+
05 XVAL PIC XX COMP-X VALUE 512.
15148+
88 XLOW VALUE 0 THRU 256.
15149+
88 XHIGH VALUE 257 THRU 65536.
15150+
05 VAL9 PIC 99999 COMP-X VALUE 1024.
15151+
88 LOW9 VALUE 0 THRU 256.
15152+
88 HIGH9 VALUE 257 THRU 65536.
15153+
05 XVAL2 PIC XX COMP-X VALUE 16706.
15154+
05 XVALX REDEFINES XVAL2 PIC XX.
15155+
05 YVALX PIC XX VALUE 'A '.
15156+
05 YVAL2 REDEFINES YVALX PIC XX COMP-X.
1515315157

1515415158
PROCEDURE DIVISION.
15155-
MAIN.
15156-
DISPLAY FUNCTION BYTE-LENGTH (W-X).
15157-
DISPLAY FUNCTION BYTE-LENGTH (W-Y).
15158-
DISPLAY FUNCTION BYTE-LENGTH (W-ZR).
15159-
DISPLAY FUNCTION BYTE-LENGTH (W-A).
15160-
DISPLAY FUNCTION BYTE-LENGTH (W-B).
15161-
DISPLAY W-X.
15162-
DISPLAY W-Y.
15163-
DISPLAY W-ZR.
15164-
DISPLAY W-A.
15165-
DISPLAY W-B.
15166-
STOP RUN.
15167-
])
15168-
15169-
AT_CHECK([$COMPILE prog.cob])
15170-
AT_CHECK([$COBCRUN_DIRECT ./prog], [0], [1
15171-
1
15172-
1
15173-
2
15174-
2
15175-
099
15176-
128
15177-
122
15178-
00256
15179-
64046
15159+
DISPLAY " XVAL is " XVAL "; Length is " LENGTH OF XVAL.
15160+
DISPLAY " VAL9 is " VAL9 "; Length is " LENGTH OF VAL9.
15161+
MOVE 10240 TO XVAL.
15162+
DISPLAY " XVAL is " XVAL "; Length is " LENGTH OF XVAL.
15163+
DISPLAY "XVAL2 is " XVAL2 "; Length is " LENGTH OF XVAL2.
15164+
DISPLAY "XVALX is " XVALX "; Length is " LENGTH OF XVALX.
15165+
ADD 1 TO XVAL2.
15166+
DISPLAY "XVALX is " XVALX " after +1;".
15167+
COMPUTE XVAL2 = XVAL2 / 256 + 8192.
15168+
DISPLAY "XVALX is " XVALX " after / 256 + 8192;".
15169+
MOVE 'DE' TO XVALX.
15170+
DISPLAY "Numeric: " XVAL2 " is char " XVALX.
15171+
MOVE ZERO TO YVAL2.
15172+
MOVE 'D' TO YVALX (1:1)
15173+
MOVE LOW-VALUES TO YVALX (2:1)
15174+
SUBTRACT YVAL2 FROM XVAL2.
15175+
MOVE ' ' TO YVALX (1:1)
15176+
MOVE LOW-VALUES TO YVALX (2:1)
15177+
ADD YVAL2 TO XVAL2.
15178+
DISPLAY "Numeric: " XVAL2 " is char " XVALX.
15179+
MOVE 0 TO XVAL.
15180+
ADD 10240 TO XVAL.
15181+
IF XVAL = 10240
15182+
DISPLAY "XVAL is " XVAL
15183+
ELSE
15184+
DISPLAY "XVAL is not 10240 but " XVAL
15185+
END-IF.
15186+
MOVE 0 TO BVAL.
15187+
ADD 10240 TO BVAL.
15188+
IF BVAL = 0240
15189+
DISPLAY "BVAL is " BVAL
15190+
ELSE
15191+
DISPLAY "BVAL is not 0240 but " BVAL
15192+
END-IF.
15193+
STOP RUN.
15194+
])
15195+
15196+
AT_CHECK([$COMPILE prog.cob], [0], [], [])
15197+
15198+
AT_CHECK([./prog], [0], [ XVAL is 00512; Length is 2
15199+
VAL9 is 01024; Length is 3
15200+
XVAL is 10240; Length is 2
15201+
XVAL2 is 16706; Length is 2
15202+
XVALX is AB; Length is 2
15203+
XVALX is AC after +1;
15204+
XVALX is A after / 256 + 8192;
15205+
Numeric: 17477 is char DE
15206+
Numeric: 08261 is char E
15207+
XVAL is 10240
15208+
BVAL is 0240
1518015209
], [])
1518115210

1518215211
AT_CLEANUP
15212+

0 commit comments

Comments
 (0)