Follow

Heirloom PL/I Compiler Release Notes

Table of Contents

  1. Overview
  2. How to read these notes
  3. 2026 Releases
  4. 2025 Releases
  5. Related articles

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.D scheme (for example, 26.6.16 was published on June 16, 2026).

2026 Releases

26.6.16 — June 16, 2026

Fixed

  • The EQUAL option on EXEC CICS READ FILE is now honored instead of being silently dropped.
  • Alternate ENTRY points now execute their body against the populated instance, and entry overrides are matched by signature.

26.6.9 — June 9, 2026

Fixed

  • HBOUND now resolves correctly for nested structure-array shorthand, and built-in name casing is preserved in subscripts.
  • SQL: multi-row INSERT of a structure-array member is handled, and DECLARE GLOBAL TEMPORARY TABLE now 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 IF conditions 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 IF conditions 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 ENTRY variable 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.
  • ENDFILE condition-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() and ANY() built-ins work with array-member shorthand and multi-dimensional arrays using asterisk notation.
  • MAP keyword can be used as a procedure label.

26.3.17 — March 17, 2026

Fixed

  • Integer-returning built-ins in DO WHILE conditions are converted to boolean.
  • ERROR keyword 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 (-, *, /) in UPDATE SET clauses, LIKE-aware structure references, host-variable and INDICATOR support, and parameter-count validation.
  • Array handling: nested-array dimension markers, array bounds resolved from constant values, and SQL duration and TIME support.

26.3.3 — March 3, 2026

Fixed

  • Restored IF-THEN-DO grammar to prevent incorrect list generation in conditional blocks.
  • Structure members declared with LIKE now generate proper runtime offset calculation.
  • BIT(1) function returns convert correctly to Boolean.

26.2.24 — February 24, 2026

Added

  • BETWEEN built-in function for range checking.
  • Support for STATIC NONASSIGNABLE attributes.

Fixed

  • CICS command parsing, automatic RESP/RESP2 variable declaration, and storage-annotation generation.
  • Array-parameter handling in CALL statements and star assignments.
  • SUBSTR with 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, and ANY built-ins now return Boolean instead of Integer.
  • DIMACROSS semantics 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 ... SET now generates separate instantiation and pointer-assignment statements.

26.2.3 — February 3, 2026

Fixed

  • Fixed an off-by-one error that caused SUBSCRIPTRANGE errors when initializing structure arrays with (*) wildcard syntax; wildcard assignments now generate a correct bulk-assignment call.

26.1.20 — January 20, 2026

Added

  • IF statements can test empty string literals in boolean contexts.
  • PUT LIST without an expression no longer causes a parse error.
  • ORDINAL declarations with an ordinal attribute.

Fixed

  • Multiple LIKE-resolution improvements for nested structures and scoped variables.
  • The DECIMAL built-in inherits precision and scale from the target type.
  • ON-statement variables are hoisted to class level for handler-method access.
  • CICS ASSIGN now parses USERID.

26.1.13 — January 13, 2026

Added

  • ORDINAL type declarations with ordinal attributes.

Fixed

  • Entry-call return types are cast correctly in DO WHILE/UNTIL conditions.
  • Reserved keywords are handled when entry variables appear in CALL statements.
  • PARENT fields 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 FILE now supports the INTO parameter.

25.12.9 — December 9, 2025

Added

  • Picture-variable assignments are generated through the variable's set method, preserving BASED relationships.
  • MEMCONVERT built-in for EBCDIC/ASCII character-set conversion.

25.12.2 — December 2, 2025

Added

  • RESP/RESP2 parameter handling added to CICS statements.
  • The STRING built-in with a star subscript now defers to the runtime.

25.11.25 — November 25, 2025

Fixed

  • CICS START supports the RESP2 attribute.
  • CICS READQ TS no longer requires the LENGTH parameter to be returned.
  • LOOP keyword is accepted as a DO-loop label.

25.11.18 — November 18, 2025

Added

  • SQL RANK() OVER window function.
  • SQL TRUNCATE statement.
  • SQL UPDATE with a table alias and complex IN expressions.
  • Comprehensive CICS DFHRESP response-code support.
  • RESP/RESP2 on CICS SYNCPOINT, plus the NOSUSPEND option 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 LENGTH parameter.
  • BIN FIXED type support in GET EDIT.

25.11.4 — November 4, 2025

Fixed

  • Improved BASED pointer handling, including preserving the BASED relation in READ FILE SET(pointer) statements.
  • VARYING/VARYINGZ attribute detection and CHAR size preservation in ALIAS declarations.

25.10.28 — October 28, 2025

Added

  • ALLOCATE statement with SET clauses, and flexible ordering of FILE and SET clauses in LOCATE.
  • RELEASE and ENTRY statement support.
  • %PROCESS directive and abbreviated OPTIONS keyword.
  • STG() built-in optimization, plus enhanced ALL built-in and array-comparison support.
  • Structure-to-structure assignment via qualified locators.
  • WRITE, PRINT, EQ, LE, and NE usable as labels or declaration names.

Fixed

  • SQL host-variable extraction from UNION ALL WHERE clauses, and corrected SQLCA/SQLWARN field 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/VARYINGZ attributes are detected regardless of their position in an attribute list.
  • CHAR size is preserved when resolving ALIAS type declarations.

25.10.14 — October 14, 2025

Added

  • Extended SQL OPTIMIZE FOR clause support in multiple positions — after FOR FETCH ONLY, WITH UR, and other isolation clauses — in line with the DB2 SQL specification.

25.10.7 — October 7, 2025

Added

  • EQ, LE, and NE usable as declaration names.
  • CASE expressions in SQL INSERT ... SELECT statements.

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 IF statements in SELECT break analysis are handled correctly.

25.9.23 — September 23, 2025

Added

  • Picture format support for PUT/GET statements.
  • Declarations with non-data attributes following the ENTRY attribute.
  • ENTRY parameter calls in DO WHILE statements, plus deferred-execution entry semantics.

Fixed

  • BASED declaration scope management in block statements.
  • Java code generation when an existing source file is empty or contains no types.

Was this article helpful?
0 out of 0 found this helpful
Have more questions? Submit a request

0 Comments

Article is closed for comments.
Powered by Zendesk