From 6e9cde8349055ffdb9db3c6769056a57c73da5e4 Mon Sep 17 00:00:00 2001 From: sf-mensch Date: Sun, 15 May 2022 15:24:25 +0000 Subject: [PATCH] full support of obsolete TRANSFORM statement per Realia COBOL cobc/parser.y (transform_body): add full features of INSPECT CONVERTING to TRANSFORM statement, adding optional CHARACTERS --- cobc/ChangeLog | 5 +++++ cobc/parser.y | 11 ++--------- tests/testsuite.src/run_misc.at | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/cobc/ChangeLog b/cobc/ChangeLog index 989452603..20a82e2fd 100644 --- a/cobc/ChangeLog +++ b/cobc/ChangeLog @@ -1,4 +1,9 @@ +2022-05-15 Simon Sobisch + + * parser.y (transform_body): add full features of INSPECT CONVERTING + to TRANSFORM statement, adding optional CHARACTERS + 2022-05-11 Simon Sobisch * typeck.c (cb_emit_inspect): emit reduced cob_inspect_init_converting diff --git a/cobc/parser.y b/cobc/parser.y index bb75b89c5..4dc1b6900 100644 --- a/cobc/parser.y +++ b/cobc/parser.y @@ -15648,9 +15648,9 @@ transform_statement: ; transform_body: - display_identifier FROM simple_display_value TO simple_display_all_value + display_identifier _characters FROM inspect_from TO inspect_to { - cb_tree x = cb_build_converting ($3, $5, cb_build_inspect_region_start ()); + cb_tree x = cb_build_converting ($4, $6, cb_build_inspect_region_start ()); cb_emit_inspect ($1, x, TRANSFORM_STATEMENT); } ; @@ -17718,13 +17718,6 @@ simple_display_value: } ; -simple_display_all_value: - simple_all_value - { - error_if_not_usage_display_or_nonnumeric_lit ($1); - } -; - inspect_from: display_identifier_or_alphabet_name | basic_literal diff --git a/tests/testsuite.src/run_misc.at b/tests/testsuite.src/run_misc.at index b5f987e79..a4e83b799 100644 --- a/tests/testsuite.src/run_misc.at +++ b/tests/testsuite.src/run_misc.at @@ -1603,6 +1603,39 @@ AT_CHECK([$COBCRUN_DIRECT ./prog], [0], [], []) AT_CLEANUP +AT_SETUP([TRANSFORM statement]) +AT_KEYWORDS([runmisc CONVERTING ALPHABET]) + +AT_DATA([prog.cob], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SPECIAL-NAMES. + ALPHABET MY-ASCII IS STANDARD-1. + ALPHABET MY-EBCDIC IS EBCDIC. + + DATA DIVISION. + WORKING-STORAGE SECTION. + 01 X PIC X(3) VALUE "BCA". + PROCEDURE DIVISION. + *> internally: "alias" to INSPECT CONVERTING + TRANSFORM X FROM "ABC" TO "BCD". + IF X NOT = "CDB" + DISPLAY "X: " X. + *> optional CHARACTERS and ALPHABETs (value test is separate) + TRANSFORM X CHARACTERS FROM MY-ASCII TO MY-EBCDIC. + *> + STOP RUN. +]) + +AT_CHECK([$COMPILE prog.cob], [0], [], []) +AT_CHECK([$COBCRUN_DIRECT ./prog], [0], [], []) + +AT_CLEANUP + + AT_SETUP([INSPECT CONVERTING alphabet]) AT_KEYWORDS([runmisc ASCII EBCDIC])