Table of Contents
Audience: developers and build engineers using the Heirloom PL/I compiler. This page tracks notable changes to the compiler — newest first — covering the PL/I language, embedded SQL, and embedded CICS support. For what each option does, see the related compiler articles linked at the end.
Overview
This page records notable changes to the Heirloom PL/I compiler, most recent release first. Each entry lists the language, SQL, and CICS behaviors added or fixed in that release, so teams migrating PL/I workloads to Java can see what changed and decide when to move to a newer compiler build.
The compiler is the stage that translates PL/I source into Java; how the migrated application then runs is covered by the runtime documentation. Changes below affect the generated Java and the parser/preprocessor, not deployment.
How to read these notes
- Releases are listed in reverse-chronological order — the most recent build is at the top.
- Added covers new PL/I, SQL, or CICS support. Fixed covers corrected code-generation or parsing behavior. Breaking flags a change that may require updates to existing code.
- Unless an entry is marked Breaking, releases preserve backward compatibility with previously generated code.
- Version numbers follow a
YY.M.Dscheme (for example,26.6.16was published on June 16, 2026).
2026 Releases
26.6.16 — June 16, 2026
Fixed
- The
EQUALoption onEXEC CICS READ FILEis now honored instead of being silently dropped. - Alternate
ENTRYpoints now execute their body against the populated instance, and entry overrides are matched by signature.
26.6.9 — June 9, 2026
Fixed
-
HBOUNDnow resolves correctly for nested structure-array shorthand, and built-in name casing is preserved in subscripts. - SQL: multi-row
INSERTof a structure-array member is handled, andDECLARE GLOBAL TEMPORARY TABLEnow executes. - Equality comparisons between short and integer values are now evaluated by value.
26.4.28 — April 28, 2026
Fixed
- Integer-returning built-ins used in
IFconditions now receive proper boolean coercion. - Empty string literals are preserved during preprocessor macro concatenation and variable substitution.
- The "Unresolved symbol" message for implicitly declared variables is downgraded from an error to a single deduplicated warning.
- SQL column names that are reserved words (such as
ORDER) are now read correctly.
26.4.22 — April 22, 2026
Fixed
- Entry-variable parameters are handled correctly in
IFconditions and expression-context calls. - Double-quoted SQL identifiers are now escaped correctly in generated Java string literals.
- The group constructor runs unconditionally for
LIKE-d classes, even when no helper is present. - Entry references are distinguished from entry calls correctly (parenthesis-aware), including when CICS is enabled.
26.4.21 — April 21, 2026
Fixed
- Scope parent chain and method resolution corrected for same-named nested procedures.
- External
ENTRYvariable references in expressions are handled correctly.
26.4.7 — April 7, 2026
Added
-
QUOTE()preprocessor built-in function.
Fixed
- Preprocessor macro string concatenation no longer produces corrupted output.
- Duplicate variable declarations and parent/child scope violations are prevented.
-
ENDFILEcondition-handler registration no longer triggers a null-pointer error, and parameterless external procedures invoke correctly under the instance strategy.
26.3.24 — March 24, 2026
Fixed
-
DIM()andANY()built-ins work with array-member shorthand and multi-dimensional arrays using asterisk notation. -
MAPkeyword can be used as a procedure label.
26.3.17 — March 17, 2026
Fixed
- Integer-returning built-ins in
DO WHILEconditions are converted to boolean. -
ERRORkeyword can be used as a procedure name. - Improved collision detection and inner-class handling for ordinal interfaces.
26.3.10 — March 10, 2026
Fixed
- Resolved a range of SQL and type-system issues, including parenthesized-expression Boolean returns, arithmetic operators (
-,*,/) inUPDATE SETclauses,LIKE-aware structure references, host-variable andINDICATORsupport, and parameter-count validation. - Array handling: nested-array dimension markers, array bounds resolved from constant values, and SQL duration and
TIMEsupport.
26.3.3 — March 3, 2026
Fixed
- Restored
IF-THEN-DOgrammar to prevent incorrect list generation in conditional blocks. - Structure members declared with
LIKEnow generate proper runtime offset calculation. -
BIT(1)function returns convert correctly to Boolean.
26.2.24 — February 24, 2026
Added
-
BETWEENbuilt-in function for range checking. - Support for
STATIC NONASSIGNABLEattributes.
Fixed
- CICS command parsing, automatic
RESP/RESP2variable declaration, and storage-annotation generation. - Array-parameter handling in
CALLstatements and star assignments. -
SUBSTRwith a qualified locator on the left side generates the correct based call. - Qualified-locator assignment to nested structures uses the correct assignment method.
26.2.10 — February 10, 2026
Fixed
-
INLIST,ALL, andANYbuilt-ins now return Boolean instead of Integer. -
DIMACROSSsemantics corrected: the root is a single instance and child fields are arrays, per the IBM PL/I specification.
26.2.5 — February 5, 2026
Fixed
- Restored correct structure-to-integer assignment for the non-wildcard case (regression from 26.2.3).
-
ALLOCATE ... SETnow generates separate instantiation and pointer-assignment statements.
26.2.3 — February 3, 2026
Fixed
- Fixed an off-by-one error that caused
SUBSCRIPTRANGEerrors when initializing structure arrays with(*)wildcard syntax; wildcard assignments now generate a correct bulk-assignment call.
26.1.20 — January 20, 2026
Added
-
IFstatements can test empty string literals in boolean contexts. -
PUT LISTwithout an expression no longer causes a parse error. -
ORDINALdeclarations with an ordinal attribute.
Fixed
- Multiple
LIKE-resolution improvements for nested structures and scoped variables. - The
DECIMALbuilt-in inherits precision and scale from the target type. -
ON-statement variables are hoisted to class level for handler-method access. - CICS
ASSIGNnow parsesUSERID.
26.1.13 — January 13, 2026
Added
-
ORDINALtype declarations with ordinal attributes.
Fixed
- Entry-call return types are cast correctly in
DO WHILE/UNTILconditions. - Reserved keywords are handled when entry variables appear in
CALLstatements. -
PARENTfields are renamed to avoid Java naming collisions. - Dynamic dimension expressions are supported in
ALLOCATE.
2025 Releases
25.12.23 — December 23, 2025
Added
-
EXEC CICS READ FILEnow supports theINTOparameter.
25.12.9 — December 9, 2025
Added
- Picture-variable assignments are generated through the variable's set method, preserving
BASEDrelationships. -
MEMCONVERTbuilt-in for EBCDIC/ASCII character-set conversion.
25.12.2 — December 2, 2025
Added
-
RESP/RESP2parameter handling added to CICS statements. - The
STRINGbuilt-in with a star subscript now defers to the runtime.
25.11.25 — November 25, 2025
Fixed
- CICS
STARTsupports theRESP2attribute. - CICS
READQ TSno longer requires theLENGTHparameter to be returned. -
LOOPkeyword is accepted as aDO-loop label.
25.11.18 — November 18, 2025
Added
- SQL
RANK() OVERwindow function. - SQL
TRUNCATEstatement. - SQL
UPDATEwith a table alias and complexINexpressions. - Comprehensive CICS
DFHRESPresponse-code support. -
RESP/RESP2on CICSSYNCPOINT, plus theNOSUSPENDoption in the CICS grammar. - Structure parameters with differing aliases in procedure calls.
Fixed
- Variable-name extraction from built-in expressions in the CICS
READQ TS LENGTHparameter. -
BIN FIXEDtype support inGET EDIT.
25.11.4 — November 4, 2025
Fixed
- Improved
BASEDpointer handling, including preserving theBASEDrelation inREAD FILE SET(pointer)statements. -
VARYING/VARYINGZattribute detection andCHARsize preservation inALIASdeclarations.
25.10.28 — October 28, 2025
Added
-
ALLOCATEstatement withSETclauses, and flexible ordering ofFILEandSETclauses inLOCATE. -
RELEASEandENTRYstatement support. -
%PROCESSdirective and abbreviatedOPTIONSkeyword. -
STG()built-in optimization, plus enhancedALLbuilt-in and array-comparison support. - Structure-to-structure assignment via qualified locators.
-
WRITE,PRINT,EQ,LE, andNEusable as labels or declaration names.
Fixed
- SQL host-variable extraction from
UNION ALLWHEREclauses, and correctedSQLCA/SQLWARNfield declarations. - Same-named structures across inner procedure scopes, and Integer-to-BigDecimal conversion for internal procedure calls.
- Correct output for Picture-by-Double multiplication, plus a preprocessor parsing fix.
25.10.21 — October 21, 2025
Breaking: Main-procedure instance methods include their parameters again (reverting an earlier change). Main methods now receive parameters both as method arguments and as class-level fields. If you have overridden main-procedure methods, update those signatures to include the parameter list so they match the newly generated code.
Fixed
-
VARYING/VARYINGZattributes are detected regardless of their position in an attribute list. -
CHARsize is preserved when resolvingALIAStype declarations.
25.10.14 — October 14, 2025
Added
- Extended SQL
OPTIMIZE FORclause support in multiple positions — afterFOR FETCH ONLY,WITH UR, and other isolation clauses — in line with the DB2 SQL specification.
25.10.7 — October 7, 2025
Added
-
EQ,LE, andNEusable as declaration names. -
CASEexpressions in SQLINSERT ... SELECTstatements.
Fixed
- Array size resolved from identifier initial values.
- Corrected a nested-array loop boundary (
<to<=).
25.9.30 — September 30, 2025
Fixed
- Nested-array asterisk-assignment loop conditions corrected.
- Cascading
IFstatements inSELECTbreak analysis are handled correctly.
25.9.23 — September 23, 2025
Added
- Picture format support for
PUT/GETstatements. - Declarations with non-data attributes following the
ENTRYattribute. -
ENTRYparameter calls inDO WHILEstatements, plus deferred-execution entry semantics.
Fixed
-
BASEDdeclaration scope management in block statements. - Java code generation when an existing source file is empty or contains no types.
0 Comments