Skip to content

Fix jcpan compiler storage and fixed-length reads - #908

Merged
fglock merged 3 commits into
masterfrom
fix/jcpan-compiler-tooling-modules
Aug 10, 2026
Merged

Fix jcpan compiler storage and fixed-length reads#908
fglock merged 3 commits into
masterfrom
fix/jcpan-compiler-tooling-modules

Conversation

@fglock

@fglock fglock commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • preserve the established closure/eval lexical storage path
  • limit compile-time BEGIN capture to lexicals actually referenced by the block, preventing stale source-filter symbols from making Class::Std subroutine locals persistent
  • preserve fixed-length input record separator behavior when $/ = \N is dynamically localized, fixing DateTime::TimeZone::Tzfile
  • add focused regressions for eval lexical storage, source-filtered subroutine locals, and localized fixed-length reads

Verification

  • make — PASS
  • full 620-file Perl core suite: 245,362 passing assertions, 86 above the PR Fix lexical tooling dependencies for Test::Cookbook #899 comparison baseline
  • exact PR base (e22f32805) comparison confirms all five residual count differences are pre-existing
  • ./jcpan -t Getopt::Param — PASS, including Class::Std 275 tests and Getopt::Param 45 tests
  • ./jcpan -t DateTime::TimeZone::Tzfile — PASS, 1926 tests
  • new regression tests with system Perl, JVM backend, and interpreter backend

Plack::Runner

Plack::Runner's remaining failures are socket bind/listen failures caused by the execution environment. The equivalent minimal bind also fails under system Perl with Operation not permitted, so these are outside PerlOnJava compiler/tooling behavior.

fglock and others added 2 commits August 10, 2026 11:18
Keep source-filtered subroutine locals fresh instead of recovering them
from BEGIN/eval storage, and preserve fixed-length input record separator
semantics when $/ is dynamically localized.

This fixes Class::Std and Getopt::Param teardown behavior as well as
DateTime::TimeZone::Tzfile fixed-length header reads.

Generated with [Codex](https://openai.com/codex/)

Co-Authored-By: Codex <codex@openai.com>
Restore the established evalBeginIds storage path for ordinary closure
captures. The separate persistent declaration map caused file-scope
lexicals captured by helper subs to arrive empty, aborting dozens of
Perl core tests.

Instead, use the variable collector to capture only lexicals referenced
by each BEGIN block. This prevents stale source-filter symbol entries from
making Class::Std subroutine locals persistent while preserving legitimate
closure and generated eval captures.

Generated with [Codex](https://openai.com/codex/)

Co-Authored-By: Codex <codex@openai.com>
@fglock
fglock force-pushed the fix/jcpan-compiler-tooling-modules branch from 77874a7 to 436f32c Compare August 10, 2026 09:26
Give the subprocess-heavy Perl core croak test a 600-second minimum
allowance while retaining larger caller-supplied timeouts. Keep ordinary
tests on the configured base timeout and document the distinction in the
runner output and help.

Generated with [Codex](https://developers.openai.com/codex/)

Co-Authored-By: Codex <codex@openai.com>
@fglock
fglock merged commit 2511a4e into master Aug 10, 2026
2 checks passed
@fglock
fglock deleted the fix/jcpan-compiler-tooling-modules branch August 10, 2026 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant