@comment ****************************************************************************
@comment ** F4. Summary of Compiler Changes for version v4 ***
@comment ****************************************************************************

@newappendix {F4,Summary of Compiler Changes for COBOL Compiler v4 early dev}
There may well be some changes made that are not documented here.

Taken from Grammar Changelog Febuary 2021.
@enumerate

@item
General
@itemize @bullet

@item (Bison): dropped support for building with versions < 3.
@item (C API): removed cob\_set\_num\_params.
@item (cobc command-line options): added option -fno-fast-math to disable integer arithemtic optimisations.
@item (cobc command-line options): removed -fif-cutoff.
@item (cobc command-line options): added -G for experimental GDB use.
@item (configure): fixed unwanted flags not being removed completely bug #627.
@item (EXTFH): added support for the external file handler (EXTFH) interface, letting users provide a custom file handler.
@item (EXTFH): the old OpenCOBOL EXTFH interface (built into GnuCOBOL with the -()-with-seqra-extfh and -()-with-index-extfh build options) has been marked as obsolete.
@item (Jobs (-j compilation flag)): fixed bug #618.
@item (libcob): internal library number increased from 4 to 5.
@item (help2man documentation): fixed error when building.
@end itemize

@item
Configuration options
@itemize @bullet
@item (Deleted compiler configuration options): select-working bug #421.
@item (New compiler configuration options): align-opt, align-record, assign-variable, assign-using-variable, assign-ext-dyn, assign-disk-from, implicit-assign-dynamic-var, reference-bounds-check, same-as-clause and sync-left-right.
@item (New runtime configuration options):
  \begin(itemize)
  \item bdb\_byteorder (whether BDB should use native, big endian or little endian byte order).
  \item create\_table (whether the ODBC\slash()OCI file handler should create a DDL file from an XFD file if no DDL exists).
  \item dups\_ahead (whether a duplicates in an INDEXED file leads to file status 02).
  \item mf\_ls\_instab (whether to replace tabs by spaces which fill up to the next tab stop (tab stops set 8 spaces apart)).
  \item keycheck (check whether INDEXED file keys match the SELECT specification exactly).
  \end(itemize)
@item (New runtime configuration environment variables): IO\_OPTIONS, IX\_OPTIONS,\linebreak LA\_OPTIONS, LS\_OPTIONS, RL\_OPTIONS, SQ\_OPTIONS and IO\_$x$, where $x$ is any ASSIGN EXTERNAL name used in a program.
@end itemize

@item
Compiler directives
@itemize @bullet
@item (\directiveindicator()SET directive): added XFD phrase.
@end itemize

@item
Identification division
@itemize @bullet
@item (FUNCTION-ID clause): added recognition of PROTOTYPE phrase.
@item (PROGRAM-ID clause): added recognition of PROTOTYPE and RESIDENT phrases.
@end itemize

@item
Environment division
@itemize @bullet

@item (ALTERNATE RECORD KEY clause): allow literal in SUPPRESS WHEN clause.
@item (ASSIGN clause): allow pipe syntax in literals.
@end itemize

@item
Data division
@itemize @bullet

@item (SYNCHRONIZED clause): LEFT phrase is now marked as unimplemented bug #512.
@end itemize

@item
Procedure division
@itemize @bullet

@item (COMMIT statement): Added optional word TRANSACTION.
@item (DELETE statement (file)): Added ON EXCEPTION handlers.
@item (File I-O): Added support for multiple simultaneous file handlers.
@item (File I-O): Allow file-handler to be configured for individual files or organizations using environment variables (or dictionary files).
@item (File I-O): Added support for INDEXED files based on LMDB.
@item (File I-O): Added initial support for ODBC and OCI as file-handlers (so far PostgrSQL, MySQL, SQLite, MSSQL) and OCI, along with new directory COB_SCHEMA_DIR containing the necessary internal schema files to match the file definition to the database table all though usage of $XDF.
@item (File I-O): changed file status for detecting bad data in line sequential files from 34 to 71.
@item (File I-O): fixed issues with LINE SEQUENTIAL and OPEN I-O on platforms that require output to be flushed between read and write of a file.
@item (INSPECT statement): fixed multiple TALLYING phrases being rejected bug #47
@item (Procedure division header): fixed error when a variable-length parameter was not referenced bug #648.
@item (Procedure division header): added recognition of z/OS-PARM-style main program parameter fr #357.
@item (Reference modification): added out-of-bounds checks within IF statement conditions.
@item (REWRITE statement): enabled for LINE SEQUENTIAL files.
@item (ROLLBACK statement): added optional word TRANSACTION.
@item (SET statement): added support for FH-()-FCD and FH-()-KEYDEF fr #349.
@item (START statement (transaction)): added recognition of.
@item (STRING statement): strengthened syntax checks bugs #653 and #488.
@item (Tracing): fixed line numbers when tracing inside RECURSIVE programs bug #611.
@item (UNSTRING statement): strengthened syntax checks (bugs #653 and #488.
@item (WRITE statement (indexed)): fixed bug involving file status 21.
@end itemize

@end enumerate
@iftex
@sp 3
@center -----------------------------------------------------------------------------
@center End of Appendix F4 Summary of Compiler Changes for v4 early dev
@end iftex








