https://gcc.gnu.org/g:3f59a1cac717f8af84e884e9ec0f6ef14e102e6e

commit r16-2177-g3f59a1cac717f8af84e884e9ec0f6ef14e102e6e
Author: James K. Lowden <jklow...@cobolworx.com>
Date:   Wed Jul 9 18:14:40 2025 -0400

    cobol: Add PUSH and POP to CDF.
    
    Introduce cdf_directives_t class to centralize management of CDF
    state. Move existing CDF state variables and functions into the new
    class.
    
    gcc/cobol/ChangeLog:
    
            PR cobol/120765
            * cdf.y: Extend grammar for new CDF syntax, relocate dictionary.
            * cdfval.h (cdf_dictionary): Use new CDF dictionary.
            * dts.h: Remove useless assignment, note incorrect behavior.
            * except.cc: Remove obsolete EC state.
            * gcobol.1: Document CDF in its own section.
            * genapi.cc (parser_statement_begin): Use new EC state function.
            (parser_file_merge): Same.
            (parser_check_fatal_exception): Same.
            * genutil.cc (get_and_check_refstart_and_reflen): Same.
            (get_depending_on_value_from_odo): Same.
            (get_data_offset): Same.
            (process_this_exception): Same.
            * lexio.cc (check_push_pop_directive): New function.
            (check_source_format_directive): Restrict regex search to 1 line.
            (cdftext::free_form_reference_format): Use new function.
            * parse.y: Define new CDF tokens, use new CDF state.
            * parse_ante.h (cdf_tokens): Use new CDF state.
            (redefined_token): Same.
            (class prog_descr_t): Remove obsolete CDF state.
            (class program_stack_t): Same.
            (current_call_convention): Same.
            * scan.l: Recognize new CDF tokens.
            * scan_post.h (is_cdf_token): Same.
            * symbols.h (cdf_current_tokens): Change current_call_convention to 
return void.
            * token_names.h: Regenerate.
            * udf/stored-char-length.cbl: Use new PUSH/POP CDF functionality.
            * util.cc (class cdf_directives_t): Define cdf_directives_t.
            (current_call_convention): Same.
            (cdf_current_tokens): Same.
            (cdf_dictionary): Same.
            (cdf_enabled_exceptions): Same.
            (cdf_push): Same.
            (cdf_push_call_convention): Same.
            (cdf_push_current_tokens): Same.
            (cdf_push_dictionary): Same.
            (cdf_push_enabled_exceptions): Same.
            (cdf_push_source_format): Same.
            (cdf_pop): Same.
            (cdf_pop_call_convention): Same.
            (cdf_pop_current_tokens): Same.
            (cdf_pop_dictionary): Same.
            (cdf_pop_enabled_exceptions): Same.
            (cdf_pop_source_format): Same.
            * util.h (cdf_push): Declare cdf_directives_t.
            (cdf_push_call_convention): Same.
            (cdf_push_current_tokens): Same.
            (cdf_push_dictionary): Same.
            (cdf_push_enabled_exceptions): Same.
            (cdf_push_source_format): Same.
            (cdf_pop): Same.
            (cdf_pop_call_convention): Same.
            (cdf_pop_current_tokens): Same.
            (cdf_pop_dictionary): Same.
            (cdf_pop_source_format): Same.
            (cdf_pop_enabled_exceptions): Same.
    
    libgcobol/ChangeLog:
    
            * common-defs.h (cdf_enabled_exceptions): Use new CDF state.

Diff:
---
 gcc/cobol/cdf.y                      |   94 +-
 gcc/cobol/cdfval.h                   |    4 +
 gcc/cobol/dts.h                      |   14 +-
 gcc/cobol/except.cc                  |    2 -
 gcc/cobol/gcobol.1                   |  192 +--
 gcc/cobol/genapi.cc                  |    6 +-
 gcc/cobol/genutil.cc                 |    7 +
 gcc/cobol/lexio.cc                   |   72 +-
 gcc/cobol/parse.y                    |   21 +-
 gcc/cobol/parse_ante.h               |   48 +-
 gcc/cobol/scan.l                     |   13 +
 gcc/cobol/scan_post.h                |    2 +
 gcc/cobol/symbols.h                  |    3 +-
 gcc/cobol/token_names.h              | 2228 +++++++++++++++++-----------------
 gcc/cobol/udf/stored-char-length.cbl |    4 +
 gcc/cobol/util.cc                    |   90 +-
 gcc/cobol/util.h                     |   15 +
 libgcobol/common-defs.h              |    2 +-
 18 files changed, 1541 insertions(+), 1276 deletions(-)

diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y
index f1a791245854..840eb5033151 100644
--- a/gcc/cobol/cdf.y
+++ b/gcc/cobol/cdf.y
@@ -105,14 +105,14 @@ void input_file_status_notify();
 
   using std::map;
 
-  static map<std::string, cdfval_t> dictionary;
-
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-function"
   static bool
   cdfval_add( const char name[],
               const cdfval_t& value, bool override = false )
   {
+    cdf_values_t& dictionary( cdf_dictionary() );
+    
     if( scanner_parsing() ) {
       if( ! override ) {
        if( dictionary.find(name) != dictionary.end() ) return false;
@@ -123,6 +123,8 @@ void input_file_status_notify();
   }
   static void
   cdfval_off( const char name[] ) {
+    cdf_values_t& dictionary( cdf_dictionary() );
+    
     if( scanner_parsing() ) {
       auto p = dictionary.find(name);
       if( p == dictionary.end() ) {
@@ -159,6 +161,8 @@ exception_turn_t exception_turn;
                        
 bool
 apply_cdf_turn( const exception_turn_t& turn ) {
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
+  
   for( auto elem : turn.exception_files() ) {
     std::set<size_t> files(elem.second.begin(), elem.second.end());
     enabled_exceptions.turn_on_off(turn.enabled,
@@ -204,15 +208,17 @@ apply_cdf_turn( const exception_turn_t& turn ) {
 %type   <file>         filename
 %type   <files>         filenames
 
-%token BY 482
+%type   <number>        cdf_stackable
+
+%token BY 486
 %token COPY 362
 %token CDF_DISPLAY 384    ">>DISPLAY"
-%token IN 601
+%token IN 605
 %token NAME 286
 %token NUMSTR 305    "numeric literal"
-%token OF 682
-%token PSEUDOTEXT 717
-%token REPLACING 739
+%token OF 686
+%token PSEUDOTEXT 721
+%token REPLACING 743
 %token LITERAL 298
 %token SUPPRESS 376
 
@@ -227,25 +233,32 @@ apply_cdf_turn( const exception_turn_t& turn ) {
 %token CDF_WHEN 389    ">>WHEN"
 %token CDF_END_EVALUATE 390    ">>END-EVALUATE"
 
-%token AS 464  CONSTANT 361  DEFINED 363
+%token ALL 450
+%token CALL_CONVENTION 391    ">>CALL-CONVENTION"
+%token COBOL_WORDS 380    ">>COBOL-WORDS"
+%token CDF_PUSH 394    ">>PUSH"
+%token CDF_POP 395    ">>POP"
+%token SOURCE_FORMAT 396    ">>SOURCE FORMAT"
+
+%token AS 468  CONSTANT 361  DEFINED 363
 %type  <boolean>            DEFINED
-%token OTHER 694  PARAMETER_kw 368    "PARAMETER"
-%token OFF 683  OVERRIDE 369
-%token THRU 935
-%token TRUE_kw 809    "True"
+%token OTHER 698  PARAMETER_kw 368    "PARAMETER"
+%token OFF 687  OVERRIDE 369
+%token THRU 939
+%token TRUE_kw 813    "True"
 
-%token CALL_COBOL 391    "CALL"
-%token CALL_VERBATIM 392    "CALL (as C)"
+%token CALL_COBOL 392    "CALL"
+%token CALL_VERBATIM 393    "CALL (as C)"
 
-%token TURN 811  CHECKING 492  LOCATION 645  ON 685  WITH 837
+%token TURN 815  CHECKING 496  LOCATION 649  ON 689  WITH 841
 
-%left OR 936
-%left AND 937
-%right NOT 938
-%left '<'  '>'  '='  NE 939  LE 940  GE 941
+%left OR 940
+%left AND 941
+%right NOT 942
+%left '<'  '>'  '='  NE 943  LE 944  GE 945
 %left '-'  '+'
 %left '*'  '/'
-%right NEG 943
+%right NEG 947
 
 %define api.prefix {ydf}
 %define api.token.prefix{YDF_}
@@ -277,6 +290,8 @@ complete:   cdf_define
        |       cdf_display
        |       cdf_turn
         |       cdf_call_convention
+        |       cdf_push
+        |       cdf_pop
                ;
 
                /*
@@ -328,6 +343,7 @@ cdf_define: CDF_DEFINE cdf_constant NAME as cdf_expr[value] 
override
                  }
                  if( !cdfval_add( $NAME, cdfval_t($value), $override) ) {
                    error_msg(@NAME, "name already in dictionary: %s", $NAME);
+                    cdf_values_t& dictionary( cdf_dictionary() );
                    const cdfval_t& entry = dictionary[$NAME];
                    if( entry.filename ) {
                      error_msg(@NAME, "%s previously defined in %s:%d",
@@ -357,7 +373,7 @@ cdf_define: CDF_DEFINE cdf_constant NAME as cdf_expr[value] 
override
                 * available regardless.
                 */
                {
-                 if( 0 == dictionary.count($NAME) ) {
+                 if( 0 == cdf_dictionary().count($NAME) ) {
                    yywarn("CDF: '%s' is defined AS PARAMETER "
                            "but was not defined", $NAME);
                  }
@@ -400,6 +416,35 @@ cdf_call_convention:
                 }
                 ;
 
+cdf_push:       CDF_PUSH cdf_stackable {
+                 switch( $cdf_stackable ) {
+                  case YDF_ALL:                cdf_push(); break;
+                  case YDF_CALL_CONVENTION: cdf_push_call_convention(); break;
+                  case YDF_CDF_DEFINE:         cdf_push_dictionary(); break;
+                  case YDF_COBOL_WORDS:        cdf_push_current_tokens(); 
break;
+                  case YDF_SOURCE_FORMAT:      cdf_push_source_format(); break;
+                  default: gcc_unreachable(); 
+                  }
+                }
+                ;
+cdf_pop:        CDF_POP cdf_stackable {
+                 switch( $cdf_stackable ) {
+                  case YDF_ALL:                cdf_pop(); break;
+                  case YDF_CALL_CONVENTION: cdf_pop_call_convention(); break;
+                  case YDF_CDF_DEFINE:         cdf_pop_dictionary(); break;
+                  case YDF_COBOL_WORDS:        cdf_pop_current_tokens(); break;
+                  case YDF_SOURCE_FORMAT:      cdf_pop_source_format(); break; 
+                  default: gcc_unreachable(); 
+                  }
+                }
+                ;
+
+cdf_stackable:  ALL            { $$ = YDF_ALL; }
+        |       CALL_CONVENTION        { $$ = YDF_CALL_CONVENTION; }
+        |       COBOL_WORDS    { $$ = YDF_COBOL_WORDS; }
+        |       CDF_DEFINE     { $$ = YDF_CDF_DEFINE; }
+        |       SOURCE_FORMAT  { $$ = YDF_SOURCE_FORMAT; }
+                ;
 
 except_names:  except_name
        |       except_names except_name
@@ -471,6 +516,7 @@ cdf_eval_obj:       cdf_cond_expr
 cdf_cond_expr: BOOL
        |       NAME DEFINED
                {
+                  cdf_values_t& dictionary( cdf_dictionary() );
                  auto p = dictionary.find($1);
                  bool found = p != dictionary.end();
                  if( !$DEFINED ) found = ! found;
@@ -552,6 +598,7 @@ cdf_expr:   cdf_expr '+' cdf_expr { $$ = $1(@1) + $3(@3); }
         ;
 
 cdf_factor:     NAME {
+                  cdf_values_t& dictionary( cdf_dictionary() );
                  auto that = dictionary.find($1);
                  if( that != dictionary.end() ) {
                    $$ = that->second;
@@ -651,6 +698,7 @@ name_any:   namelit
 
 name_one:      NAME
                {
+                  cdf_values_t& dictionary( cdf_dictionary() );
                  cdf_arg_t arg = { YDF_NAME, $1 };
                  auto p = dictionary.find($1);
 
@@ -665,6 +713,7 @@ name_one:   NAME
 
 namelit:       name
                {
+                  cdf_values_t& dictionary( cdf_dictionary() );
                  cdf_arg_t arg = { YDF_NAME, $1 };
                  auto p = dictionary.find($1);
 
@@ -745,6 +794,7 @@ location_set( const YYLTYPE& loc ) {
 bool // used by cobol1.cc
 defined_cmd( const char arg[] )
 {
+  cdf_values_t& dictionary( cdf_dictionary() );
   cdfval_t value(1);
 
   char *name = xstrdup(arg);
@@ -868,6 +918,7 @@ static int ydflex(void) {
 
 bool
 cdf_value( const char name[], const cdfval_t& value ) {
+  cdf_values_t& dictionary( cdf_dictionary() );
   auto p = dictionary.find(name);
 
   if( p != dictionary.end() ) return false;
@@ -878,6 +929,7 @@ cdf_value( const char name[], const cdfval_t& value ) {
 
 const cdfval_t *
 cdf_value( const char name[] ) {
+  cdf_values_t& dictionary( cdf_dictionary() );
   auto p = dictionary.find(name);
 
   if( p == dictionary.end() ) return NULL;
diff --git a/gcc/cobol/cdfval.h b/gcc/cobol/cdfval.h
index 465bdbb4d1a9..cc474a22a482 100644
--- a/gcc/cobol/cdfval.h
+++ b/gcc/cobol/cdfval.h
@@ -126,4 +126,8 @@ cdf_value( const char name[] );
 bool
 cdf_value( const char name[], const cdfval_t& value );
 
+typedef std::map<std::string, cdfval_t> cdf_values_t;
+
+cdf_values_t& cdf_dictionary();
+
 #endif
diff --git a/gcc/cobol/dts.h b/gcc/cobol/dts.h
index aa3fa5850969..e12b979e6a18 100644
--- a/gcc/cobol/dts.h
+++ b/gcc/cobol/dts.h
@@ -86,18 +86,24 @@ namespace dts {
 #if __cpp_exceptions
       static const char msg[] = "input not NUL-terminated";
       throw std::domain_error( msg );
-#else
-      // eoinput terminates input
-      eoinput = strchr(input, '\0'); // cppcheck-suppress 
uselessAssignmentPtrArg
 #endif
     }
     auto ncm = re.size();
     cm.resize(ncm);
     std::vector <regmatch_t> cms(ncm);
 
-
     int erc = regexec( &re, input, ncm, cms.data(), 0 );
     if( erc != 0 ) return false;
+#if  __cpp_exceptions
+    // This is not correct at all, but current use depends on current behavior.
+    // The following line is excluded from the GCC build, which is compiled
+    // without __cpp_exceptions.  parse_copy_directive (for one) depends on
+    // regex_search returning true even if the match is beyond eoinput.
+    if( eoinput < cm[0].second ) return false;
+    // Correct behavior would return match only between input and eoinput.
+    // Because regex(3) uses a NUL terminator, it may match text between
+    // eoinput and the NUL.
+#endif
     std::transform( cms.begin(), cms.end(), cm.begin(),
                     [input]( const regmatch_t& m ) {
                       return csub_match( input, m );
diff --git a/gcc/cobol/except.cc b/gcc/cobol/except.cc
index 60b841664f5c..e42aea2924b1 100644
--- a/gcc/cobol/except.cc
+++ b/gcc/cobol/except.cc
@@ -84,8 +84,6 @@ cbl_enabled_exception_t::dump( int i ) const {
               file );
 }
 
-cbl_enabled_exceptions_t enabled_exceptions;
-
 void
 cbl_enabled_exceptions_t::dump() const {
   extern int yydebug;
diff --git a/gcc/cobol/gcobol.1 b/gcc/cobol/gcobol.1
index 6db54009fcf7..ebb833c793bd 100644
--- a/gcc/cobol/gcobol.1
+++ b/gcc/cobol/gcobol.1
@@ -587,6 +587,21 @@ statement, regardless of compile-time constants.
 ..
 .
 .Ss Implemented Exception Conditions
+By default, per ISO, no EC is enabled.  Implemented ECs may be enabled
+on the command line or via the
+.Sy TURN
+directive. Any attempt to enable an EC that is not implemented is
+treated as an error.
+.Pp
+An enabled EC not handled by a
+.Sy DECLARATIVE
+is written to the system log and to standard error.  (The authors
+intend to make that an option.)  A fatal EC not handled with
+.Sy RESUME
+ends with a call to
+.Xr abort 3
+and process termination. 
+.Pp
 Not all Exception Conditions are implemented.  Any attempt to enable
 an EC that that is not implemented produces a warning message.
 The following are implemented:
@@ -913,11 +928,90 @@ or
 has no effect; the two are interchangeable.
 ..
 .
-.Ss Compiler-Directing Facility (CDF)
+.Sh COMPILER-DIRECTING FACILITY
 The CDF should be used with caution because no comprehensive test
-suite has been identified.
+suite has been identified.  
 .
-.Ss Conditional Compilation
+.Ss CDF Text Manipulation
+.Bl -tag -width >>DEFINE
+.It Sy COPY Ar copybook Li Oo OF|BY Ar library Oc Oo Sy REPLACING ... Oc
+If
+.Ar copybook
+is a literal, it treated a literal filename, which either does or does not 
exist.  If
+.Ar copybook
+is a \*[lang] word,
+.Nm
+looks first for an environment variable named
+.Va copybook
+and, if found, uses the contents of that variable as the name of the
+copybook file.  If that file does not exist, it continues looking for
+a file named one of:
+.sp
+.Bl -bullet -compact -offset 5n
+.It
+.Pa copybook
+(literally)
+.It
+.Pa copybook.cpy
+.It
+.Pa copybook.CPY
+.It
+.Pa copybook.cbl
+.It
+.Pa copybook.CBL
+.It
+.Pa copybook.cob
+.It
+.Pa copybook.COB
+.El
+.sp
+in that order.  It looks first in the same directory as the source
+code file, and then in any
+.Ar copybook-path
+named with the
+.Fl I
+option.
+.
+.\" FIXME: need escape mechanism for directories with ':' in the name.
+.Ar copybook-path
+may (like the shell's
+.Ev PATH
+variable) be a colon-separated list.
+The
+.Fl I
+option may occur multiple times on the command line.  Each successive
+.Ar copybook-path
+is concatenated to previous ones.
+Relative paths (having no leading
+.Ql / Ns
+\&)
+are searched relative to the compiler's current working directory.
+.Pp
+For example,
+.D1 \&
+.D1 Fl I Li /usr/local/include:include
+.D1 \&
+searches first the directory where the \*[lang] program is found, next in
+.Pa /usr/local/include ,
+and finally in an
+.Pa include
+subdirectory of the directory from which
+.Nm
+was invoked.
+.Pp
+For the
+.Sy REPLACING
+phrase, both the modern pseudo-text and the \*[lang]/85 forms are
+recognized. (The older forms are used in the NIST CCVS/85 test suite.) 
+.It Sy REPLACE ...
+.Nm
+supports the full ISO
+.Sy REPLACE
+syntax.  
+.El
+.
+.Ss CDF Directives
+.\"Bl -tag -width >>PROPAGATE
 .Bl -tag -width >>DEFINE
 .It >> Ns Sy DEFINE Ar name Sy AS Bro Ar expression Li | Sy PARAMETER Brc Op 
Sy OVERRIDE
 Define
@@ -959,10 +1053,6 @@ is supported. Boolean literals are not supported.
 .
 .It >> Ns Sy EVALUATE
 Not implemented.
-.El
-.
-.Ss Other CDF Directives
-.Bl -tag -width >>PROPAGATE
 .It >> Ns Sy CALL-CONVENTION Ar convention
 .Ar convention
 may be one of:
@@ -1036,6 +1126,24 @@ Not implemented.
 Not implemented.
 .It >> Ns Sy PROPAGATE
 Not implemented.
+.It >> Ns Sy PUSH Ar directive
+.It >> Ns Sy POP  Ar directive
+With
+.Sy PUSH ,
+push CDF state onto a stack.
+With
+.Sy POP ,
+return to the prior pushed state.
+.Ar directive
+may be one of
+.Bl -tag -compact
+.It Sy CALL-CONVENTION
+.It Sy COBOL-WORDS
+.It Sy DEFINE
+.It Sy SOURCE FORMAT
+.It Sy TURN
+.El
+.
 .It >> Ns Sy TURN Oo
 .Ar ec Oo Ar file Li ... Oc ...
 .Oc Sy CHECKING Bro Oo Sy ON Oc Oo Oo Sy WITH Oc Sy LOCATION Oc | Sy OFF Brc
@@ -1087,76 +1195,6 @@ the directive must appear before
 To test a feature-set variable, use
 .Dl >>IF Ar feature Li DEFINED
 .
-.Ss Copybooks
-.Nm
-supports the CDF
-.Sy COPY
-statement, with or without its
-.Sy REPLACING
-component.  For any statement
-.sp
-.D1 COPY Ar copybook
-.sp
-.Nm
-looks first for an environment variable named
-.Va copybook
-and, if found, uses the contents of that variable as the name of the
-copybook file.  If that file does not exist, it continues looking for
-a file named one of:
-.sp
-.Bl -bullet -compact -offset 5n
-.It
-.Pa copybook
-(literally)
-.It
-.Pa copybook.cpy
-.It
-.Pa copybook.CPY
-.It
-.Pa copybook.cbl
-.It
-.Pa copybook.CBL
-.It
-.Pa copybook.cob
-.It
-.Pa copybook.COB
-.El
-.sp
-in that order.  It looks first in the same directory as the source
-code file, and then in any
-.Ar copybook-path
-named with the
-.Fl I
-option.
-.
-.\" FIXME: need escape mechanism for directories with ':' in the name.
-.Ar copybook-path
-may (like the shell's
-.Ev PATH
-variable) be a colon-separated list.
-.
-The
-.Fl I
-option may occur multiple times on the command line.  Each successive
-.Ar copybook-path
-is concatenated to previous ones.
-Relative paths (having no leading
-.Ql / Ns
-\&)
-are searched relative to the compiler's current working directory.
-.Pp
-For example,
-.D1 \&
-.D1 Fl I Li /usr/local/include:include
-.D1 \&
-searches first the directory where the \*[lang] program is found, next in
-.Pa /usr/local/include ,
-and finally in an
-.Pa include
-subdirectory of the directory from which
-.Nm
-was invoked.
-.
 .Ss Intrinsic functions
 .Nm
 implements all intrinsic functions defined by \*[isostd], plus a few
diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 55db870c7de8..3c4e9a9ebbbf 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -1166,7 +1166,7 @@ parser_statement_begin( const cbl_name_t statement_name,
   //  the execution time of a program doing two-billion simple adds in an inner
   //  loop dropped from 3.8 seconds to 0.175 seconds.
 
-  bool exception_processing = enabled_exceptions.size() ;
+  bool exception_processing = cdf_enabled_exceptions().size() ;
 
   if( !exception_processing )
     {
@@ -12236,6 +12236,8 @@ parser_file_merge(  cbl_file_t *workfile,
   ELSE
     ENDIF
 
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
+  
   for(size_t i=0; i<ninputs; i++)
     {
     if( process_this_exception(ec_sort_merge_file_open_e) )
@@ -13905,7 +13907,7 @@ parser_check_fatal_exception()
   // in its innermost loop had an execution time of 19.5 seconds.  By putting 
in
   // the if() statement, that was reduced to 3.8 seconds.
 
-  if( enabled_exceptions.size() || sv_is_i_o )
+  if( cdf_enabled_exceptions().size() || sv_is_i_o )
     {
     gg_call(VOID,
             "__gg__check_fatal_exception",
diff --git a/gcc/cobol/genutil.cc b/gcc/cobol/genutil.cc
index 1d921a3e2fb6..e09b1bfb8e03 100644
--- a/gcc/cobol/genutil.cc
+++ b/gcc/cobol/genutil.cc
@@ -307,6 +307,8 @@ get_and_check_refstart_and_reflen(  tree         
refstart,// LONG returned value
                                     tree         reflen,  // LONG returned 
value
                                     cbl_refer_t &refer)
   {
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
+
   if( !enabled_exceptions.match(ec_bound_ref_mod_e) )
     {
     // This is normal operation -- no exception checking.  Thus, we won't
@@ -458,6 +460,7 @@ get_depending_on_value_from_odo(tree retval, cbl_field_t 
*odo)
       declarative with a RESUME NEXT STATEMENT, or before the default_condition
       processing can do a controlled exit.
       */
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
   cbl_field_t *depending_on;
   depending_on = cbl_field_of(symbol_at(odo->occurs.depending_on));
 
@@ -601,6 +604,7 @@ get_data_offset(cbl_refer_t &refer,
         }
       else
         {
+          cbl_enabled_exceptions_t& enabled_exceptions( 
cdf_enabled_exceptions() );
         if( !enabled_exceptions.match(ec_bound_subscript_e) )
           {
           // With no exception testing, just pick up the value
@@ -657,6 +661,8 @@ get_data_offset(cbl_refer_t &refer,
       // Although we strictly don't need to look at the ODO value at this 
point,
       // we do want it checked for the purposes of ec-bound-odo
 
+      cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
+
       if( enabled_exceptions.match(ec_bound_odo_e) )
         {
         if( parent->occurs.depending_on )
@@ -1669,6 +1675,7 @@ set_exception_code_func(ec_type_t ec, int /*line*/, int 
from_raise_statement)
 bool
 process_this_exception(ec_type_t ec)
   {
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
   bool retval;
   if( enabled_exceptions.match(ec) || !skip_exception_processing )
     {
diff --git a/gcc/cobol/lexio.cc b/gcc/cobol/lexio.cc
index 4a50441f24a2..0aebe52ada63 100644
--- a/gcc/cobol/lexio.cc
+++ b/gcc/cobol/lexio.cc
@@ -320,8 +320,70 @@ recognize_replacements( filespan_t mfile, 
std::list<replace_t>& pending_replacem
   }
 }
 
+static void
+check_push_pop_directive( filespan_t& mfile ) {
+  char eol = '\0';
+  const char *p = std::find(mfile.cur, mfile.eol, '>');
+  if( ! (p < mfile.eol && p[1] == *p ) ) return;
+
+  const char pattern[] =
+    ">>[[:blank:]]*(push|pop)[[:blank:]]+"
+    "("
+      "all|"
+      "call-convention|"
+      "cobol-words|"
+      "define|"
+      "source[[:blank:]]+format|"
+      "turn"
+    ")";
+  static regex re(pattern, extended_icase);
+
+  // show contents of marked subexpressions within each match
+  cmatch cm;
+
+  std::swap(*mfile.eol, eol); // see implementation for excuses
+  bool ok = regex_search(p, const_cast<const char *>(mfile.eol), cm, re);
+  std::swap(*mfile.eol, eol);
+  
+  if( ok ) {
+    gcc_assert(cm.size() > 1);
+    bool push = TOUPPER(cm[1].first[1]) == 'U';
+    switch( TOUPPER(cm[2].first[0]) ) {
+    case 'A': // ALL
+      push? cdf_push() : cdf_pop();
+      break;
+    case 'C':
+      switch( TOUPPER(cm[2].first[1]) ) {
+      case 'A': // CALL-CONVENTION
+        push? cdf_push_call_convention() : cdf_pop_call_convention();
+        break;
+      case 'O': // COBOL-WORDS
+        push? cdf_push_current_tokens() : cdf_pop_current_tokens();
+        break;
+      default:
+        gcc_unreachable();
+      }
+      break;
+    case 'D': // DEFINE
+      push? cdf_push_dictionary() : cdf_pop_dictionary();
+      break;
+    case 'S': // SOURCE FORMAT
+      push? cdf_push_source_format() : cdf_pop_source_format();
+      break;
+    case 'T': // TURN
+      push? cdf_push_enabled_exceptions() : cdf_pop_enabled_exceptions();
+      break;
+    default:
+      gcc_unreachable();
+    }
+    erase_line(const_cast<char*>(cm[0].first),
+               const_cast<char*>(cm[0].second));
+  }
+}
+
 static void
 check_source_format_directive( filespan_t& mfile ) {
+  char eol = '\0';
   const char *p = std::find(mfile.cur, mfile.eol, '>');
   if( ! (p < mfile.eol && p[1] == *p ) ) return;
 
@@ -334,7 +396,12 @@ check_source_format_directive( filespan_t& mfile ) {
 
   // show contents of marked subexpressions within each match
   cmatch cm;
-  if( regex_search(p, const_cast<const char *>(mfile.eol), cm, re) ) {
+
+  std::swap(*mfile.eol, eol); // see implementation for excuses
+  bool ok = regex_search(p, const_cast<const char *>(mfile.eol), cm, re);
+  std::swap(*mfile.eol, eol);
+  
+  if( ok ) {
     gcc_assert(cm.size() > 1);
     switch( cm[3].length() ) {
     case 4:
@@ -353,8 +420,8 @@ check_source_format_directive( filespan_t& mfile ) {
             cdf_source_format().description(), 
             (fmt_size_t)mfile.lineno() );
     char *bol = cdf_source_format().is_fixed()? mfile.cur : 
const_cast<char*>(cm[0].first);
+    gcc_assert(cm[0].second <= mfile.eol);
     erase_line(bol, const_cast<char*>(cm[0].second));
-    mfile.cur = const_cast<char*>(cm[0].second);
   }
 }
 
@@ -1688,6 +1755,7 @@ cdftext::free_form_reference_format( int input ) {
   }
 
   while( mfile.next_line() ) {
+    check_push_pop_directive(mfile);
     check_source_format_directive(mfile);
     remove_inline_comment(mfile.cur, mfile.eol);
 
diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 2212acc8e2b7..83bffdfccc5c 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -386,7 +386,10 @@
                        CDF_EVALUATE ">>EVALUATE"
                        CDF_WHEN ">>WHEN"
                        CDF_END_EVALUATE ">>END-EVALUATE"
+                        CALL_CONVENTION ">>CALL-CONVENTION"
                        CALL_COBOL "CALL" CALL_VERBATIM "CALL (as C)"
+                        CDF_PUSH ">>PUSH" CDF_POP ">>POP"
+                        SOURCE_FORMAT ">>SOURCE FORMAT"
 
                        IF THEN ELSE
                        SENTENCE
@@ -1469,16 +1472,16 @@ cobol_words:    cobol_words1
        |       cobol_words cobol_words1
                ;
 cobol_words1:  COBOL_WORDS EQUATE NAME[keyword] WITH NAME[name] {
-                 if( ! tokens.equate(@keyword, $keyword, $name) ) { YYERROR; }
+                 if( ! cdf_tokens.equate(@keyword, $keyword, $name) ) { 
YYERROR; }
                }
        |       COBOL_WORDS UNDEFINE NAME[keyword] {
-                 if( ! tokens.undefine(@keyword, $keyword) ) { YYERROR; }
+                 if( ! cdf_tokens.undefine(@keyword, $keyword) ) { YYERROR; }
                }
        |       COBOL_WORDS SUBSTITUTE NAME[keyword] BY NAME[name] {
-                 if( ! tokens.substitute(@keyword, $keyword, $name) ) { 
YYERROR; }
+                 if( ! cdf_tokens.substitute(@keyword, $keyword, $name) ) { 
YYERROR; }
                }
        |       COBOL_WORDS RESERVE NAME[name] {
-                 if( ! tokens.reserve(@name, $name) ) { YYERROR; }
+                 if( ! cdf_tokens.reserve(@name, $name) ) { YYERROR; }
                }
                ;
 
@@ -4915,6 +4918,7 @@ by_value_arg:   scalar
 declaratives:   %empty
         |       DECLARATIVES '.'
                 <label>{
+                 cbl_enabled_exceptions_t& enabled_exceptions( 
cdf_enabled_exceptions() );
                   current.enabled_exception_cache = enabled_exceptions;
                   enabled_exceptions.clear();
                   current.doing_declaratives(true);
@@ -4933,6 +4937,7 @@ declaratives:   %empty
                    * forward reference, because we haven't yet begun to parse
                    * nondeclarative procedures.
                    */
+                 cbl_enabled_exceptions_t& enabled_exceptions( 
cdf_enabled_exceptions() );
                   parser_label_label($label);
                   enabled_exceptions = current.enabled_exception_cache;
                   current.enabled_exception_cache.clear();
@@ -11433,6 +11438,7 @@ void ast_call( const YYLTYPE& loc, cbl_refer_t name, 
const cbl_refer_t& returnin
  */
 static bool
 possible_ec() {
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
   bool format_1 = current.declaratives.has_format_1();
       
   bool enabled = 0xFF < (current.declaratives.status()
@@ -11455,6 +11461,7 @@ possible_ec() {
  */
 static void
 statement_epilog( int token ) {
+  cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
   if( possible_ec() && token != CONTINUE ) { 
     if( enabled_exceptions.size() ) {
       current.declaratives_evaluate();
@@ -11517,7 +11524,7 @@ keyword_str( int token ) {
     return ascii;
   }
 
-  return tokens.name_of(token);
+  return cdf_tokens.name_of(token);
 }
 
 bool iso_cobol_word( const std::string& name, bool include_context );
@@ -11589,7 +11596,7 @@ current_tokens_t::tokenset_t::find( const cbl_name_t 
name, bool include_intrinsi
 
 int
 keyword_tok( const char * text, bool include_intrinsics ) {
-  return tokens.find(text, include_intrinsics);
+  return cdf_tokens.find(text, include_intrinsics);
 }
 
 static inline size_t
@@ -13131,7 +13138,7 @@ cobol_dialect_set( cbl_dialect_t dialect ) {
     break;
   case dialect_gnu_e:
     if( 0 == (cbl_dialects & dialect) ) { // first time
-      tokens.equate(YYLTYPE(), "BINARY-DOUBLE", "BINARY-C-LONG");
+      cdf_tokens.equate(YYLTYPE(), "BINARY-DOUBLE", "BINARY-C-LONG");
     }
     break;
   }    
diff --git a/gcc/cobol/parse_ante.h b/gcc/cobol/parse_ante.h
index 3543a0051372..fa06e6ca9036 100644
--- a/gcc/cobol/parse_ante.h
+++ b/gcc/cobol/parse_ante.h
@@ -935,11 +935,11 @@ teed_up_names() {
   return name_queue_t::namelist_of( name_queue.peek() );
 }
 
-current_tokens_t tokens;
+#define cdf_tokens cdf_current_tokens()
 
 int
 redefined_token( const cbl_name_t name ) {
-  return tokens.redefined_as(name);
+  return cdf_tokens.redefined_as(name);
 }
 
 struct file_list_t {
@@ -1321,7 +1321,6 @@ class prog_descr_t {
       }
     }
   } locale;
-  cbl_call_convention_t call_convention;
   cbl_options_t options;
 
   explicit prog_descr_t( size_t isymbol )
@@ -1330,9 +1329,7 @@ class prog_descr_t {
     , paragraph(NULL)
     , section(NULL)
     , collating_sequence(NULL)
-  {
-    call_convention = current_call_convention();
-  }
+  {}
 
  std::set<std::string> external_targets() {
    std::set<std::string> externals;
@@ -1421,24 +1418,13 @@ static cbl_label_t *  implicit_section();
 
 class program_stack_t : protected  std::stack<prog_descr_t> {
   struct pending_t {
-    cbl_call_convention_t call_convention;
     bool initial;
-    pending_t()
-      : call_convention(cbl_call_convention_t(0))
-      , initial(false)
-    {}
+    pending_t() : initial(false) {}
   } pending;
  public:
-  cbl_call_convention_t
-  pending_call_convention( cbl_call_convention_t convention ) {
-    return pending.call_convention = convention;
-  }
   bool pending_initial() { return pending.initial = true; }
 
   void push( prog_descr_t descr ) {
-    cbl_call_convention_t call_convention = cbl_call_cobol_e;
-    if( !empty() ) call_convention = top().call_convention;
-    descr.call_convention = call_convention;
     std::stack<prog_descr_t>& me(*this);
     me.push(descr);
   }
@@ -1464,9 +1450,6 @@ class program_stack_t : protected  
std::stack<prog_descr_t> {
   }
 
   void apply_pending() {
-    if( size() == 1 && 0 != pending.call_convention ) {
-      top().call_convention = pending.call_convention;
-  }
     if( pending.initial ) {
       auto e = symbol_at(top().program_index);
       auto prog(cbl_label_of(e));
@@ -1873,19 +1856,6 @@ static class current_t {
     return programs.top().options.default_round = mode;
   }
 
-  cbl_call_convention_t
-  call_convention() {
-    return programs.empty()? cbl_call_cobol_e : programs.top().call_convention;
-  }
-  cbl_call_convention_t
-  call_convention( cbl_call_convention_t convention) {
-    if( programs.empty() ) {
-      return programs.pending_call_convention(convention);
-    }
-    auto& prog( programs.top() );
-    return prog.call_convention = convention;
-  }
-
   const char *
   locale() {
     return programs.empty()? NULL : programs.top().locale.os_name;
@@ -1983,6 +1953,7 @@ static class current_t {
    * ISO, in new_program.
    */
   std::set<std::string>  end_program() {
+    cbl_enabled_exceptions_t& enabled_exceptions( cdf_enabled_exceptions() );
     if( enabled_exceptions.size() ) {
       declaratives_evaluate();
     }
@@ -2273,15 +2244,6 @@ current_rounded_mode( cbl_round_t rounded) {
 #endif
 static cbl_round_t current_rounded_mode( int token );
 
-cbl_call_convention_t
-current_call_convention() {
-  return current.call_convention();
-}
-cbl_call_convention_t
-current_call_convention( cbl_call_convention_t convention) {
-  return current.call_convention(convention);
-}
-
 size_t program_level() { return current.program_level(); }
 
 static size_t constant_index( int token );
diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l
index 3c12edaceb1c..8b5dc25ba844 100644
--- a/gcc/cobol/scan.l
+++ b/gcc/cobol/scan.l
@@ -2095,15 +2095,28 @@ BASIS           { yy_push_state(basis); return BASIS; }
   ^[ ]*>>{OBLANK}TURN  { yy_push_state(exception); return TURN; }
   ^[ ]*>>{OBLANK}COBOL-WORDS   { yy_push_state(cobol_words); return 
COBOL_WORDS; }
 
+  ^[ ]*>>{OBLANK}SOURCE{BLANK}FORMAT   { return SOURCE_FORMAT; }
+
+  ^[ ]*>>{OBLANK}PUSH          { return CDF_PUSH; }
+  ^[ ]*>>{OBLANK}POP           { return CDF_POP; }
+
   ^[ ]*>>{OBLANK}{NAME}        {
                          error_msg(yylloc, "unknown CDF token: %s", yytext);
                        }
 
+
   OTHER                { return OTHER; }
   OVERRIDE     { return OVERRIDE; }
   PARAMETER    { return PARAMETER_kw; }
   THRU         { return THRU; }
   TRUE         { return TRUE_kw; }
+
+  ALL                  { return ALL; }
+  CALL-CONVENTION      { return CALL_CONVENTION; }
+  COBOL-WORDS          { return COBOL_WORDS; }
+  DEFINE               { return CDF_DEFINE; }
+  SOURCE{BLANK}FORMAT  { return SOURCE_FORMAT; }
+
 }
 
 <cobol_words>{
diff --git a/gcc/cobol/scan_post.h b/gcc/cobol/scan_post.h
index fd70ea96d73b..7cf2b98cd372 100644
--- a/gcc/cobol/scan_post.h
+++ b/gcc/cobol/scan_post.h
@@ -158,6 +158,8 @@ is_cdf_token( int token ) {
   case CDF_DISPLAY:
   case CDF_IF:       case CDF_ELSE: case CDF_END_IF:
   case CDF_EVALUATE: case CDF_WHEN: case CDF_END_EVALUATE:
+  case CDF_PUSH:
+  case CDF_POP:
     return true;
   case CALL_COBOL:
   case CALL_VERBATIM:
diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h
index f96f1ec15fcc..c3de0aae9aea 100644
--- a/gcc/cobol/symbols.h
+++ b/gcc/cobol/symbols.h
@@ -2551,8 +2551,9 @@ class current_tokens_t {
 };
 
 cbl_call_convention_t current_call_convention();
+current_tokens_t& cdf_current_tokens();
 
-cbl_call_convention_t
+void
 current_call_convention( cbl_call_convention_t convention);
 
 class procref_base_t {
diff --git a/gcc/cobol/token_names.h b/gcc/cobol/token_names.h
index d35b7060dd96..ca51510fcb79 100644
--- a/gcc/cobol/token_names.h
+++ b/gcc/cobol/token_names.h
@@ -1,5 +1,5 @@
 // generated by ./token_names.h.gen ../../build/gcc/cobol/parse.h
-// Fri Jul  4 12:35:01 EDT 2025
+// Tue Jul  8 19:21:28 EDT 2025
 tokens = {
        { "identification", IDENTIFICATION_DIV }, // 258
        { "environment", ENVIRONMENT_DIV }, // 259
@@ -137,562 +137,566 @@ tokens = {
        { "cdf-evaluate", CDF_EVALUATE }, // 388
        { "cdf-when", CDF_WHEN }, // 389
        { "cdf-end-evaluate", CDF_END_EVALUATE }, // 390
-       { "call-cobol", CALL_COBOL }, // 391
-       { "call-verbatim", CALL_VERBATIM }, // 392
-       { "if", IF }, // 393
-       { "then", THEN }, // 394
-       { "else", ELSE }, // 395
-       { "sentence", SENTENCE }, // 396
-       { "accept", ACCEPT }, // 397
-       { "add", ADD }, // 398
-       { "alter", ALTER }, // 399
-       { "call", CALL }, // 400
-       { "cancel", CANCEL }, // 401
-       { "close", CLOSE }, // 402
-       { "compute", COMPUTE }, // 403
-       { "continue", CONTINUE }, // 404
-       { "delete", DELETE }, // 405
-       { "display", DISPLAY }, // 406
-       { "divide", DIVIDE }, // 407
-       { "evaluate", EVALUATE }, // 408
-       { "exit", EXIT }, // 409
-       { "filler", FILLER_kw }, // 410
-       { "goback", GOBACK }, // 411
-       { "goto", GOTO }, // 412
-       { "initialize", INITIALIZE }, // 413
-       { "inspect", INSPECT }, // 414
-       { "merge", MERGE }, // 415
-       { "move", MOVE }, // 416
-       { "multiply", MULTIPLY }, // 417
-       { "open", OPEN }, // 418
-       { "paragraph", PARAGRAPH }, // 419
-       { "read", READ }, // 420
-       { "release", RELEASE }, // 421
-       { "return", RETURN }, // 422
-       { "rewrite", REWRITE }, // 423
-       { "search", SEARCH }, // 424
-       { "set", SET }, // 425
-       { "select", SELECT }, // 426
-       { "sort", SORT }, // 427
-       { "sort-merge", SORT_MERGE }, // 428
-       { "string", STRING_kw }, // 429
-       { "stop", STOP }, // 430
-       { "subtract", SUBTRACT }, // 431
-       { "start", START }, // 432
-       { "unstring", UNSTRING }, // 433
-       { "write", WRITE }, // 434
-       { "when", WHEN }, // 435
-       { "argument-number", ARGUMENT_NUMBER }, // 436
-       { "argument-value", ARGUMENT_VALUE }, // 437
-       { "environment-name", ENVIRONMENT_NAME }, // 438
-       { "environment-value", ENVIRONMENT_VALUE }, // 439
-       { "abs", ABS }, // 440
-       { "access", ACCESS }, // 441
-       { "acos", ACOS }, // 442
-       { "actual", ACTUAL }, // 443
-       { "advancing", ADVANCING }, // 444
-       { "after", AFTER }, // 445
-       { "all", ALL }, // 446
-       { "allocate", ALLOCATE }, // 447
-       { "alphabet", ALPHABET }, // 448
-       { "alphabetic", ALPHABETIC }, // 449
-       { "alphabetic-lower", ALPHABETIC_LOWER }, // 450
-       { "alphabetic-upper", ALPHABETIC_UPPER }, // 451
-       { "alphanumeric", ALPHANUMERIC }, // 452
-       { "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 453
-       { "also", ALSO }, // 454
-       { "alternate", ALTERNATE }, // 455
-       { "annuity", ANNUITY }, // 456
-       { "anum", ANUM }, // 457
-       { "any", ANY }, // 458
-       { "anycase", ANYCASE }, // 459
-       { "apply", APPLY }, // 460
-       { "are", ARE }, // 461
-       { "area", AREA }, // 462
-       { "areas", AREAS }, // 463
-       { "as", AS }, // 464
-       { "ascending", ASCENDING }, // 465
-       { "activating", ACTIVATING }, // 466
-       { "asin", ASIN }, // 467
-       { "assign", ASSIGN }, // 468
-       { "at", AT }, // 469
-       { "atan", ATAN }, // 470
-       { "based", BASED }, // 471
-       { "baseconvert", BASECONVERT }, // 472
-       { "before", BEFORE }, // 473
-       { "binary", BINARY }, // 474
-       { "bit", BIT }, // 475
-       { "bit-of", BIT_OF }, // 476
-       { "bit-to-char", BIT_TO_CHAR }, // 477
-       { "blank", BLANK }, // 478
-       { "block", BLOCK_kw }, // 479
-       { "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 480
-       { "bottom", BOTTOM }, // 481
-       { "by", BY }, // 482
-       { "byte", BYTE }, // 483
-       { "byte-length", BYTE_LENGTH }, // 484
-       { "cf", CF }, // 485
-       { "ch", CH }, // 486
-       { "changed", CHANGED }, // 487
-       { "char", CHAR }, // 488
-       { "char-national", CHAR_NATIONAL }, // 489
-       { "character", CHARACTER }, // 490
-       { "characters", CHARACTERS }, // 491
-       { "checking", CHECKING }, // 492
-       { "class", CLASS }, // 493
-       { "cobol", COBOL }, // 494
-       { "code", CODE }, // 495
-       { "code-set", CODESET }, // 496
-       { "collating", COLLATING }, // 497
-       { "column", COLUMN }, // 498
-       { "combined-datetime", COMBINED_DATETIME }, // 499
-       { "comma", COMMA }, // 500
-       { "command-line", COMMAND_LINE }, // 501
-       { "command-line-count", COMMAND_LINE_COUNT }, // 502
-       { "commit", COMMIT }, // 503
-       { "common", COMMON }, // 504
-       { "concat", CONCAT }, // 505
-       { "condition", CONDITION }, // 506
-       { "configuration", CONFIGURATION_SECT }, // 507
-       { "contains", CONTAINS }, // 508
-       { "content", CONTENT }, // 509
-       { "control", CONTROL }, // 510
-       { "controls", CONTROLS }, // 511
-       { "convert", CONVERT }, // 512
-       { "converting", CONVERTING }, // 513
-       { "corresponding", CORRESPONDING }, // 514
-       { "cos", COS }, // 515
-       { "count", COUNT }, // 516
-       { "currency", CURRENCY }, // 517
-       { "current", CURRENT }, // 518
-       { "current-date", CURRENT_DATE }, // 519
-       { "data", DATA }, // 520
-       { "date", DATE }, // 521
-       { "date-compiled", DATE_COMPILED }, // 522
-       { "date-of-integer", DATE_OF_INTEGER }, // 523
-       { "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 524
-       { "date-written", DATE_WRITTEN }, // 525
-       { "day", DAY }, // 526
-       { "day-of-integer", DAY_OF_INTEGER }, // 527
-       { "day-of-week", DAY_OF_WEEK }, // 528
-       { "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 529
-       { "dbcs", DBCS }, // 530
-       { "de", DE }, // 531
-       { "debugging", DEBUGGING }, // 532
-       { "decimal-point", DECIMAL_POINT }, // 533
-       { "declaratives", DECLARATIVES }, // 534
-       { "default", DEFAULT }, // 535
-       { "delimited", DELIMITED }, // 536
-       { "delimiter", DELIMITER }, // 537
-       { "depending", DEPENDING }, // 538
-       { "descending", DESCENDING }, // 539
-       { "detail", DETAIL }, // 540
-       { "direct", DIRECT }, // 541
-       { "direct-access", DIRECT_ACCESS }, // 542
-       { "down", DOWN }, // 543
-       { "duplicates", DUPLICATES }, // 544
-       { "dynamic", DYNAMIC }, // 545
-       { "e", E }, // 546
-       { "ebcdic", EBCDIC }, // 547
-       { "ec", EC }, // 548
-       { "egcs", EGCS }, // 549
-       { "entry", ENTRY }, // 550
-       { "environment", ENVIRONMENT }, // 551
-       { "equal", EQUAL }, // 552
-       { "every", EVERY }, // 553
-       { "examine", EXAMINE }, // 554
-       { "exhibit", EXHIBIT }, // 555
-       { "exp", EXP }, // 556
-       { "exp10", EXP10 }, // 557
-       { "extend", EXTEND }, // 558
-       { "external", EXTERNAL }, // 559
-       { "exception-file", EXCEPTION_FILE }, // 560
-       { "exception-file-n", EXCEPTION_FILE_N }, // 561
-       { "exception-location", EXCEPTION_LOCATION }, // 562
-       { "exception-location-n", EXCEPTION_LOCATION_N }, // 563
-       { "exception-statement", EXCEPTION_STATEMENT }, // 564
-       { "exception-status", EXCEPTION_STATUS }, // 565
-       { "factorial", FACTORIAL }, // 566
-       { "false", FALSE_kw }, // 567
-       { "fd", FD }, // 568
-       { "file-control", FILE_CONTROL }, // 569
-       { "file", FILE_KW }, // 570
-       { "file-limit", FILE_LIMIT }, // 571
-       { "final", FINAL }, // 572
-       { "finally", FINALLY }, // 573
-       { "find-string", FIND_STRING }, // 574
-       { "first", FIRST }, // 575
-       { "fixed", FIXED }, // 576
-       { "footing", FOOTING }, // 577
-       { "for", FOR }, // 578
-       { "formatted-current-date", FORMATTED_CURRENT_DATE }, // 579
-       { "formatted-date", FORMATTED_DATE }, // 580
-       { "formatted-datetime", FORMATTED_DATETIME }, // 581
-       { "formatted-time", FORMATTED_TIME }, // 582
-       { "form-overflow", FORM_OVERFLOW }, // 583
-       { "free", FREE }, // 584
-       { "fraction-part", FRACTION_PART }, // 585
-       { "from", FROM }, // 586
-       { "function", FUNCTION }, // 587
-       { "generate", GENERATE }, // 588
-       { "giving", GIVING }, // 589
-       { "global", GLOBAL }, // 590
-       { "go", GO }, // 591
-       { "group", GROUP }, // 592
-       { "heading", HEADING }, // 593
-       { "hex", HEX }, // 594
-       { "hex-of", HEX_OF }, // 595
-       { "hex-to-char", HEX_TO_CHAR }, // 596
-       { "high-values", HIGH_VALUES }, // 597
-       { "highest-algebraic", HIGHEST_ALGEBRAIC }, // 598
-       { "hold", HOLD }, // 599
-       { "ibm-360", IBM_360 }, // 600
-       { "in", IN }, // 601
-       { "include", INCLUDE }, // 602
-       { "index", INDEX }, // 603
-       { "indexed", INDEXED }, // 604
-       { "indicate", INDICATE }, // 605
-       { "initial", INITIAL_kw }, // 606
-       { "initiate", INITIATE }, // 607
-       { "input", INPUT }, // 608
-       { "installation", INSTALLATION }, // 609
-       { "interface", INTERFACE }, // 610
-       { "integer", INTEGER }, // 611
-       { "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 612
-       { "integer-of-date", INTEGER_OF_DATE }, // 613
-       { "integer-of-day", INTEGER_OF_DAY }, // 614
-       { "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 615
-       { "integer-part", INTEGER_PART }, // 616
-       { "into", INTO }, // 617
-       { "intrinsic", INTRINSIC }, // 618
-       { "invoke", INVOKE }, // 619
-       { "i-o", IO }, // 620
-       { "i-o-control", IO_CONTROL }, // 621
-       { "is", IS }, // 622
-       { "isnt", ISNT }, // 623
-       { "kanji", KANJI }, // 624
-       { "key", KEY }, // 625
-       { "label", LABEL }, // 626
-       { "last", LAST }, // 627
-       { "leading", LEADING }, // 628
-       { "left", LEFT }, // 629
-       { "length", LENGTH }, // 630
-       { "length-of", LENGTH_OF }, // 631
-       { "limit", LIMIT }, // 632
-       { "limits", LIMITS }, // 633
-       { "line", LINE }, // 634
-       { "lines", LINES }, // 635
-       { "line-counter", LINE_COUNTER }, // 636
-       { "linage", LINAGE }, // 637
-       { "linkage", LINKAGE }, // 638
-       { "locale", LOCALE }, // 639
-       { "locale-compare", LOCALE_COMPARE }, // 640
-       { "locale-date", LOCALE_DATE }, // 641
-       { "locale-time", LOCALE_TIME }, // 642
-       { "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 643
-       { "local-storage", LOCAL_STORAGE }, // 644
-       { "location", LOCATION }, // 645
-       { "lock", LOCK }, // 646
-       { "lock-on", LOCK_ON }, // 647
-       { "log", LOG }, // 648
-       { "log10", LOG10 }, // 649
-       { "lower-case", LOWER_CASE }, // 650
-       { "low-values", LOW_VALUES }, // 651
-       { "lowest-algebraic", LOWEST_ALGEBRAIC }, // 652
-       { "lparen", LPAREN }, // 653
-       { "manual", MANUAL }, // 654
-       { "maxx", MAXX }, // 655
-       { "mean", MEAN }, // 656
-       { "median", MEDIAN }, // 657
-       { "midrange", MIDRANGE }, // 658
-       { "minn", MINN }, // 659
-       { "multiple", MULTIPLE }, // 660
-       { "mod", MOD }, // 661
-       { "mode", MODE }, // 662
-       { "module-name", MODULE_NAME }, // 663
-       { "named", NAMED }, // 664
-       { "nat", NAT }, // 665
-       { "national", NATIONAL }, // 666
-       { "national-edited", NATIONAL_EDITED }, // 667
-       { "national-of", NATIONAL_OF }, // 668
-       { "native", NATIVE }, // 669
-       { "nested", NESTED }, // 670
-       { "next", NEXT }, // 671
-       { "no", NO }, // 672
-       { "note", NOTE }, // 673
-       { "nulls", NULLS }, // 674
-       { "null", NULLS }, // 674
-       { "nullptr", NULLPTR }, // 675
-       { "numeric", NUMERIC }, // 676
-       { "numeric-edited", NUMERIC_EDITED }, // 677
-       { "numval", NUMVAL }, // 678
-       { "numval-c", NUMVAL_C }, // 679
-       { "numval-f", NUMVAL_F }, // 680
-       { "occurs", OCCURS }, // 681
-       { "of", OF }, // 682
-       { "off", OFF }, // 683
-       { "omitted", OMITTED }, // 684
-       { "on", ON }, // 685
-       { "only", ONLY }, // 686
-       { "optional", OPTIONAL }, // 687
-       { "options", OPTIONS }, // 688
-       { "ord", ORD }, // 689
-       { "order", ORDER }, // 690
-       { "ord-max", ORD_MAX }, // 691
-       { "ord-min", ORD_MIN }, // 692
-       { "organization", ORGANIZATION }, // 693
-       { "other", OTHER }, // 694
-       { "otherwise", OTHERWISE }, // 695
-       { "output", OUTPUT }, // 696
-       { "packed-decimal", PACKED_DECIMAL }, // 697
-       { "padding", PADDING }, // 698
-       { "page", PAGE }, // 699
-       { "page-counter", PAGE_COUNTER }, // 700
-       { "pf", PF }, // 701
-       { "ph", PH }, // 702
-       { "pi", PI }, // 703
-       { "pic", PIC }, // 704
-       { "picture", PICTURE }, // 705
-       { "plus", PLUS }, // 706
-       { "present-value", PRESENT_VALUE }, // 707
-       { "print-switch", PRINT_SWITCH }, // 708
-       { "procedure", PROCEDURE }, // 709
-       { "procedures", PROCEDURES }, // 710
-       { "proceed", PROCEED }, // 711
-       { "process", PROCESS }, // 712
-       { "program-id", PROGRAM_ID }, // 713
-       { "program", PROGRAM_kw }, // 714
-       { "property", PROPERTY }, // 715
-       { "prototype", PROTOTYPE }, // 716
-       { "pseudotext", PSEUDOTEXT }, // 717
-       { "quotes", QUOTES }, // 718
-       { "quote", QUOTES }, // 718
-       { "random", RANDOM }, // 719
-       { "random-seed", RANDOM_SEED }, // 720
-       { "range", RANGE }, // 721
-       { "raise", RAISE }, // 722
-       { "raising", RAISING }, // 723
-       { "rd", RD }, // 724
-       { "record", RECORD }, // 725
-       { "recording", RECORDING }, // 726
-       { "records", RECORDS }, // 727
-       { "recursive", RECURSIVE }, // 728
-       { "redefines", REDEFINES }, // 729
-       { "reel", REEL }, // 730
-       { "reference", REFERENCE }, // 731
-       { "relative", RELATIVE }, // 732
-       { "rem", REM }, // 733
-       { "remainder", REMAINDER }, // 734
-       { "remarks", REMARKS }, // 735
-       { "removal", REMOVAL }, // 736
-       { "renames", RENAMES }, // 737
-       { "replace", REPLACE }, // 738
-       { "replacing", REPLACING }, // 739
-       { "report", REPORT }, // 740
-       { "reporting", REPORTING }, // 741
-       { "reports", REPORTS }, // 742
-       { "repository", REPOSITORY }, // 743
-       { "rerun", RERUN }, // 744
-       { "reserve", RESERVE }, // 745
-       { "restricted", RESTRICTED }, // 746
-       { "resume", RESUME }, // 747
-       { "reverse", REVERSE }, // 748
-       { "reversed", REVERSED }, // 749
-       { "rewind", REWIND }, // 750
-       { "rf", RF }, // 751
-       { "rh", RH }, // 752
-       { "right", RIGHT }, // 753
-       { "rounded", ROUNDED }, // 754
-       { "run", RUN }, // 755
-       { "same", SAME }, // 756
-       { "screen", SCREEN }, // 757
-       { "sd", SD }, // 758
-       { "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 759
-       { "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 760
-       { "security", SECURITY }, // 761
-       { "separate", SEPARATE }, // 762
-       { "sequence", SEQUENCE }, // 763
-       { "sequential", SEQUENTIAL }, // 764
-       { "sharing", SHARING }, // 765
-       { "simple-exit", SIMPLE_EXIT }, // 766
-       { "sign", SIGN }, // 767
-       { "sin", SIN }, // 768
-       { "size", SIZE }, // 769
-       { "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 770
-       { "source", SOURCE }, // 771
-       { "source-computer", SOURCE_COMPUTER }, // 772
-       { "special-names", SPECIAL_NAMES }, // 773
-       { "sqrt", SQRT }, // 774
-       { "stack", STACK }, // 775
-       { "standard", STANDARD }, // 776
-       { "standard-1", STANDARD_1 }, // 777
-       { "standard-deviation", STANDARD_DEVIATION }, // 778
-       { "standard-compare", STANDARD_COMPARE }, // 779
-       { "status", STATUS }, // 780
-       { "strong", STRONG }, // 781
-       { "substitute", SUBSTITUTE }, // 782
-       { "sum", SUM }, // 783
-       { "symbol", SYMBOL }, // 784
-       { "symbolic", SYMBOLIC }, // 785
-       { "synchronized", SYNCHRONIZED }, // 786
-       { "tally", TALLY }, // 787
-       { "tallying", TALLYING }, // 788
-       { "tan", TAN }, // 789
-       { "terminate", TERMINATE }, // 790
-       { "test", TEST }, // 791
-       { "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 792
-       { "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 793
-       { "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 794
-       { "test-numval", TEST_NUMVAL }, // 795
-       { "test-numval-c", TEST_NUMVAL_C }, // 796
-       { "test-numval-f", TEST_NUMVAL_F }, // 797
-       { "than", THAN }, // 798
-       { "time", TIME }, // 799
-       { "times", TIMES }, // 800
-       { "to", TO }, // 801
-       { "top", TOP }, // 802
-       { "top-level", TOP_LEVEL }, // 803
-       { "tracks", TRACKS }, // 804
-       { "track-area", TRACK_AREA }, // 805
-       { "trailing", TRAILING }, // 806
-       { "transform", TRANSFORM }, // 807
-       { "trim", TRIM }, // 808
-       { "true", TRUE_kw }, // 809
-       { "try", TRY }, // 810
-       { "turn", TURN }, // 811
-       { "type", TYPE }, // 812
-       { "typedef", TYPEDEF }, // 813
-       { "ulength", ULENGTH }, // 814
-       { "unbounded", UNBOUNDED }, // 815
-       { "unit", UNIT }, // 816
-       { "units", UNITS }, // 817
-       { "unit-record", UNIT_RECORD }, // 818
-       { "until", UNTIL }, // 819
-       { "up", UP }, // 820
-       { "upon", UPON }, // 821
-       { "upos", UPOS }, // 822
-       { "upper-case", UPPER_CASE }, // 823
-       { "usage", USAGE }, // 824
-       { "using", USING }, // 825
-       { "usubstr", USUBSTR }, // 826
-       { "usupplementary", USUPPLEMENTARY }, // 827
-       { "utility", UTILITY }, // 828
-       { "uuid4", UUID4 }, // 829
-       { "uvalid", UVALID }, // 830
-       { "uwidth", UWIDTH }, // 831
-       { "value", VALUE }, // 832
-       { "variance", VARIANCE }, // 833
-       { "varying", VARYING }, // 834
-       { "volatile", VOLATILE }, // 835
-       { "when-compiled", WHEN_COMPILED }, // 836
-       { "with", WITH }, // 837
-       { "working-storage", WORKING_STORAGE }, // 838
-       { "xml", XML }, // 839
-       { "xmlgenerate", XMLGENERATE }, // 840
-       { "xmlparse", XMLPARSE }, // 841
-       { "year-to-yyyy", YEAR_TO_YYYY }, // 842
-       { "yyyyddd", YYYYDDD }, // 843
-       { "yyyymmdd", YYYYMMDD }, // 844
-       { "arithmetic", ARITHMETIC }, // 845
-       { "attribute", ATTRIBUTE }, // 846
-       { "auto", AUTO }, // 847
-       { "automatic", AUTOMATIC }, // 848
-       { "away-from-zero", AWAY_FROM_ZERO }, // 849
-       { "background-color", BACKGROUND_COLOR }, // 850
-       { "bell", BELL }, // 851
-       { "binary-encoding", BINARY_ENCODING }, // 852
-       { "blink", BLINK }, // 853
-       { "capacity", CAPACITY }, // 854
-       { "center", CENTER }, // 855
-       { "classification", CLASSIFICATION }, // 856
-       { "cycle", CYCLE }, // 857
-       { "decimal-encoding", DECIMAL_ENCODING }, // 858
-       { "entry-convention", ENTRY_CONVENTION }, // 859
-       { "eol", EOL }, // 860
-       { "eos", EOS }, // 861
-       { "erase", ERASE }, // 862
-       { "expands", EXPANDS }, // 863
-       { "float-binary", FLOAT_BINARY }, // 864
-       { "float-decimal", FLOAT_DECIMAL }, // 865
-       { "foreground-color", FOREGROUND_COLOR }, // 866
-       { "forever", FOREVER }, // 867
-       { "full", FULL }, // 868
-       { "highlight", HIGHLIGHT }, // 869
-       { "high-order-left", HIGH_ORDER_LEFT }, // 870
-       { "high-order-right", HIGH_ORDER_RIGHT }, // 871
-       { "ignoring", IGNORING }, // 872
-       { "implements", IMPLEMENTS }, // 873
-       { "initialized", INITIALIZED }, // 874
-       { "intermediate", INTERMEDIATE }, // 875
-       { "lc-all", LC_ALL_kw }, // 876
-       { "lc-collate", LC_COLLATE_kw }, // 877
-       { "lc-ctype", LC_CTYPE_kw }, // 878
-       { "lc-messages", LC_MESSAGES_kw }, // 879
-       { "lc-monetary", LC_MONETARY_kw }, // 880
-       { "lc-numeric", LC_NUMERIC_kw }, // 881
-       { "lc-time", LC_TIME_kw }, // 882
-       { "lowlight", LOWLIGHT }, // 883
-       { "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 884
-       { "nearest-even", NEAREST_EVEN }, // 885
-       { "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 886
-       { "none", NONE }, // 887
-       { "normal", NORMAL }, // 888
-       { "numbers", NUMBERS }, // 889
-       { "prefixed", PREFIXED }, // 890
-       { "previous", PREVIOUS }, // 891
-       { "prohibited", PROHIBITED }, // 892
-       { "relation", RELATION }, // 893
-       { "required", REQUIRED }, // 894
-       { "reverse-video", REVERSE_VIDEO }, // 895
-       { "rounding", ROUNDING }, // 896
-       { "seconds", SECONDS }, // 897
-       { "secure", SECURE }, // 898
-       { "short", SHORT }, // 899
-       { "signed", SIGNED_kw }, // 900
-       { "standard-binary", STANDARD_BINARY }, // 901
-       { "standard-decimal", STANDARD_DECIMAL }, // 902
-       { "statement", STATEMENT }, // 903
-       { "step", STEP }, // 904
-       { "structure", STRUCTURE }, // 905
-       { "toward-greater", TOWARD_GREATER }, // 906
-       { "toward-lesser", TOWARD_LESSER }, // 907
-       { "truncation", TRUNCATION }, // 908
-       { "ucs-4", UCS_4 }, // 909
-       { "underline", UNDERLINE }, // 910
-       { "unsigned", UNSIGNED_kw }, // 911
-       { "utf-16", UTF_16 }, // 912
-       { "utf-8", UTF_8 }, // 913
-       { "address", ADDRESS }, // 914
-       { "end-accept", END_ACCEPT }, // 915
-       { "end-add", END_ADD }, // 916
-       { "end-call", END_CALL }, // 917
-       { "end-compute", END_COMPUTE }, // 918
-       { "end-delete", END_DELETE }, // 919
-       { "end-display", END_DISPLAY }, // 920
-       { "end-divide", END_DIVIDE }, // 921
-       { "end-evaluate", END_EVALUATE }, // 922
-       { "end-multiply", END_MULTIPLY }, // 923
-       { "end-perform", END_PERFORM }, // 924
-       { "end-read", END_READ }, // 925
-       { "end-return", END_RETURN }, // 926
-       { "end-rewrite", END_REWRITE }, // 927
-       { "end-search", END_SEARCH }, // 928
-       { "end-start", END_START }, // 929
-       { "end-string", END_STRING }, // 930
-       { "end-subtract", END_SUBTRACT }, // 931
-       { "end-unstring", END_UNSTRING }, // 932
-       { "end-write", END_WRITE }, // 933
-       { "end-if", END_IF }, // 934
-       { "thru", THRU }, // 935
-       { "through", THRU }, // 935
-       { "or", OR }, // 936
-       { "and", AND }, // 937
-       { "not", NOT }, // 938
-       { "ne", NE }, // 939
-       { "le", LE }, // 940
-       { "ge", GE }, // 941
-       { "pow", POW }, // 942
-       { "neg", NEG }, // 943
+       { "call-convention", CALL_CONVENTION }, // 391
+       { "call-cobol", CALL_COBOL }, // 392
+       { "call-verbatim", CALL_VERBATIM }, // 393
+       { "cdf-push", CDF_PUSH }, // 394
+       { "cdf-pop", CDF_POP }, // 395
+       { "source-format", SOURCE_FORMAT }, // 396
+       { "if", IF }, // 397
+       { "then", THEN }, // 398
+       { "else", ELSE }, // 399
+       { "sentence", SENTENCE }, // 400
+       { "accept", ACCEPT }, // 401
+       { "add", ADD }, // 402
+       { "alter", ALTER }, // 403
+       { "call", CALL }, // 404
+       { "cancel", CANCEL }, // 405
+       { "close", CLOSE }, // 406
+       { "compute", COMPUTE }, // 407
+       { "continue", CONTINUE }, // 408
+       { "delete", DELETE }, // 409
+       { "display", DISPLAY }, // 410
+       { "divide", DIVIDE }, // 411
+       { "evaluate", EVALUATE }, // 412
+       { "exit", EXIT }, // 413
+       { "filler", FILLER_kw }, // 414
+       { "goback", GOBACK }, // 415
+       { "goto", GOTO }, // 416
+       { "initialize", INITIALIZE }, // 417
+       { "inspect", INSPECT }, // 418
+       { "merge", MERGE }, // 419
+       { "move", MOVE }, // 420
+       { "multiply", MULTIPLY }, // 421
+       { "open", OPEN }, // 422
+       { "paragraph", PARAGRAPH }, // 423
+       { "read", READ }, // 424
+       { "release", RELEASE }, // 425
+       { "return", RETURN }, // 426
+       { "rewrite", REWRITE }, // 427
+       { "search", SEARCH }, // 428
+       { "set", SET }, // 429
+       { "select", SELECT }, // 430
+       { "sort", SORT }, // 431
+       { "sort-merge", SORT_MERGE }, // 432
+       { "string", STRING_kw }, // 433
+       { "stop", STOP }, // 434
+       { "subtract", SUBTRACT }, // 435
+       { "start", START }, // 436
+       { "unstring", UNSTRING }, // 437
+       { "write", WRITE }, // 438
+       { "when", WHEN }, // 439
+       { "argument-number", ARGUMENT_NUMBER }, // 440
+       { "argument-value", ARGUMENT_VALUE }, // 441
+       { "environment-name", ENVIRONMENT_NAME }, // 442
+       { "environment-value", ENVIRONMENT_VALUE }, // 443
+       { "abs", ABS }, // 444
+       { "access", ACCESS }, // 445
+       { "acos", ACOS }, // 446
+       { "actual", ACTUAL }, // 447
+       { "advancing", ADVANCING }, // 448
+       { "after", AFTER }, // 449
+       { "all", ALL }, // 450
+       { "allocate", ALLOCATE }, // 451
+       { "alphabet", ALPHABET }, // 452
+       { "alphabetic", ALPHABETIC }, // 453
+       { "alphabetic-lower", ALPHABETIC_LOWER }, // 454
+       { "alphabetic-upper", ALPHABETIC_UPPER }, // 455
+       { "alphanumeric", ALPHANUMERIC }, // 456
+       { "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 457
+       { "also", ALSO }, // 458
+       { "alternate", ALTERNATE }, // 459
+       { "annuity", ANNUITY }, // 460
+       { "anum", ANUM }, // 461
+       { "any", ANY }, // 462
+       { "anycase", ANYCASE }, // 463
+       { "apply", APPLY }, // 464
+       { "are", ARE }, // 465
+       { "area", AREA }, // 466
+       { "areas", AREAS }, // 467
+       { "as", AS }, // 468
+       { "ascending", ASCENDING }, // 469
+       { "activating", ACTIVATING }, // 470
+       { "asin", ASIN }, // 471
+       { "assign", ASSIGN }, // 472
+       { "at", AT }, // 473
+       { "atan", ATAN }, // 474
+       { "based", BASED }, // 475
+       { "baseconvert", BASECONVERT }, // 476
+       { "before", BEFORE }, // 477
+       { "binary", BINARY }, // 478
+       { "bit", BIT }, // 479
+       { "bit-of", BIT_OF }, // 480
+       { "bit-to-char", BIT_TO_CHAR }, // 481
+       { "blank", BLANK }, // 482
+       { "block", BLOCK_kw }, // 483
+       { "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 484
+       { "bottom", BOTTOM }, // 485
+       { "by", BY }, // 486
+       { "byte", BYTE }, // 487
+       { "byte-length", BYTE_LENGTH }, // 488
+       { "cf", CF }, // 489
+       { "ch", CH }, // 490
+       { "changed", CHANGED }, // 491
+       { "char", CHAR }, // 492
+       { "char-national", CHAR_NATIONAL }, // 493
+       { "character", CHARACTER }, // 494
+       { "characters", CHARACTERS }, // 495
+       { "checking", CHECKING }, // 496
+       { "class", CLASS }, // 497
+       { "cobol", COBOL }, // 498
+       { "code", CODE }, // 499
+       { "code-set", CODESET }, // 500
+       { "collating", COLLATING }, // 501
+       { "column", COLUMN }, // 502
+       { "combined-datetime", COMBINED_DATETIME }, // 503
+       { "comma", COMMA }, // 504
+       { "command-line", COMMAND_LINE }, // 505
+       { "command-line-count", COMMAND_LINE_COUNT }, // 506
+       { "commit", COMMIT }, // 507
+       { "common", COMMON }, // 508
+       { "concat", CONCAT }, // 509
+       { "condition", CONDITION }, // 510
+       { "configuration", CONFIGURATION_SECT }, // 511
+       { "contains", CONTAINS }, // 512
+       { "content", CONTENT }, // 513
+       { "control", CONTROL }, // 514
+       { "controls", CONTROLS }, // 515
+       { "convert", CONVERT }, // 516
+       { "converting", CONVERTING }, // 517
+       { "corresponding", CORRESPONDING }, // 518
+       { "cos", COS }, // 519
+       { "count", COUNT }, // 520
+       { "currency", CURRENCY }, // 521
+       { "current", CURRENT }, // 522
+       { "current-date", CURRENT_DATE }, // 523
+       { "data", DATA }, // 524
+       { "date", DATE }, // 525
+       { "date-compiled", DATE_COMPILED }, // 526
+       { "date-of-integer", DATE_OF_INTEGER }, // 527
+       { "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 528
+       { "date-written", DATE_WRITTEN }, // 529
+       { "day", DAY }, // 530
+       { "day-of-integer", DAY_OF_INTEGER }, // 531
+       { "day-of-week", DAY_OF_WEEK }, // 532
+       { "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 533
+       { "dbcs", DBCS }, // 534
+       { "de", DE }, // 535
+       { "debugging", DEBUGGING }, // 536
+       { "decimal-point", DECIMAL_POINT }, // 537
+       { "declaratives", DECLARATIVES }, // 538
+       { "default", DEFAULT }, // 539
+       { "delimited", DELIMITED }, // 540
+       { "delimiter", DELIMITER }, // 541
+       { "depending", DEPENDING }, // 542
+       { "descending", DESCENDING }, // 543
+       { "detail", DETAIL }, // 544
+       { "direct", DIRECT }, // 545
+       { "direct-access", DIRECT_ACCESS }, // 546
+       { "down", DOWN }, // 547
+       { "duplicates", DUPLICATES }, // 548
+       { "dynamic", DYNAMIC }, // 549
+       { "e", E }, // 550
+       { "ebcdic", EBCDIC }, // 551
+       { "ec", EC }, // 552
+       { "egcs", EGCS }, // 553
+       { "entry", ENTRY }, // 554
+       { "environment", ENVIRONMENT }, // 555
+       { "equal", EQUAL }, // 556
+       { "every", EVERY }, // 557
+       { "examine", EXAMINE }, // 558
+       { "exhibit", EXHIBIT }, // 559
+       { "exp", EXP }, // 560
+       { "exp10", EXP10 }, // 561
+       { "extend", EXTEND }, // 562
+       { "external", EXTERNAL }, // 563
+       { "exception-file", EXCEPTION_FILE }, // 564
+       { "exception-file-n", EXCEPTION_FILE_N }, // 565
+       { "exception-location", EXCEPTION_LOCATION }, // 566
+       { "exception-location-n", EXCEPTION_LOCATION_N }, // 567
+       { "exception-statement", EXCEPTION_STATEMENT }, // 568
+       { "exception-status", EXCEPTION_STATUS }, // 569
+       { "factorial", FACTORIAL }, // 570
+       { "false", FALSE_kw }, // 571
+       { "fd", FD }, // 572
+       { "file-control", FILE_CONTROL }, // 573
+       { "file", FILE_KW }, // 574
+       { "file-limit", FILE_LIMIT }, // 575
+       { "final", FINAL }, // 576
+       { "finally", FINALLY }, // 577
+       { "find-string", FIND_STRING }, // 578
+       { "first", FIRST }, // 579
+       { "fixed", FIXED }, // 580
+       { "footing", FOOTING }, // 581
+       { "for", FOR }, // 582
+       { "formatted-current-date", FORMATTED_CURRENT_DATE }, // 583
+       { "formatted-date", FORMATTED_DATE }, // 584
+       { "formatted-datetime", FORMATTED_DATETIME }, // 585
+       { "formatted-time", FORMATTED_TIME }, // 586
+       { "form-overflow", FORM_OVERFLOW }, // 587
+       { "free", FREE }, // 588
+       { "fraction-part", FRACTION_PART }, // 589
+       { "from", FROM }, // 590
+       { "function", FUNCTION }, // 591
+       { "generate", GENERATE }, // 592
+       { "giving", GIVING }, // 593
+       { "global", GLOBAL }, // 594
+       { "go", GO }, // 595
+       { "group", GROUP }, // 596
+       { "heading", HEADING }, // 597
+       { "hex", HEX }, // 598
+       { "hex-of", HEX_OF }, // 599
+       { "hex-to-char", HEX_TO_CHAR }, // 600
+       { "high-values", HIGH_VALUES }, // 601
+       { "highest-algebraic", HIGHEST_ALGEBRAIC }, // 602
+       { "hold", HOLD }, // 603
+       { "ibm-360", IBM_360 }, // 604
+       { "in", IN }, // 605
+       { "include", INCLUDE }, // 606
+       { "index", INDEX }, // 607
+       { "indexed", INDEXED }, // 608
+       { "indicate", INDICATE }, // 609
+       { "initial", INITIAL_kw }, // 610
+       { "initiate", INITIATE }, // 611
+       { "input", INPUT }, // 612
+       { "installation", INSTALLATION }, // 613
+       { "interface", INTERFACE }, // 614
+       { "integer", INTEGER }, // 615
+       { "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 616
+       { "integer-of-date", INTEGER_OF_DATE }, // 617
+       { "integer-of-day", INTEGER_OF_DAY }, // 618
+       { "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 619
+       { "integer-part", INTEGER_PART }, // 620
+       { "into", INTO }, // 621
+       { "intrinsic", INTRINSIC }, // 622
+       { "invoke", INVOKE }, // 623
+       { "i-o", IO }, // 624
+       { "i-o-control", IO_CONTROL }, // 625
+       { "is", IS }, // 626
+       { "isnt", ISNT }, // 627
+       { "kanji", KANJI }, // 628
+       { "key", KEY }, // 629
+       { "label", LABEL }, // 630
+       { "last", LAST }, // 631
+       { "leading", LEADING }, // 632
+       { "left", LEFT }, // 633
+       { "length", LENGTH }, // 634
+       { "length-of", LENGTH_OF }, // 635
+       { "limit", LIMIT }, // 636
+       { "limits", LIMITS }, // 637
+       { "line", LINE }, // 638
+       { "lines", LINES }, // 639
+       { "line-counter", LINE_COUNTER }, // 640
+       { "linage", LINAGE }, // 641
+       { "linkage", LINKAGE }, // 642
+       { "locale", LOCALE }, // 643
+       { "locale-compare", LOCALE_COMPARE }, // 644
+       { "locale-date", LOCALE_DATE }, // 645
+       { "locale-time", LOCALE_TIME }, // 646
+       { "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 647
+       { "local-storage", LOCAL_STORAGE }, // 648
+       { "location", LOCATION }, // 649
+       { "lock", LOCK }, // 650
+       { "lock-on", LOCK_ON }, // 651
+       { "log", LOG }, // 652
+       { "log10", LOG10 }, // 653
+       { "lower-case", LOWER_CASE }, // 654
+       { "low-values", LOW_VALUES }, // 655
+       { "lowest-algebraic", LOWEST_ALGEBRAIC }, // 656
+       { "lparen", LPAREN }, // 657
+       { "manual", MANUAL }, // 658
+       { "maxx", MAXX }, // 659
+       { "mean", MEAN }, // 660
+       { "median", MEDIAN }, // 661
+       { "midrange", MIDRANGE }, // 662
+       { "minn", MINN }, // 663
+       { "multiple", MULTIPLE }, // 664
+       { "mod", MOD }, // 665
+       { "mode", MODE }, // 666
+       { "module-name", MODULE_NAME }, // 667
+       { "named", NAMED }, // 668
+       { "nat", NAT }, // 669
+       { "national", NATIONAL }, // 670
+       { "national-edited", NATIONAL_EDITED }, // 671
+       { "national-of", NATIONAL_OF }, // 672
+       { "native", NATIVE }, // 673
+       { "nested", NESTED }, // 674
+       { "next", NEXT }, // 675
+       { "no", NO }, // 676
+       { "note", NOTE }, // 677
+       { "nulls", NULLS }, // 678
+       { "null", NULLS }, // 678
+       { "nullptr", NULLPTR }, // 679
+       { "numeric", NUMERIC }, // 680
+       { "numeric-edited", NUMERIC_EDITED }, // 681
+       { "numval", NUMVAL }, // 682
+       { "numval-c", NUMVAL_C }, // 683
+       { "numval-f", NUMVAL_F }, // 684
+       { "occurs", OCCURS }, // 685
+       { "of", OF }, // 686
+       { "off", OFF }, // 687
+       { "omitted", OMITTED }, // 688
+       { "on", ON }, // 689
+       { "only", ONLY }, // 690
+       { "optional", OPTIONAL }, // 691
+       { "options", OPTIONS }, // 692
+       { "ord", ORD }, // 693
+       { "order", ORDER }, // 694
+       { "ord-max", ORD_MAX }, // 695
+       { "ord-min", ORD_MIN }, // 696
+       { "organization", ORGANIZATION }, // 697
+       { "other", OTHER }, // 698
+       { "otherwise", OTHERWISE }, // 699
+       { "output", OUTPUT }, // 700
+       { "packed-decimal", PACKED_DECIMAL }, // 701
+       { "padding", PADDING }, // 702
+       { "page", PAGE }, // 703
+       { "page-counter", PAGE_COUNTER }, // 704
+       { "pf", PF }, // 705
+       { "ph", PH }, // 706
+       { "pi", PI }, // 707
+       { "pic", PIC }, // 708
+       { "picture", PICTURE }, // 709
+       { "plus", PLUS }, // 710
+       { "present-value", PRESENT_VALUE }, // 711
+       { "print-switch", PRINT_SWITCH }, // 712
+       { "procedure", PROCEDURE }, // 713
+       { "procedures", PROCEDURES }, // 714
+       { "proceed", PROCEED }, // 715
+       { "process", PROCESS }, // 716
+       { "program-id", PROGRAM_ID }, // 717
+       { "program", PROGRAM_kw }, // 718
+       { "property", PROPERTY }, // 719
+       { "prototype", PROTOTYPE }, // 720
+       { "pseudotext", PSEUDOTEXT }, // 721
+       { "quotes", QUOTES }, // 722
+       { "quote", QUOTES }, // 722
+       { "random", RANDOM }, // 723
+       { "random-seed", RANDOM_SEED }, // 724
+       { "range", RANGE }, // 725
+       { "raise", RAISE }, // 726
+       { "raising", RAISING }, // 727
+       { "rd", RD }, // 728
+       { "record", RECORD }, // 729
+       { "recording", RECORDING }, // 730
+       { "records", RECORDS }, // 731
+       { "recursive", RECURSIVE }, // 732
+       { "redefines", REDEFINES }, // 733
+       { "reel", REEL }, // 734
+       { "reference", REFERENCE }, // 735
+       { "relative", RELATIVE }, // 736
+       { "rem", REM }, // 737
+       { "remainder", REMAINDER }, // 738
+       { "remarks", REMARKS }, // 739
+       { "removal", REMOVAL }, // 740
+       { "renames", RENAMES }, // 741
+       { "replace", REPLACE }, // 742
+       { "replacing", REPLACING }, // 743
+       { "report", REPORT }, // 744
+       { "reporting", REPORTING }, // 745
+       { "reports", REPORTS }, // 746
+       { "repository", REPOSITORY }, // 747
+       { "rerun", RERUN }, // 748
+       { "reserve", RESERVE }, // 749
+       { "restricted", RESTRICTED }, // 750
+       { "resume", RESUME }, // 751
+       { "reverse", REVERSE }, // 752
+       { "reversed", REVERSED }, // 753
+       { "rewind", REWIND }, // 754
+       { "rf", RF }, // 755
+       { "rh", RH }, // 756
+       { "right", RIGHT }, // 757
+       { "rounded", ROUNDED }, // 758
+       { "run", RUN }, // 759
+       { "same", SAME }, // 760
+       { "screen", SCREEN }, // 761
+       { "sd", SD }, // 762
+       { "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 763
+       { "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 764
+       { "security", SECURITY }, // 765
+       { "separate", SEPARATE }, // 766
+       { "sequence", SEQUENCE }, // 767
+       { "sequential", SEQUENTIAL }, // 768
+       { "sharing", SHARING }, // 769
+       { "simple-exit", SIMPLE_EXIT }, // 770
+       { "sign", SIGN }, // 771
+       { "sin", SIN }, // 772
+       { "size", SIZE }, // 773
+       { "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 774
+       { "source", SOURCE }, // 775
+       { "source-computer", SOURCE_COMPUTER }, // 776
+       { "special-names", SPECIAL_NAMES }, // 777
+       { "sqrt", SQRT }, // 778
+       { "stack", STACK }, // 779
+       { "standard", STANDARD }, // 780
+       { "standard-1", STANDARD_1 }, // 781
+       { "standard-deviation", STANDARD_DEVIATION }, // 782
+       { "standard-compare", STANDARD_COMPARE }, // 783
+       { "status", STATUS }, // 784
+       { "strong", STRONG }, // 785
+       { "substitute", SUBSTITUTE }, // 786
+       { "sum", SUM }, // 787
+       { "symbol", SYMBOL }, // 788
+       { "symbolic", SYMBOLIC }, // 789
+       { "synchronized", SYNCHRONIZED }, // 790
+       { "tally", TALLY }, // 791
+       { "tallying", TALLYING }, // 792
+       { "tan", TAN }, // 793
+       { "terminate", TERMINATE }, // 794
+       { "test", TEST }, // 795
+       { "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 796
+       { "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 797
+       { "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 798
+       { "test-numval", TEST_NUMVAL }, // 799
+       { "test-numval-c", TEST_NUMVAL_C }, // 800
+       { "test-numval-f", TEST_NUMVAL_F }, // 801
+       { "than", THAN }, // 802
+       { "time", TIME }, // 803
+       { "times", TIMES }, // 804
+       { "to", TO }, // 805
+       { "top", TOP }, // 806
+       { "top-level", TOP_LEVEL }, // 807
+       { "tracks", TRACKS }, // 808
+       { "track-area", TRACK_AREA }, // 809
+       { "trailing", TRAILING }, // 810
+       { "transform", TRANSFORM }, // 811
+       { "trim", TRIM }, // 812
+       { "true", TRUE_kw }, // 813
+       { "try", TRY }, // 814
+       { "turn", TURN }, // 815
+       { "type", TYPE }, // 816
+       { "typedef", TYPEDEF }, // 817
+       { "ulength", ULENGTH }, // 818
+       { "unbounded", UNBOUNDED }, // 819
+       { "unit", UNIT }, // 820
+       { "units", UNITS }, // 821
+       { "unit-record", UNIT_RECORD }, // 822
+       { "until", UNTIL }, // 823
+       { "up", UP }, // 824
+       { "upon", UPON }, // 825
+       { "upos", UPOS }, // 826
+       { "upper-case", UPPER_CASE }, // 827
+       { "usage", USAGE }, // 828
+       { "using", USING }, // 829
+       { "usubstr", USUBSTR }, // 830
+       { "usupplementary", USUPPLEMENTARY }, // 831
+       { "utility", UTILITY }, // 832
+       { "uuid4", UUID4 }, // 833
+       { "uvalid", UVALID }, // 834
+       { "uwidth", UWIDTH }, // 835
+       { "value", VALUE }, // 836
+       { "variance", VARIANCE }, // 837
+       { "varying", VARYING }, // 838
+       { "volatile", VOLATILE }, // 839
+       { "when-compiled", WHEN_COMPILED }, // 840
+       { "with", WITH }, // 841
+       { "working-storage", WORKING_STORAGE }, // 842
+       { "xml", XML }, // 843
+       { "xmlgenerate", XMLGENERATE }, // 844
+       { "xmlparse", XMLPARSE }, // 845
+       { "year-to-yyyy", YEAR_TO_YYYY }, // 846
+       { "yyyyddd", YYYYDDD }, // 847
+       { "yyyymmdd", YYYYMMDD }, // 848
+       { "arithmetic", ARITHMETIC }, // 849
+       { "attribute", ATTRIBUTE }, // 850
+       { "auto", AUTO }, // 851
+       { "automatic", AUTOMATIC }, // 852
+       { "away-from-zero", AWAY_FROM_ZERO }, // 853
+       { "background-color", BACKGROUND_COLOR }, // 854
+       { "bell", BELL }, // 855
+       { "binary-encoding", BINARY_ENCODING }, // 856
+       { "blink", BLINK }, // 857
+       { "capacity", CAPACITY }, // 858
+       { "center", CENTER }, // 859
+       { "classification", CLASSIFICATION }, // 860
+       { "cycle", CYCLE }, // 861
+       { "decimal-encoding", DECIMAL_ENCODING }, // 862
+       { "entry-convention", ENTRY_CONVENTION }, // 863
+       { "eol", EOL }, // 864
+       { "eos", EOS }, // 865
+       { "erase", ERASE }, // 866
+       { "expands", EXPANDS }, // 867
+       { "float-binary", FLOAT_BINARY }, // 868
+       { "float-decimal", FLOAT_DECIMAL }, // 869
+       { "foreground-color", FOREGROUND_COLOR }, // 870
+       { "forever", FOREVER }, // 871
+       { "full", FULL }, // 872
+       { "highlight", HIGHLIGHT }, // 873
+       { "high-order-left", HIGH_ORDER_LEFT }, // 874
+       { "high-order-right", HIGH_ORDER_RIGHT }, // 875
+       { "ignoring", IGNORING }, // 876
+       { "implements", IMPLEMENTS }, // 877
+       { "initialized", INITIALIZED }, // 878
+       { "intermediate", INTERMEDIATE }, // 879
+       { "lc-all", LC_ALL_kw }, // 880
+       { "lc-collate", LC_COLLATE_kw }, // 881
+       { "lc-ctype", LC_CTYPE_kw }, // 882
+       { "lc-messages", LC_MESSAGES_kw }, // 883
+       { "lc-monetary", LC_MONETARY_kw }, // 884
+       { "lc-numeric", LC_NUMERIC_kw }, // 885
+       { "lc-time", LC_TIME_kw }, // 886
+       { "lowlight", LOWLIGHT }, // 887
+       { "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 888
+       { "nearest-even", NEAREST_EVEN }, // 889
+       { "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 890
+       { "none", NONE }, // 891
+       { "normal", NORMAL }, // 892
+       { "numbers", NUMBERS }, // 893
+       { "prefixed", PREFIXED }, // 894
+       { "previous", PREVIOUS }, // 895
+       { "prohibited", PROHIBITED }, // 896
+       { "relation", RELATION }, // 897
+       { "required", REQUIRED }, // 898
+       { "reverse-video", REVERSE_VIDEO }, // 899
+       { "rounding", ROUNDING }, // 900
+       { "seconds", SECONDS }, // 901
+       { "secure", SECURE }, // 902
+       { "short", SHORT }, // 903
+       { "signed", SIGNED_kw }, // 904
+       { "standard-binary", STANDARD_BINARY }, // 905
+       { "standard-decimal", STANDARD_DECIMAL }, // 906
+       { "statement", STATEMENT }, // 907
+       { "step", STEP }, // 908
+       { "structure", STRUCTURE }, // 909
+       { "toward-greater", TOWARD_GREATER }, // 910
+       { "toward-lesser", TOWARD_LESSER }, // 911
+       { "truncation", TRUNCATION }, // 912
+       { "ucs-4", UCS_4 }, // 913
+       { "underline", UNDERLINE }, // 914
+       { "unsigned", UNSIGNED_kw }, // 915
+       { "utf-16", UTF_16 }, // 916
+       { "utf-8", UTF_8 }, // 917
+       { "address", ADDRESS }, // 918
+       { "end-accept", END_ACCEPT }, // 919
+       { "end-add", END_ADD }, // 920
+       { "end-call", END_CALL }, // 921
+       { "end-compute", END_COMPUTE }, // 922
+       { "end-delete", END_DELETE }, // 923
+       { "end-display", END_DISPLAY }, // 924
+       { "end-divide", END_DIVIDE }, // 925
+       { "end-evaluate", END_EVALUATE }, // 926
+       { "end-multiply", END_MULTIPLY }, // 927
+       { "end-perform", END_PERFORM }, // 928
+       { "end-read", END_READ }, // 929
+       { "end-return", END_RETURN }, // 930
+       { "end-rewrite", END_REWRITE }, // 931
+       { "end-search", END_SEARCH }, // 932
+       { "end-start", END_START }, // 933
+       { "end-string", END_STRING }, // 934
+       { "end-subtract", END_SUBTRACT }, // 935
+       { "end-unstring", END_UNSTRING }, // 936
+       { "end-write", END_WRITE }, // 937
+       { "end-if", END_IF }, // 938
+       { "thru", THRU }, // 939
+       { "through", THRU }, // 939
+       { "or", OR }, // 940
+       { "and", AND }, // 941
+       { "not", NOT }, // 942
+       { "ne", NE }, // 943
+       { "le", LE }, // 944
+       { "ge", GE }, // 945
+       { "pow", POW }, // 946
+       { "neg", NEG }, // 947
 };
 
 // cppcheck-suppress useInitializationList
@@ -830,557 +834,561 @@ token_names = {
        "CDF-EVALUATE", // 130 (388)
        "CDF-WHEN", // 131 (389)
        "CDF-END-EVALUATE", // 132 (390)
-       "CALL-COBOL", // 133 (391)
-       "CALL-VERBATIM", // 134 (392)
-       "IF", // 135 (393)
-       "THEN", // 136 (394)
-       "ELSE", // 137 (395)
-       "SENTENCE", // 138 (396)
-       "ACCEPT", // 139 (397)
-       "ADD", // 140 (398)
-       "ALTER", // 141 (399)
-       "CALL", // 142 (400)
-       "CANCEL", // 143 (401)
-       "CLOSE", // 144 (402)
-       "COMPUTE", // 145 (403)
-       "CONTINUE", // 146 (404)
-       "DELETE", // 147 (405)
-       "DISPLAY", // 148 (406)
-       "DIVIDE", // 149 (407)
-       "EVALUATE", // 150 (408)
-       "EXIT", // 151 (409)
-       "FILLER", // 152 (410)
-       "GOBACK", // 153 (411)
-       "GOTO", // 154 (412)
-       "INITIALIZE", // 155 (413)
-       "INSPECT", // 156 (414)
-       "MERGE", // 157 (415)
-       "MOVE", // 158 (416)
-       "MULTIPLY", // 159 (417)
-       "OPEN", // 160 (418)
-       "PARAGRAPH", // 161 (419)
-       "READ", // 162 (420)
-       "RELEASE", // 163 (421)
-       "RETURN", // 164 (422)
-       "REWRITE", // 165 (423)
-       "SEARCH", // 166 (424)
-       "SET", // 167 (425)
-       "SELECT", // 168 (426)
-       "SORT", // 169 (427)
-       "SORT-MERGE", // 170 (428)
-       "STRING", // 171 (429)
-       "STOP", // 172 (430)
-       "SUBTRACT", // 173 (431)
-       "START", // 174 (432)
-       "UNSTRING", // 175 (433)
-       "WRITE", // 176 (434)
-       "WHEN", // 177 (435)
-       "ARGUMENT-NUMBER", // 178 (436)
-       "ARGUMENT-VALUE", // 179 (437)
-       "ENVIRONMENT-NAME", // 180 (438)
-       "ENVIRONMENT-VALUE", // 181 (439)
-       "ABS", // 182 (440)
-       "ACCESS", // 183 (441)
-       "ACOS", // 184 (442)
-       "ACTUAL", // 185 (443)
-       "ADVANCING", // 186 (444)
-       "AFTER", // 187 (445)
-       "ALL", // 188 (446)
-       "ALLOCATE", // 189 (447)
-       "ALPHABET", // 190 (448)
-       "ALPHABETIC", // 191 (449)
-       "ALPHABETIC-LOWER", // 192 (450)
-       "ALPHABETIC-UPPER", // 193 (451)
-       "ALPHANUMERIC", // 194 (452)
-       "ALPHANUMERIC-EDITED", // 195 (453)
-       "ALSO", // 196 (454)
-       "ALTERNATE", // 197 (455)
-       "ANNUITY", // 198 (456)
-       "ANUM", // 199 (457)
-       "ANY", // 200 (458)
-       "ANYCASE", // 201 (459)
-       "APPLY", // 202 (460)
-       "ARE", // 203 (461)
-       "AREA", // 204 (462)
-       "AREAS", // 205 (463)
-       "AS", // 206 (464)
-       "ASCENDING", // 207 (465)
-       "ACTIVATING", // 208 (466)
-       "ASIN", // 209 (467)
-       "ASSIGN", // 210 (468)
-       "AT", // 211 (469)
-       "ATAN", // 212 (470)
-       "BASED", // 213 (471)
-       "BASECONVERT", // 214 (472)
-       "BEFORE", // 215 (473)
-       "BINARY", // 216 (474)
-       "BIT", // 217 (475)
-       "BIT-OF", // 218 (476)
-       "BIT-TO-CHAR", // 219 (477)
-       "BLANK", // 220 (478)
-       "BLOCK", // 221 (479)
-       "BOOLEAN-OF-INTEGER", // 222 (480)
-       "BOTTOM", // 223 (481)
-       "BY", // 224 (482)
-       "BYTE", // 225 (483)
-       "BYTE-LENGTH", // 226 (484)
-       "CF", // 227 (485)
-       "CH", // 228 (486)
-       "CHANGED", // 229 (487)
-       "CHAR", // 230 (488)
-       "CHAR-NATIONAL", // 231 (489)
-       "CHARACTER", // 232 (490)
-       "CHARACTERS", // 233 (491)
-       "CHECKING", // 234 (492)
-       "CLASS", // 235 (493)
-       "COBOL", // 236 (494)
-       "CODE", // 237 (495)
-       "CODE-SET", // 238 (496)
-       "COLLATING", // 239 (497)
-       "COLUMN", // 240 (498)
-       "COMBINED-DATETIME", // 241 (499)
-       "COMMA", // 242 (500)
-       "COMMAND-LINE", // 243 (501)
-       "COMMAND-LINE-COUNT", // 244 (502)
-       "COMMIT", // 245 (503)
-       "COMMON", // 246 (504)
-       "CONCAT", // 247 (505)
-       "CONDITION", // 248 (506)
-       "CONFIGURATION", // 249 (507)
-       "CONTAINS", // 250 (508)
-       "CONTENT", // 251 (509)
-       "CONTROL", // 252 (510)
-       "CONTROLS", // 253 (511)
-       "CONVERT", // 254 (512)
-       "CONVERTING", // 255 (513)
-       "CORRESPONDING", // 256 (514)
-       "COS", // 257 (515)
-       "COUNT", // 258 (516)
-       "CURRENCY", // 259 (517)
-       "CURRENT", // 260 (518)
-       "CURRENT-DATE", // 261 (519)
-       "DATA", // 262 (520)
-       "DATE", // 263 (521)
-       "DATE-COMPILED", // 264 (522)
-       "DATE-OF-INTEGER", // 265 (523)
-       "DATE-TO-YYYYMMDD", // 266 (524)
-       "DATE-WRITTEN", // 267 (525)
-       "DAY", // 268 (526)
-       "DAY-OF-INTEGER", // 269 (527)
-       "DAY-OF-WEEK", // 270 (528)
-       "DAY-TO-YYYYDDD", // 271 (529)
-       "DBCS", // 272 (530)
-       "DE", // 273 (531)
-       "DEBUGGING", // 274 (532)
-       "DECIMAL-POINT", // 275 (533)
-       "DECLARATIVES", // 276 (534)
-       "DEFAULT", // 277 (535)
-       "DELIMITED", // 278 (536)
-       "DELIMITER", // 279 (537)
-       "DEPENDING", // 280 (538)
-       "DESCENDING", // 281 (539)
-       "DETAIL", // 282 (540)
-       "DIRECT", // 283 (541)
-       "DIRECT-ACCESS", // 284 (542)
-       "DOWN", // 285 (543)
-       "DUPLICATES", // 286 (544)
-       "DYNAMIC", // 287 (545)
-       "E", // 288 (546)
-       "EBCDIC", // 289 (547)
-       "EC", // 290 (548)
-       "EGCS", // 291 (549)
-       "ENTRY", // 292 (550)
-       "ENVIRONMENT", // 293 (551)
-       "EQUAL", // 294 (552)
-       "EVERY", // 295 (553)
-       "EXAMINE", // 296 (554)
-       "EXHIBIT", // 297 (555)
-       "EXP", // 298 (556)
-       "EXP10", // 299 (557)
-       "EXTEND", // 300 (558)
-       "EXTERNAL", // 301 (559)
-       "EXCEPTION-FILE", // 302 (560)
-       "EXCEPTION-FILE-N", // 303 (561)
-       "EXCEPTION-LOCATION", // 304 (562)
-       "EXCEPTION-LOCATION-N", // 305 (563)
-       "EXCEPTION-STATEMENT", // 306 (564)
-       "EXCEPTION-STATUS", // 307 (565)
-       "FACTORIAL", // 308 (566)
-       "FALSE", // 309 (567)
-       "FD", // 310 (568)
-       "FILE-CONTROL", // 311 (569)
-       "FILE", // 312 (570)
-       "FILE-LIMIT", // 313 (571)
-       "FINAL", // 314 (572)
-       "FINALLY", // 315 (573)
-       "FIND-STRING", // 316 (574)
-       "FIRST", // 317 (575)
-       "FIXED", // 318 (576)
-       "FOOTING", // 319 (577)
-       "FOR", // 320 (578)
-       "FORMATTED-CURRENT-DATE", // 321 (579)
-       "FORMATTED-DATE", // 322 (580)
-       "FORMATTED-DATETIME", // 323 (581)
-       "FORMATTED-TIME", // 324 (582)
-       "FORM-OVERFLOW", // 325 (583)
-       "FREE", // 326 (584)
-       "FRACTION-PART", // 327 (585)
-       "FROM", // 328 (586)
-       "FUNCTION", // 329 (587)
-       "GENERATE", // 330 (588)
-       "GIVING", // 331 (589)
-       "GLOBAL", // 332 (590)
-       "GO", // 333 (591)
-       "GROUP", // 334 (592)
-       "HEADING", // 335 (593)
-       "HEX", // 336 (594)
-       "HEX-OF", // 337 (595)
-       "HEX-TO-CHAR", // 338 (596)
-       "HIGH-VALUES", // 339 (597)
-       "HIGHEST-ALGEBRAIC", // 340 (598)
-       "HOLD", // 341 (599)
-       "IBM-360", // 342 (600)
-       "IN", // 343 (601)
-       "INCLUDE", // 344 (602)
-       "INDEX", // 345 (603)
-       "INDEXED", // 346 (604)
-       "INDICATE", // 347 (605)
-       "INITIAL", // 348 (606)
-       "INITIATE", // 349 (607)
-       "INPUT", // 350 (608)
-       "INSTALLATION", // 351 (609)
-       "INTERFACE", // 352 (610)
-       "INTEGER", // 353 (611)
-       "INTEGER-OF-BOOLEAN", // 354 (612)
-       "INTEGER-OF-DATE", // 355 (613)
-       "INTEGER-OF-DAY", // 356 (614)
-       "INTEGER-OF-FORMATTED-DATE", // 357 (615)
-       "INTEGER-PART", // 358 (616)
-       "INTO", // 359 (617)
-       "INTRINSIC", // 360 (618)
-       "INVOKE", // 361 (619)
-       "I-O", // 362 (620)
-       "I-O-CONTROL", // 363 (621)
-       "IS", // 364 (622)
-       "ISNT", // 365 (623)
-       "KANJI", // 366 (624)
-       "KEY", // 367 (625)
-       "LABEL", // 368 (626)
-       "LAST", // 369 (627)
-       "LEADING", // 370 (628)
-       "LEFT", // 371 (629)
-       "LENGTH", // 372 (630)
-       "LENGTH-OF", // 373 (631)
-       "LIMIT", // 374 (632)
-       "LIMITS", // 375 (633)
-       "LINE", // 376 (634)
-       "LINES", // 377 (635)
-       "LINE-COUNTER", // 378 (636)
-       "LINAGE", // 379 (637)
-       "LINKAGE", // 380 (638)
-       "LOCALE", // 381 (639)
-       "LOCALE-COMPARE", // 382 (640)
-       "LOCALE-DATE", // 383 (641)
-       "LOCALE-TIME", // 384 (642)
-       "LOCALE-TIME-FROM-SECONDS", // 385 (643)
-       "LOCAL-STORAGE", // 386 (644)
-       "LOCATION", // 387 (645)
-       "LOCK", // 388 (646)
-       "LOCK-ON", // 389 (647)
-       "LOG", // 390 (648)
-       "LOG10", // 391 (649)
-       "LOWER-CASE", // 392 (650)
-       "LOW-VALUES", // 393 (651)
-       "LOWEST-ALGEBRAIC", // 394 (652)
-       "LPAREN", // 395 (653)
-       "MANUAL", // 396 (654)
-       "MAXX", // 397 (655)
-       "MEAN", // 398 (656)
-       "MEDIAN", // 399 (657)
-       "MIDRANGE", // 400 (658)
-       "MINN", // 401 (659)
-       "MULTIPLE", // 402 (660)
-       "MOD", // 403 (661)
-       "MODE", // 404 (662)
-       "MODULE-NAME", // 405 (663)
-       "NAMED", // 406 (664)
-       "NAT", // 407 (665)
-       "NATIONAL", // 408 (666)
-       "NATIONAL-EDITED", // 409 (667)
-       "NATIONAL-OF", // 410 (668)
-       "NATIVE", // 411 (669)
-       "NESTED", // 412 (670)
-       "NEXT", // 413 (671)
-       "NO", // 414 (672)
-       "NOTE", // 415 (673)
-       "NULLS", // 416 (674)
-       "NULLPTR", // 417 (675)
-       "NUMERIC", // 418 (676)
-       "NUMERIC-EDITED", // 419 (677)
-       "NUMVAL", // 420 (678)
-       "NUMVAL-C", // 421 (679)
-       "NUMVAL-F", // 422 (680)
-       "OCCURS", // 423 (681)
-       "OF", // 424 (682)
-       "OFF", // 425 (683)
-       "OMITTED", // 426 (684)
-       "ON", // 427 (685)
-       "ONLY", // 428 (686)
-       "OPTIONAL", // 429 (687)
-       "OPTIONS", // 430 (688)
-       "ORD", // 431 (689)
-       "ORDER", // 432 (690)
-       "ORD-MAX", // 433 (691)
-       "ORD-MIN", // 434 (692)
-       "ORGANIZATION", // 435 (693)
-       "OTHER", // 436 (694)
-       "OTHERWISE", // 437 (695)
-       "OUTPUT", // 438 (696)
-       "PACKED-DECIMAL", // 439 (697)
-       "PADDING", // 440 (698)
-       "PAGE", // 441 (699)
-       "PAGE-COUNTER", // 442 (700)
-       "PF", // 443 (701)
-       "PH", // 444 (702)
-       "PI", // 445 (703)
-       "PIC", // 446 (704)
-       "PICTURE", // 447 (705)
-       "PLUS", // 448 (706)
-       "PRESENT-VALUE", // 449 (707)
-       "PRINT-SWITCH", // 450 (708)
-       "PROCEDURE", // 451 (709)
-       "PROCEDURES", // 452 (710)
-       "PROCEED", // 453 (711)
-       "PROCESS", // 454 (712)
-       "PROGRAM-ID", // 455 (713)
-       "PROGRAM", // 456 (714)
-       "PROPERTY", // 457 (715)
-       "PROTOTYPE", // 458 (716)
-       "PSEUDOTEXT", // 459 (717)
-       "QUOTES", // 460 (718)
-       "RANDOM", // 461 (719)
-       "RANDOM-SEED", // 462 (720)
-       "RANGE", // 463 (721)
-       "RAISE", // 464 (722)
-       "RAISING", // 465 (723)
-       "RD", // 466 (724)
-       "RECORD", // 467 (725)
-       "RECORDING", // 468 (726)
-       "RECORDS", // 469 (727)
-       "RECURSIVE", // 470 (728)
-       "REDEFINES", // 471 (729)
-       "REEL", // 472 (730)
-       "REFERENCE", // 473 (731)
-       "RELATIVE", // 474 (732)
-       "REM", // 475 (733)
-       "REMAINDER", // 476 (734)
-       "REMARKS", // 477 (735)
-       "REMOVAL", // 478 (736)
-       "RENAMES", // 479 (737)
-       "REPLACE", // 480 (738)
-       "REPLACING", // 481 (739)
-       "REPORT", // 482 (740)
-       "REPORTING", // 483 (741)
-       "REPORTS", // 484 (742)
-       "REPOSITORY", // 485 (743)
-       "RERUN", // 486 (744)
-       "RESERVE", // 487 (745)
-       "RESTRICTED", // 488 (746)
-       "RESUME", // 489 (747)
-       "REVERSE", // 490 (748)
-       "REVERSED", // 491 (749)
-       "REWIND", // 492 (750)
-       "RF", // 493 (751)
-       "RH", // 494 (752)
-       "RIGHT", // 495 (753)
-       "ROUNDED", // 496 (754)
-       "RUN", // 497 (755)
-       "SAME", // 498 (756)
-       "SCREEN", // 499 (757)
-       "SD", // 500 (758)
-       "SECONDS-FROM-FORMATTED-TIME", // 501 (759)
-       "SECONDS-PAST-MIDNIGHT", // 502 (760)
-       "SECURITY", // 503 (761)
-       "SEPARATE", // 504 (762)
-       "SEQUENCE", // 505 (763)
-       "SEQUENTIAL", // 506 (764)
-       "SHARING", // 507 (765)
-       "SIMPLE-EXIT", // 508 (766)
-       "SIGN", // 509 (767)
-       "SIN", // 510 (768)
-       "SIZE", // 511 (769)
-       "SMALLEST-ALGEBRAIC", // 512 (770)
-       "SOURCE", // 513 (771)
-       "SOURCE-COMPUTER", // 514 (772)
-       "SPECIAL-NAMES", // 515 (773)
-       "SQRT", // 516 (774)
-       "STACK", // 517 (775)
-       "STANDARD", // 518 (776)
-       "STANDARD-1", // 519 (777)
-       "STANDARD-DEVIATION", // 520 (778)
-       "STANDARD-COMPARE", // 521 (779)
-       "STATUS", // 522 (780)
-       "STRONG", // 523 (781)
-       "SUBSTITUTE", // 524 (782)
-       "SUM", // 525 (783)
-       "SYMBOL", // 526 (784)
-       "SYMBOLIC", // 527 (785)
-       "SYNCHRONIZED", // 528 (786)
-       "TALLY", // 529 (787)
-       "TALLYING", // 530 (788)
-       "TAN", // 531 (789)
-       "TERMINATE", // 532 (790)
-       "TEST", // 533 (791)
-       "TEST-DATE-YYYYMMDD", // 534 (792)
-       "TEST-DAY-YYYYDDD", // 535 (793)
-       "TEST-FORMATTED-DATETIME", // 536 (794)
-       "TEST-NUMVAL", // 537 (795)
-       "TEST-NUMVAL-C", // 538 (796)
-       "TEST-NUMVAL-F", // 539 (797)
-       "THAN", // 540 (798)
-       "TIME", // 541 (799)
-       "TIMES", // 542 (800)
-       "TO", // 543 (801)
-       "TOP", // 544 (802)
-       "TOP-LEVEL", // 545 (803)
-       "TRACKS", // 546 (804)
-       "TRACK-AREA", // 547 (805)
-       "TRAILING", // 548 (806)
-       "TRANSFORM", // 549 (807)
-       "TRIM", // 550 (808)
-       "TRUE", // 551 (809)
-       "TRY", // 552 (810)
-       "TURN", // 553 (811)
-       "TYPE", // 554 (812)
-       "TYPEDEF", // 555 (813)
-       "ULENGTH", // 556 (814)
-       "UNBOUNDED", // 557 (815)
-       "UNIT", // 558 (816)
-       "UNITS", // 559 (817)
-       "UNIT-RECORD", // 560 (818)
-       "UNTIL", // 561 (819)
-       "UP", // 562 (820)
-       "UPON", // 563 (821)
-       "UPOS", // 564 (822)
-       "UPPER-CASE", // 565 (823)
-       "USAGE", // 566 (824)
-       "USING", // 567 (825)
-       "USUBSTR", // 568 (826)
-       "USUPPLEMENTARY", // 569 (827)
-       "UTILITY", // 570 (828)
-       "UUID4", // 571 (829)
-       "UVALID", // 572 (830)
-       "UWIDTH", // 573 (831)
-       "VALUE", // 574 (832)
-       "VARIANCE", // 575 (833)
-       "VARYING", // 576 (834)
-       "VOLATILE", // 577 (835)
-       "WHEN-COMPILED", // 578 (836)
-       "WITH", // 579 (837)
-       "WORKING-STORAGE", // 580 (838)
-       "XML", // 581 (839)
-       "XMLGENERATE", // 582 (840)
-       "XMLPARSE", // 583 (841)
-       "YEAR-TO-YYYY", // 584 (842)
-       "YYYYDDD", // 585 (843)
-       "YYYYMMDD", // 586 (844)
-       "ARITHMETIC", // 587 (845)
-       "ATTRIBUTE", // 588 (846)
-       "AUTO", // 589 (847)
-       "AUTOMATIC", // 590 (848)
-       "AWAY-FROM-ZERO", // 591 (849)
-       "BACKGROUND-COLOR", // 592 (850)
-       "BELL", // 593 (851)
-       "BINARY-ENCODING", // 594 (852)
-       "BLINK", // 595 (853)
-       "CAPACITY", // 596 (854)
-       "CENTER", // 597 (855)
-       "CLASSIFICATION", // 598 (856)
-       "CYCLE", // 599 (857)
-       "DECIMAL-ENCODING", // 600 (858)
-       "ENTRY-CONVENTION", // 601 (859)
-       "EOL", // 602 (860)
-       "EOS", // 603 (861)
-       "ERASE", // 604 (862)
-       "EXPANDS", // 605 (863)
-       "FLOAT-BINARY", // 606 (864)
-       "FLOAT-DECIMAL", // 607 (865)
-       "FOREGROUND-COLOR", // 608 (866)
-       "FOREVER", // 609 (867)
-       "FULL", // 610 (868)
-       "HIGHLIGHT", // 611 (869)
-       "HIGH-ORDER-LEFT", // 612 (870)
-       "HIGH-ORDER-RIGHT", // 613 (871)
-       "IGNORING", // 614 (872)
-       "IMPLEMENTS", // 615 (873)
-       "INITIALIZED", // 616 (874)
-       "INTERMEDIATE", // 617 (875)
-       "LC-ALL", // 618 (876)
-       "LC-COLLATE", // 619 (877)
-       "LC-CTYPE", // 620 (878)
-       "LC-MESSAGES", // 621 (879)
-       "LC-MONETARY", // 622 (880)
-       "LC-NUMERIC", // 623 (881)
-       "LC-TIME", // 624 (882)
-       "LOWLIGHT", // 625 (883)
-       "NEAREST-AWAY-FROM-ZERO", // 626 (884)
-       "NEAREST-EVEN", // 627 (885)
-       "NEAREST-TOWARD-ZERO", // 628 (886)
-       "NONE", // 629 (887)
-       "NORMAL", // 630 (888)
-       "NUMBERS", // 631 (889)
-       "PREFIXED", // 632 (890)
-       "PREVIOUS", // 633 (891)
-       "PROHIBITED", // 634 (892)
-       "RELATION", // 635 (893)
-       "REQUIRED", // 636 (894)
-       "REVERSE-VIDEO", // 637 (895)
-       "ROUNDING", // 638 (896)
-       "SECONDS", // 639 (897)
-       "SECURE", // 640 (898)
-       "SHORT", // 641 (899)
-       "SIGNED", // 642 (900)
-       "STANDARD-BINARY", // 643 (901)
-       "STANDARD-DECIMAL", // 644 (902)
-       "STATEMENT", // 645 (903)
-       "STEP", // 646 (904)
-       "STRUCTURE", // 647 (905)
-       "TOWARD-GREATER", // 648 (906)
-       "TOWARD-LESSER", // 649 (907)
-       "TRUNCATION", // 650 (908)
-       "UCS-4", // 651 (909)
-       "UNDERLINE", // 652 (910)
-       "UNSIGNED", // 653 (911)
-       "UTF-16", // 654 (912)
-       "UTF-8", // 655 (913)
-       "ADDRESS", // 656 (914)
-       "END-ACCEPT", // 657 (915)
-       "END-ADD", // 658 (916)
-       "END-CALL", // 659 (917)
-       "END-COMPUTE", // 660 (918)
-       "END-DELETE", // 661 (919)
-       "END-DISPLAY", // 662 (920)
-       "END-DIVIDE", // 663 (921)
-       "END-EVALUATE", // 664 (922)
-       "END-MULTIPLY", // 665 (923)
-       "END-PERFORM", // 666 (924)
-       "END-READ", // 667 (925)
-       "END-RETURN", // 668 (926)
-       "END-REWRITE", // 669 (927)
-       "END-SEARCH", // 670 (928)
-       "END-START", // 671 (929)
-       "END-STRING", // 672 (930)
-       "END-SUBTRACT", // 673 (931)
-       "END-UNSTRING", // 674 (932)
-       "END-WRITE", // 675 (933)
-       "END-IF", // 676 (934)
-       "THRU", // 677 (935)
-       "OR", // 678 (936)
-       "AND", // 679 (937)
-       "NOT", // 680 (938)
-       "NE", // 681 (939)
-       "LE", // 682 (940)
-       "GE", // 683 (941)
-       "POW", // 684 (942)
-       "NEG", // 685 (943)
+       "CALL-CONVENTION", // 133 (391)
+       "CALL-COBOL", // 134 (392)
+       "CALL-VERBATIM", // 135 (393)
+       "CDF-PUSH", // 136 (394)
+       "CDF-POP", // 137 (395)
+       "SOURCE-FORMAT", // 138 (396)
+       "IF", // 139 (397)
+       "THEN", // 140 (398)
+       "ELSE", // 141 (399)
+       "SENTENCE", // 142 (400)
+       "ACCEPT", // 143 (401)
+       "ADD", // 144 (402)
+       "ALTER", // 145 (403)
+       "CALL", // 146 (404)
+       "CANCEL", // 147 (405)
+       "CLOSE", // 148 (406)
+       "COMPUTE", // 149 (407)
+       "CONTINUE", // 150 (408)
+       "DELETE", // 151 (409)
+       "DISPLAY", // 152 (410)
+       "DIVIDE", // 153 (411)
+       "EVALUATE", // 154 (412)
+       "EXIT", // 155 (413)
+       "FILLER", // 156 (414)
+       "GOBACK", // 157 (415)
+       "GOTO", // 158 (416)
+       "INITIALIZE", // 159 (417)
+       "INSPECT", // 160 (418)
+       "MERGE", // 161 (419)
+       "MOVE", // 162 (420)
+       "MULTIPLY", // 163 (421)
+       "OPEN", // 164 (422)
+       "PARAGRAPH", // 165 (423)
+       "READ", // 166 (424)
+       "RELEASE", // 167 (425)
+       "RETURN", // 168 (426)
+       "REWRITE", // 169 (427)
+       "SEARCH", // 170 (428)
+       "SET", // 171 (429)
+       "SELECT", // 172 (430)
+       "SORT", // 173 (431)
+       "SORT-MERGE", // 174 (432)
+       "STRING", // 175 (433)
+       "STOP", // 176 (434)
+       "SUBTRACT", // 177 (435)
+       "START", // 178 (436)
+       "UNSTRING", // 179 (437)
+       "WRITE", // 180 (438)
+       "WHEN", // 181 (439)
+       "ARGUMENT-NUMBER", // 182 (440)
+       "ARGUMENT-VALUE", // 183 (441)
+       "ENVIRONMENT-NAME", // 184 (442)
+       "ENVIRONMENT-VALUE", // 185 (443)
+       "ABS", // 186 (444)
+       "ACCESS", // 187 (445)
+       "ACOS", // 188 (446)
+       "ACTUAL", // 189 (447)
+       "ADVANCING", // 190 (448)
+       "AFTER", // 191 (449)
+       "ALL", // 192 (450)
+       "ALLOCATE", // 193 (451)
+       "ALPHABET", // 194 (452)
+       "ALPHABETIC", // 195 (453)
+       "ALPHABETIC-LOWER", // 196 (454)
+       "ALPHABETIC-UPPER", // 197 (455)
+       "ALPHANUMERIC", // 198 (456)
+       "ALPHANUMERIC-EDITED", // 199 (457)
+       "ALSO", // 200 (458)
+       "ALTERNATE", // 201 (459)
+       "ANNUITY", // 202 (460)
+       "ANUM", // 203 (461)
+       "ANY", // 204 (462)
+       "ANYCASE", // 205 (463)
+       "APPLY", // 206 (464)
+       "ARE", // 207 (465)
+       "AREA", // 208 (466)
+       "AREAS", // 209 (467)
+       "AS", // 210 (468)
+       "ASCENDING", // 211 (469)
+       "ACTIVATING", // 212 (470)
+       "ASIN", // 213 (471)
+       "ASSIGN", // 214 (472)
+       "AT", // 215 (473)
+       "ATAN", // 216 (474)
+       "BASED", // 217 (475)
+       "BASECONVERT", // 218 (476)
+       "BEFORE", // 219 (477)
+       "BINARY", // 220 (478)
+       "BIT", // 221 (479)
+       "BIT-OF", // 222 (480)
+       "BIT-TO-CHAR", // 223 (481)
+       "BLANK", // 224 (482)
+       "BLOCK", // 225 (483)
+       "BOOLEAN-OF-INTEGER", // 226 (484)
+       "BOTTOM", // 227 (485)
+       "BY", // 228 (486)
+       "BYTE", // 229 (487)
+       "BYTE-LENGTH", // 230 (488)
+       "CF", // 231 (489)
+       "CH", // 232 (490)
+       "CHANGED", // 233 (491)
+       "CHAR", // 234 (492)
+       "CHAR-NATIONAL", // 235 (493)
+       "CHARACTER", // 236 (494)
+       "CHARACTERS", // 237 (495)
+       "CHECKING", // 238 (496)
+       "CLASS", // 239 (497)
+       "COBOL", // 240 (498)
+       "CODE", // 241 (499)
+       "CODE-SET", // 242 (500)
+       "COLLATING", // 243 (501)
+       "COLUMN", // 244 (502)
+       "COMBINED-DATETIME", // 245 (503)
+       "COMMA", // 246 (504)
+       "COMMAND-LINE", // 247 (505)
+       "COMMAND-LINE-COUNT", // 248 (506)
+       "COMMIT", // 249 (507)
+       "COMMON", // 250 (508)
+       "CONCAT", // 251 (509)
+       "CONDITION", // 252 (510)
+       "CONFIGURATION", // 253 (511)
+       "CONTAINS", // 254 (512)
+       "CONTENT", // 255 (513)
+       "CONTROL", // 256 (514)
+       "CONTROLS", // 257 (515)
+       "CONVERT", // 258 (516)
+       "CONVERTING", // 259 (517)
+       "CORRESPONDING", // 260 (518)
+       "COS", // 261 (519)
+       "COUNT", // 262 (520)
+       "CURRENCY", // 263 (521)
+       "CURRENT", // 264 (522)
+       "CURRENT-DATE", // 265 (523)
+       "DATA", // 266 (524)
+       "DATE", // 267 (525)
+       "DATE-COMPILED", // 268 (526)
+       "DATE-OF-INTEGER", // 269 (527)
+       "DATE-TO-YYYYMMDD", // 270 (528)
+       "DATE-WRITTEN", // 271 (529)
+       "DAY", // 272 (530)
+       "DAY-OF-INTEGER", // 273 (531)
+       "DAY-OF-WEEK", // 274 (532)
+       "DAY-TO-YYYYDDD", // 275 (533)
+       "DBCS", // 276 (534)
+       "DE", // 277 (535)
+       "DEBUGGING", // 278 (536)
+       "DECIMAL-POINT", // 279 (537)
+       "DECLARATIVES", // 280 (538)
+       "DEFAULT", // 281 (539)
+       "DELIMITED", // 282 (540)
+       "DELIMITER", // 283 (541)
+       "DEPENDING", // 284 (542)
+       "DESCENDING", // 285 (543)
+       "DETAIL", // 286 (544)
+       "DIRECT", // 287 (545)
+       "DIRECT-ACCESS", // 288 (546)
+       "DOWN", // 289 (547)
+       "DUPLICATES", // 290 (548)
+       "DYNAMIC", // 291 (549)
+       "E", // 292 (550)
+       "EBCDIC", // 293 (551)
+       "EC", // 294 (552)
+       "EGCS", // 295 (553)
+       "ENTRY", // 296 (554)
+       "ENVIRONMENT", // 297 (555)
+       "EQUAL", // 298 (556)
+       "EVERY", // 299 (557)
+       "EXAMINE", // 300 (558)
+       "EXHIBIT", // 301 (559)
+       "EXP", // 302 (560)
+       "EXP10", // 303 (561)
+       "EXTEND", // 304 (562)
+       "EXTERNAL", // 305 (563)
+       "EXCEPTION-FILE", // 306 (564)
+       "EXCEPTION-FILE-N", // 307 (565)
+       "EXCEPTION-LOCATION", // 308 (566)
+       "EXCEPTION-LOCATION-N", // 309 (567)
+       "EXCEPTION-STATEMENT", // 310 (568)
+       "EXCEPTION-STATUS", // 311 (569)
+       "FACTORIAL", // 312 (570)
+       "FALSE", // 313 (571)
+       "FD", // 314 (572)
+       "FILE-CONTROL", // 315 (573)
+       "FILE", // 316 (574)
+       "FILE-LIMIT", // 317 (575)
+       "FINAL", // 318 (576)
+       "FINALLY", // 319 (577)
+       "FIND-STRING", // 320 (578)
+       "FIRST", // 321 (579)
+       "FIXED", // 322 (580)
+       "FOOTING", // 323 (581)
+       "FOR", // 324 (582)
+       "FORMATTED-CURRENT-DATE", // 325 (583)
+       "FORMATTED-DATE", // 326 (584)
+       "FORMATTED-DATETIME", // 327 (585)
+       "FORMATTED-TIME", // 328 (586)
+       "FORM-OVERFLOW", // 329 (587)
+       "FREE", // 330 (588)
+       "FRACTION-PART", // 331 (589)
+       "FROM", // 332 (590)
+       "FUNCTION", // 333 (591)
+       "GENERATE", // 334 (592)
+       "GIVING", // 335 (593)
+       "GLOBAL", // 336 (594)
+       "GO", // 337 (595)
+       "GROUP", // 338 (596)
+       "HEADING", // 339 (597)
+       "HEX", // 340 (598)
+       "HEX-OF", // 341 (599)
+       "HEX-TO-CHAR", // 342 (600)
+       "HIGH-VALUES", // 343 (601)
+       "HIGHEST-ALGEBRAIC", // 344 (602)
+       "HOLD", // 345 (603)
+       "IBM-360", // 346 (604)
+       "IN", // 347 (605)
+       "INCLUDE", // 348 (606)
+       "INDEX", // 349 (607)
+       "INDEXED", // 350 (608)
+       "INDICATE", // 351 (609)
+       "INITIAL", // 352 (610)
+       "INITIATE", // 353 (611)
+       "INPUT", // 354 (612)
+       "INSTALLATION", // 355 (613)
+       "INTERFACE", // 356 (614)
+       "INTEGER", // 357 (615)
+       "INTEGER-OF-BOOLEAN", // 358 (616)
+       "INTEGER-OF-DATE", // 359 (617)
+       "INTEGER-OF-DAY", // 360 (618)
+       "INTEGER-OF-FORMATTED-DATE", // 361 (619)
+       "INTEGER-PART", // 362 (620)
+       "INTO", // 363 (621)
+       "INTRINSIC", // 364 (622)
+       "INVOKE", // 365 (623)
+       "I-O", // 366 (624)
+       "I-O-CONTROL", // 367 (625)
+       "IS", // 368 (626)
+       "ISNT", // 369 (627)
+       "KANJI", // 370 (628)
+       "KEY", // 371 (629)
+       "LABEL", // 372 (630)
+       "LAST", // 373 (631)
+       "LEADING", // 374 (632)
+       "LEFT", // 375 (633)
+       "LENGTH", // 376 (634)
+       "LENGTH-OF", // 377 (635)
+       "LIMIT", // 378 (636)
+       "LIMITS", // 379 (637)
+       "LINE", // 380 (638)
+       "LINES", // 381 (639)
+       "LINE-COUNTER", // 382 (640)
+       "LINAGE", // 383 (641)
+       "LINKAGE", // 384 (642)
+       "LOCALE", // 385 (643)
+       "LOCALE-COMPARE", // 386 (644)
+       "LOCALE-DATE", // 387 (645)
+       "LOCALE-TIME", // 388 (646)
+       "LOCALE-TIME-FROM-SECONDS", // 389 (647)
+       "LOCAL-STORAGE", // 390 (648)
+       "LOCATION", // 391 (649)
+       "LOCK", // 392 (650)
+       "LOCK-ON", // 393 (651)
+       "LOG", // 394 (652)
+       "LOG10", // 395 (653)
+       "LOWER-CASE", // 396 (654)
+       "LOW-VALUES", // 397 (655)
+       "LOWEST-ALGEBRAIC", // 398 (656)
+       "LPAREN", // 399 (657)
+       "MANUAL", // 400 (658)
+       "MAXX", // 401 (659)
+       "MEAN", // 402 (660)
+       "MEDIAN", // 403 (661)
+       "MIDRANGE", // 404 (662)
+       "MINN", // 405 (663)
+       "MULTIPLE", // 406 (664)
+       "MOD", // 407 (665)
+       "MODE", // 408 (666)
+       "MODULE-NAME", // 409 (667)
+       "NAMED", // 410 (668)
+       "NAT", // 411 (669)
+       "NATIONAL", // 412 (670)
+       "NATIONAL-EDITED", // 413 (671)
+       "NATIONAL-OF", // 414 (672)
+       "NATIVE", // 415 (673)
+       "NESTED", // 416 (674)
+       "NEXT", // 417 (675)
+       "NO", // 418 (676)
+       "NOTE", // 419 (677)
+       "NULLS", // 420 (678)
+       "NULLPTR", // 421 (679)
+       "NUMERIC", // 422 (680)
+       "NUMERIC-EDITED", // 423 (681)
+       "NUMVAL", // 424 (682)
+       "NUMVAL-C", // 425 (683)
+       "NUMVAL-F", // 426 (684)
+       "OCCURS", // 427 (685)
+       "OF", // 428 (686)
+       "OFF", // 429 (687)
+       "OMITTED", // 430 (688)
+       "ON", // 431 (689)
+       "ONLY", // 432 (690)
+       "OPTIONAL", // 433 (691)
+       "OPTIONS", // 434 (692)
+       "ORD", // 435 (693)
+       "ORDER", // 436 (694)
+       "ORD-MAX", // 437 (695)
+       "ORD-MIN", // 438 (696)
+       "ORGANIZATION", // 439 (697)
+       "OTHER", // 440 (698)
+       "OTHERWISE", // 441 (699)
+       "OUTPUT", // 442 (700)
+       "PACKED-DECIMAL", // 443 (701)
+       "PADDING", // 444 (702)
+       "PAGE", // 445 (703)
+       "PAGE-COUNTER", // 446 (704)
+       "PF", // 447 (705)
+       "PH", // 448 (706)
+       "PI", // 449 (707)
+       "PIC", // 450 (708)
+       "PICTURE", // 451 (709)
+       "PLUS", // 452 (710)
+       "PRESENT-VALUE", // 453 (711)
+       "PRINT-SWITCH", // 454 (712)
+       "PROCEDURE", // 455 (713)
+       "PROCEDURES", // 456 (714)
+       "PROCEED", // 457 (715)
+       "PROCESS", // 458 (716)
+       "PROGRAM-ID", // 459 (717)
+       "PROGRAM", // 460 (718)
+       "PROPERTY", // 461 (719)
+       "PROTOTYPE", // 462 (720)
+       "PSEUDOTEXT", // 463 (721)
+       "QUOTES", // 464 (722)
+       "RANDOM", // 465 (723)
+       "RANDOM-SEED", // 466 (724)
+       "RANGE", // 467 (725)
+       "RAISE", // 468 (726)
+       "RAISING", // 469 (727)
+       "RD", // 470 (728)
+       "RECORD", // 471 (729)
+       "RECORDING", // 472 (730)
+       "RECORDS", // 473 (731)
+       "RECURSIVE", // 474 (732)
+       "REDEFINES", // 475 (733)
+       "REEL", // 476 (734)
+       "REFERENCE", // 477 (735)
+       "RELATIVE", // 478 (736)
+       "REM", // 479 (737)
+       "REMAINDER", // 480 (738)
+       "REMARKS", // 481 (739)
+       "REMOVAL", // 482 (740)
+       "RENAMES", // 483 (741)
+       "REPLACE", // 484 (742)
+       "REPLACING", // 485 (743)
+       "REPORT", // 486 (744)
+       "REPORTING", // 487 (745)
+       "REPORTS", // 488 (746)
+       "REPOSITORY", // 489 (747)
+       "RERUN", // 490 (748)
+       "RESERVE", // 491 (749)
+       "RESTRICTED", // 492 (750)
+       "RESUME", // 493 (751)
+       "REVERSE", // 494 (752)
+       "REVERSED", // 495 (753)
+       "REWIND", // 496 (754)
+       "RF", // 497 (755)
+       "RH", // 498 (756)
+       "RIGHT", // 499 (757)
+       "ROUNDED", // 500 (758)
+       "RUN", // 501 (759)
+       "SAME", // 502 (760)
+       "SCREEN", // 503 (761)
+       "SD", // 504 (762)
+       "SECONDS-FROM-FORMATTED-TIME", // 505 (763)
+       "SECONDS-PAST-MIDNIGHT", // 506 (764)
+       "SECURITY", // 507 (765)
+       "SEPARATE", // 508 (766)
+       "SEQUENCE", // 509 (767)
+       "SEQUENTIAL", // 510 (768)
+       "SHARING", // 511 (769)
+       "SIMPLE-EXIT", // 512 (770)
+       "SIGN", // 513 (771)
+       "SIN", // 514 (772)
+       "SIZE", // 515 (773)
+       "SMALLEST-ALGEBRAIC", // 516 (774)
+       "SOURCE", // 517 (775)
+       "SOURCE-COMPUTER", // 518 (776)
+       "SPECIAL-NAMES", // 519 (777)
+       "SQRT", // 520 (778)
+       "STACK", // 521 (779)
+       "STANDARD", // 522 (780)
+       "STANDARD-1", // 523 (781)
+       "STANDARD-DEVIATION", // 524 (782)
+       "STANDARD-COMPARE", // 525 (783)
+       "STATUS", // 526 (784)
+       "STRONG", // 527 (785)
+       "SUBSTITUTE", // 528 (786)
+       "SUM", // 529 (787)
+       "SYMBOL", // 530 (788)
+       "SYMBOLIC", // 531 (789)
+       "SYNCHRONIZED", // 532 (790)
+       "TALLY", // 533 (791)
+       "TALLYING", // 534 (792)
+       "TAN", // 535 (793)
+       "TERMINATE", // 536 (794)
+       "TEST", // 537 (795)
+       "TEST-DATE-YYYYMMDD", // 538 (796)
+       "TEST-DAY-YYYYDDD", // 539 (797)
+       "TEST-FORMATTED-DATETIME", // 540 (798)
+       "TEST-NUMVAL", // 541 (799)
+       "TEST-NUMVAL-C", // 542 (800)
+       "TEST-NUMVAL-F", // 543 (801)
+       "THAN", // 544 (802)
+       "TIME", // 545 (803)
+       "TIMES", // 546 (804)
+       "TO", // 547 (805)
+       "TOP", // 548 (806)
+       "TOP-LEVEL", // 549 (807)
+       "TRACKS", // 550 (808)
+       "TRACK-AREA", // 551 (809)
+       "TRAILING", // 552 (810)
+       "TRANSFORM", // 553 (811)
+       "TRIM", // 554 (812)
+       "TRUE", // 555 (813)
+       "TRY", // 556 (814)
+       "TURN", // 557 (815)
+       "TYPE", // 558 (816)
+       "TYPEDEF", // 559 (817)
+       "ULENGTH", // 560 (818)
+       "UNBOUNDED", // 561 (819)
+       "UNIT", // 562 (820)
+       "UNITS", // 563 (821)
+       "UNIT-RECORD", // 564 (822)
+       "UNTIL", // 565 (823)
+       "UP", // 566 (824)
+       "UPON", // 567 (825)
+       "UPOS", // 568 (826)
+       "UPPER-CASE", // 569 (827)
+       "USAGE", // 570 (828)
+       "USING", // 571 (829)
+       "USUBSTR", // 572 (830)
+       "USUPPLEMENTARY", // 573 (831)
+       "UTILITY", // 574 (832)
+       "UUID4", // 575 (833)
+       "UVALID", // 576 (834)
+       "UWIDTH", // 577 (835)
+       "VALUE", // 578 (836)
+       "VARIANCE", // 579 (837)
+       "VARYING", // 580 (838)
+       "VOLATILE", // 581 (839)
+       "WHEN-COMPILED", // 582 (840)
+       "WITH", // 583 (841)
+       "WORKING-STORAGE", // 584 (842)
+       "XML", // 585 (843)
+       "XMLGENERATE", // 586 (844)
+       "XMLPARSE", // 587 (845)
+       "YEAR-TO-YYYY", // 588 (846)
+       "YYYYDDD", // 589 (847)
+       "YYYYMMDD", // 590 (848)
+       "ARITHMETIC", // 591 (849)
+       "ATTRIBUTE", // 592 (850)
+       "AUTO", // 593 (851)
+       "AUTOMATIC", // 594 (852)
+       "AWAY-FROM-ZERO", // 595 (853)
+       "BACKGROUND-COLOR", // 596 (854)
+       "BELL", // 597 (855)
+       "BINARY-ENCODING", // 598 (856)
+       "BLINK", // 599 (857)
+       "CAPACITY", // 600 (858)
+       "CENTER", // 601 (859)
+       "CLASSIFICATION", // 602 (860)
+       "CYCLE", // 603 (861)
+       "DECIMAL-ENCODING", // 604 (862)
+       "ENTRY-CONVENTION", // 605 (863)
+       "EOL", // 606 (864)
+       "EOS", // 607 (865)
+       "ERASE", // 608 (866)
+       "EXPANDS", // 609 (867)
+       "FLOAT-BINARY", // 610 (868)
+       "FLOAT-DECIMAL", // 611 (869)
+       "FOREGROUND-COLOR", // 612 (870)
+       "FOREVER", // 613 (871)
+       "FULL", // 614 (872)
+       "HIGHLIGHT", // 615 (873)
+       "HIGH-ORDER-LEFT", // 616 (874)
+       "HIGH-ORDER-RIGHT", // 617 (875)
+       "IGNORING", // 618 (876)
+       "IMPLEMENTS", // 619 (877)
+       "INITIALIZED", // 620 (878)
+       "INTERMEDIATE", // 621 (879)
+       "LC-ALL", // 622 (880)
+       "LC-COLLATE", // 623 (881)
+       "LC-CTYPE", // 624 (882)
+       "LC-MESSAGES", // 625 (883)
+       "LC-MONETARY", // 626 (884)
+       "LC-NUMERIC", // 627 (885)
+       "LC-TIME", // 628 (886)
+       "LOWLIGHT", // 629 (887)
+       "NEAREST-AWAY-FROM-ZERO", // 630 (888)
+       "NEAREST-EVEN", // 631 (889)
+       "NEAREST-TOWARD-ZERO", // 632 (890)
+       "NONE", // 633 (891)
+       "NORMAL", // 634 (892)
+       "NUMBERS", // 635 (893)
+       "PREFIXED", // 636 (894)
+       "PREVIOUS", // 637 (895)
+       "PROHIBITED", // 638 (896)
+       "RELATION", // 639 (897)
+       "REQUIRED", // 640 (898)
+       "REVERSE-VIDEO", // 641 (899)
+       "ROUNDING", // 642 (900)
+       "SECONDS", // 643 (901)
+       "SECURE", // 644 (902)
+       "SHORT", // 645 (903)
+       "SIGNED", // 646 (904)
+       "STANDARD-BINARY", // 647 (905)
+       "STANDARD-DECIMAL", // 648 (906)
+       "STATEMENT", // 649 (907)
+       "STEP", // 650 (908)
+       "STRUCTURE", // 651 (909)
+       "TOWARD-GREATER", // 652 (910)
+       "TOWARD-LESSER", // 653 (911)
+       "TRUNCATION", // 654 (912)
+       "UCS-4", // 655 (913)
+       "UNDERLINE", // 656 (914)
+       "UNSIGNED", // 657 (915)
+       "UTF-16", // 658 (916)
+       "UTF-8", // 659 (917)
+       "ADDRESS", // 660 (918)
+       "END-ACCEPT", // 661 (919)
+       "END-ADD", // 662 (920)
+       "END-CALL", // 663 (921)
+       "END-COMPUTE", // 664 (922)
+       "END-DELETE", // 665 (923)
+       "END-DISPLAY", // 666 (924)
+       "END-DIVIDE", // 667 (925)
+       "END-EVALUATE", // 668 (926)
+       "END-MULTIPLY", // 669 (927)
+       "END-PERFORM", // 670 (928)
+       "END-READ", // 671 (929)
+       "END-RETURN", // 672 (930)
+       "END-REWRITE", // 673 (931)
+       "END-SEARCH", // 674 (932)
+       "END-START", // 675 (933)
+       "END-STRING", // 676 (934)
+       "END-SUBTRACT", // 677 (935)
+       "END-UNSTRING", // 678 (936)
+       "END-WRITE", // 679 (937)
+       "END-IF", // 680 (938)
+       "THRU", // 681 (939)
+       "OR", // 682 (940)
+       "AND", // 683 (941)
+       "NOT", // 684 (942)
+       "NE", // 685 (943)
+       "LE", // 686 (944)
+       "GE", // 687 (945)
+       "POW", // 688 (946)
+       "NEG", // 689 (947)
 };
diff --git a/gcc/cobol/udf/stored-char-length.cbl 
b/gcc/cobol/udf/stored-char-length.cbl
index 9ab3b14eb465..66889d021e6d 100644
--- a/gcc/cobol/udf/stored-char-length.cbl
+++ b/gcc/cobol/udf/stored-char-length.cbl
@@ -1,3 +1,6 @@
+        >> PUSH source format
+        >>SOURCE format is fixed
+
       *  This function is in public domain.
       *  Contributed by James K. Lowden of Cobolworx in August 2024
 
@@ -13,3 +16,4 @@
             to Output-Value. 
         End Function STORED-CHAR-LENGTH.
 
+        >> pop source format
\ No newline at end of file
diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index 0076fc4194ac..c85b4cbea6f2 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -121,35 +121,76 @@ gb4( size_t input ) {
  * command-line option.  A push to a stack pushes the default value onto it; a
  * pop copies the top of the stack to the default value.
  *
+ * Supported:
+ *   CALL-CONVENTION
+ *   COBOL-WORDS
+ *   DEFINE
+ *   DISPLAY
+ *   IF
+ *   POP
+ *   PUSH
+ *   SOURCE FORMAT
+ *   TURN
+ * not supported
+ *   EVALUATE
+ *   FLAG-02
+ *   FLAG-14
+ *   LEAP-SECOND
+ *   LISTING
+ *   PAGE
+ *   PROPAGATE
+ *   REF-MOD-ZERO-LENGTH
+ * 
  * >>PUSH ALL calls the class's push() method. 
  * >>POP ALL calls the class's pop() method. 
  */
 class cdf_directives_t
 {
-  typedef std::map<std::string, cdfval_t> cdf_values_t;
-
   template <typename T>
   class cdf_stack_t : private std::stack<T> {
     T default_value;
+    const T& top() const { return std::stack<T>::top(); }
+    bool empty() const { return std::stack<T>::empty(); }
    public:
     void value( const T& value ) {
-      T& output( std::stack<T>::empty()? default_value : std::stack<T>::top() 
);
+      T& output( empty()? default_value : std::stack<T>::top() );
       output = value;
+      dbgmsg("cdf_directives_t::%s: %s", __func__, str(output).c_str());
     }
     T& value() {
-      return std::stack<T>::empty()? default_value : std::stack<T>::top();
+      return empty()? default_value : std::stack<T>::top();
     }
     void push() {
       std::stack<T>::push(value());
+      dbgmsg("cdf_directives_t::%s: %s", __func__, str(top()).c_str());
     }
     void pop() {
-      if( std::stack<T>::empty() ) {
+      if( empty() ) {
         error_msg(YYLTYPE(), "CDF stack empty");
         return;
       }
-      default_value = std::stack<T>::top();
+      default_value = top();
       std::stack<T>::pop();
+      dbgmsg("cdf_directives_t::%s: %s", __func__, str(default_value).c_str());
+    }
+  protected:
+    static std::string str(cbl_call_convention_t arg) {
+      char output[2] = { static_cast<char>(arg) };
+      return std::string("call-convention ") + output;
+    }
+    static std::string str(current_tokens_t) {
+      return "<cobol-words>";
+    }
+    static std::string str(cdf_values_t) {
+      return "<dictionary>";
+    }
+    static std::string str(source_format_t arg) {
+      return arg.description();
     }
+    static std::string str(cbl_enabled_exceptions_t) {
+      return "<enabled_exceptions>";
+    }
+                          
   };
 
  public:
@@ -180,6 +221,25 @@ class cdf_directives_t
 };
 static cdf_directives_t cdf_directives;
 
+void
+current_call_convention( cbl_call_convention_t convention) {
+  cdf_directives.call_convention.value(convention);
+}
+cbl_call_convention_t
+current_call_convention() {
+  return cdf_directives.call_convention.value();
+}
+
+current_tokens_t&
+cdf_current_tokens() {
+  return cdf_directives.cobol_words.value();
+}
+
+cdf_values_t&
+cdf_dictionary() {
+  return cdf_directives.dictionary.value();
+}
+
 void
 cobol_set_indicator_column( int column ) {
   cdf_directives.source_format.value().indicator_column_set(column);
@@ -188,6 +248,24 @@ source_format_t& cdf_source_format() {
   return cdf_directives.source_format.value();
 }
 
+cbl_enabled_exceptions_t&
+cdf_enabled_exceptions() {
+  return cdf_directives.enabled_exceptions.value();
+}
+
+void cdf_push() { cdf_directives.push(); }
+void cdf_push_call_convention() { cdf_directives.call_convention.push(); }
+void cdf_push_current_tokens() { cdf_directives.cobol_words.push(); }
+void cdf_push_dictionary() { cdf_directives.dictionary.push(); }
+void cdf_push_enabled_exceptions() { cdf_directives.enabled_exceptions.push(); 
}
+void cdf_push_source_format() { cdf_directives.source_format.push(); }
+
+void cdf_pop() { cdf_directives.pop(); }
+void cdf_pop_call_convention() { cdf_directives.call_convention.pop(); }
+void cdf_pop_current_tokens() { cdf_directives.cobol_words.pop(); }
+void cdf_pop_dictionary() { cdf_directives.dictionary.pop(); }
+void cdf_pop_enabled_exceptions() { cdf_directives.enabled_exceptions.pop(); }
+void cdf_pop_source_format() { cdf_directives.source_format.pop(); }
 
 const char *
 symbol_type_str( enum symbol_type_t type )
diff --git a/gcc/cobol/util.h b/gcc/cobol/util.h
index 28818093662e..d07b669a7f48 100644
--- a/gcc/cobol/util.h
+++ b/gcc/cobol/util.h
@@ -110,4 +110,19 @@ public:
   }
 }; 
 
+
+void cdf_push();
+void cdf_push_call_convention();
+void cdf_push_current_tokens();
+void cdf_push_dictionary();
+void cdf_push_enabled_exceptions();
+void cdf_push_source_format();
+
+void cdf_pop();
+void cdf_pop_call_convention();
+void cdf_pop_current_tokens();
+void cdf_pop_dictionary();
+void cdf_pop_source_format();
+void cdf_pop_enabled_exceptions();
+
 #endif
diff --git a/libgcobol/common-defs.h b/libgcobol/common-defs.h
index a78022ae1243..a3884fdccb72 100644
--- a/libgcobol/common-defs.h
+++ b/libgcobol/common-defs.h
@@ -589,7 +589,7 @@ class cbl_enabled_exceptions_t : protected 
std::set<cbl_enabled_exception_t>
   cbl_enabled_exceptions_t& operator=( const cbl_enabled_exceptions_t& ) = 
default;
 };
 
-extern cbl_enabled_exceptions_t enabled_exceptions;
+cbl_enabled_exceptions_t& cdf_enabled_exceptions();
 
 template <typename T>
 T enabled_exception_match( T beg, T end, ec_type_t type, size_t file ) {

Reply via email to