Skip to content

Nordic national characters (ÆØÅ) truncate PL/I/HLASM/JCL identifiers — units misnamed, calls unlinked #3520

Closed

Description

@squid-protocol

Problem

On Nordic EBCDIC code pages (CP277 Danish/Norwegian, CP278 Swedish/Finnish), the national characters $ # @ render as Å Æ Ø (and similar). Source exported from those estates therefore carries identifiers such as OVERFØR_TIL_MAP, and the compilers accept them as ordinary identifiers.

GitGalaxy's name captures are ASCII-only, so it truncates each such name at the first national character:

Source (navikt/DSF R0010422.pli) GitGalaxy unit name
OVERFØR_TIL_MAP: PROC; R_TIL_MAP
OVERFØR_FRA_MAP: PROC; R_FRA_MAP

The unit is found (signal == named on every file), but its name is wrong, so every CALL OVERFØR_TIL_MAP fails to link to it. The call graph, dead-code verdicts and lineage all break for these units.

Scale

Across the whole navikt/DSF repository (Norway's national insurance system: 1,473 PL/I files), 85 files have a national character in a PROC label, and there are 1,255 CALLs to such names. In the crucible v1.5.0 slice (data/pli/dsf_cics_admin) it affects 8 of 39 units (4 files × 2).

Scope to check

The same code-page mapping applies wherever a language's identifiers allow @ # $:

  • PL/I: labels, entry names, variables (confirmed)
  • HLASM: symbols allow @ # $
  • JCL: job, step, DD and member names, and dataset qualifiers
  • CSD: resource names
  • COBOL: user-defined words don't allow @#$, but the literals holding program names (CALL 'X', XCTL PROGRAM('X')) do

Fix sketch

Widen the identifier classes for those languages (func_start/class_start name groups, the call-site readers in mainframe_boundary, and job_flow) to include the national-character range, e.g. ÆØÅæøåÄÖÜ. Add a regression test using the DSF shape. Crucible v1.5.0 carries the reproduction, and docs/self_scan/manual_verification.json records pli at 38/46 until this is fixed.

Found while pinning crucible v1.5.0 (language-crucible#33).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    scope:frontierMapped, not yet built: eras/commands/regions the burned estates don't use (Gap Atlas)

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions