Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
f57edcc
fix: reject removed braced punctuation variables
fglock Sep 15, 2026
f530fc6
fix: diagnose invalid declaration expressions
fglock Sep 15, 2026
5328fcb
fix: enforce lexical use VERSION declarations
fglock Sep 15, 2026
d486702
fix: reject barewords for pop and shift
fglock Sep 15, 2026
74eb262
fix: diagnose missing join separator
fglock Sep 15, 2026
a9cd3ea
fix: locate global-only lexical declaration errors
fglock Sep 15, 2026
0006e10
fix: reject bareword aggregate arguments
fglock Sep 15, 2026
9da4094
fix: locate state list assignment errors
fglock Sep 15, 2026
1589cbf
fix: scope eval diagnostic numbering to source files
fglock Sep 15, 2026
e7b9909
fix: diagnose invalid delete and exists targets
fglock Sep 15, 2026
9c209d4
fix: clean defer control-flow diagnostics
fglock Sep 15, 2026
b5c3c30
fix: require blocks for all and any keywords
fglock Sep 15, 2026
d4ebdd9
fix: diagnose indirect map arguments to return
fglock Sep 15, 2026
922a3ad
fix: reject reference-valued bless class names
fglock Sep 16, 2026
ce66498
fix: reject when and default outside given
fglock Sep 16, 2026
9fceb83
fix: reject assignments to unknown SIG hooks
fglock Sep 16, 2026
576ef49
fix: diagnose removed ENCODING special variable
fglock Sep 16, 2026
708b942
fix: reject class objects assigned to typeglobs
fglock Sep 16, 2026
15c599d
fix: diagnose aggregate bitwise assignments
fglock Sep 16, 2026
ac4fe74
fix: diagnose aggregate substr and vec lvalues
fglock Sep 16, 2026
f83f5c6
fix: report invalid array operation operands together
fglock Sep 16, 2026
4dae4aa
fix: report undefined aggregate hash references
fglock Sep 16, 2026
a6e3c9a
fix: preserve mismatched collection delimiters in syntax errors
fglock Sep 16, 2026
ae70c97
fix: report computed dump labels
fglock Sep 16, 2026
07d8b9f
fix: report undefined code references
fglock Sep 16, 2026
f9745e8
fix: reject file and directory handle conflicts
fglock Sep 16, 2026
b682f63
fix: match sysread utf8-layer diagnostics
fglock Sep 16, 2026
1f99993
fix: validate declared-reference foreach values
fglock Sep 16, 2026
aca2e58
fix: complete declared-reference foreach diagnostics
fglock Sep 16, 2026
9ae9d55
wip: snapshot croak diagnostics fixes before rebase
fglock Sep 17, 2026
48dc286
wip: snapshot before continuing croak diagnostics
fglock Sep 17, 2026
573d499
wip: snapshot croak diagnostics before rebase
fglock Sep 18, 2026
cf0f0bd
fix: resolve rebased bytecode opcode collision
fglock Sep 18, 2026
34f74dc
fix: preserve strict-vars errors before syntax failures
fglock Sep 18, 2026
1dee6ad
fix: preserve parser recovery after strict-vars diagnostics
fglock Sep 18, 2026
da808d9
fix: retain deferred diagnostics on parser recovery errors
fglock Sep 18, 2026
a438f97
fix: preserve strict-vars diagnostic location format
fglock Sep 18, 2026
2127def
fix: locate unterminated string delimiters at their opener
fglock Sep 18, 2026
3bb52c2
fix: prioritize interpolated heredoc terminator diagnostics
fglock Sep 18, 2026
018b396
fix: compile interpolated heredoc diagnostic path
fglock Sep 18, 2026
9357148
fix: preserve interpolated heredoc terminator diagnostics
fglock Sep 18, 2026
4c52bd6
fix: preserve quoted delimiter diagnostics
fglock Sep 18, 2026
21034aa
fix: retain interpolated heredoc source location
fglock Sep 18, 2026
7cc0514
fix: report invalid foreach typeglob iterator
fglock Sep 18, 2026
710a190
fix: warn for unenabled CJK paired delimiters
fglock Sep 18, 2026
5f20129
fix: default paired-delimiter compatibility warning
fglock Sep 18, 2026
550eaea
fix: diagnose nested variable declarations
fglock Sep 18, 2026
cecddd5
fix: diagnose illegal special block declarations
fglock Sep 18, 2026
b79a6d4
fix: retain nested declaration diagnostic context
fglock Sep 18, 2026
f8c441b
fix: retain regex named character diagnostic location
fglock Sep 18, 2026
724b8ad
fix: retain paired delimiter warning location
fglock Sep 18, 2026
91f97ee
fix: report every conflict marker
fglock Sep 18, 2026
2c7ded5
fix: diagnose catch declaration keywords
fglock Sep 18, 2026
82cddc2
fix: reject oversized braced numeric escapes
fglock Sep 18, 2026
5ea87a1
fix: diagnose malformed octal transliteration escapes
fglock Sep 18, 2026
edd9792
fix: render bare heredoc diagnostics directly
fglock Sep 18, 2026
47a1491
fix: diagnose incomplete decimal exponents
fglock Sep 18, 2026
1af6a51
fix: include signature default expression in diagnostics
fglock Sep 18, 2026
193904b
fix: backtrack malformed nondecimal fractional literals
fglock Sep 18, 2026
c01c03c
fix: require CORE qualification for dump
fglock Sep 18, 2026
2dec0b7
fix: diagnose unterminated subroutine prototypes
fglock Sep 18, 2026
2efc24e
fix: recover incomplete base literals after diagnostics
fglock Sep 18, 2026
6806bd8
fix: preserve nested interpolation diagnostics
fglock Sep 18, 2026
073a6b1
fix: diagnose adjacent incomplete base literals
fglock Sep 18, 2026
0835b6e
fix: recover multiple undef argument diagnostics
fglock Sep 18, 2026
9994b65
fix: preserve cleared q constant diagnostics
fglock Sep 18, 2026
095695b
fix: cap deferred compile diagnostics
fglock Sep 18, 2026
83a5754
fix: narrow capped q constant diagnostic recovery
fglock Sep 18, 2026
b2f7ed5
fix: preserve malformed attribute quote diagnostics
fglock Sep 18, 2026
424a5c6
fix: report runaway multiline q diagnostics
fglock Sep 18, 2026
687bb0f
fix: retain malformed format syntax diagnostic
fglock Sep 18, 2026
42a2f01
fix: preserve runaway multiline regex diagnostics
fglock Sep 18, 2026
2f0c558
fix: honor apostrophe package separator feature
fglock Sep 18, 2026
ccb5fff
fix: preserve malformed regex eval diagnostics
fglock Sep 18, 2026
8fb8fd0
fix: preserve malformed regex interpolation diagnostics
fglock Sep 18, 2026
071beda
fix: preserve empty named regex diagnostics after callbacks
fglock Sep 18, 2026
c5451d9
fix: diagnose malformed format arguments at EOF
fglock Sep 18, 2026
40a22ab
fix: reject malformed dot format arguments
fglock Sep 18, 2026
db65a44
fix: preserve malformed UTF-8 follower diagnostics
fglock Sep 18, 2026
42f05ba
fix: assign unique opcodes after rebase
fglock Sep 18, 2026
3130633
fix: accept hexadecimal floats without integer digits
fglock Sep 19, 2026
2cc8bea
fix: allow slurpy remainder after named signature parameters
fglock Sep 19, 2026
19cf166
fix: allow parenthesized all and any invocation
fglock Sep 19, 2026
e6cc38d
fix: make local-reference errors catchable at runtime
fglock Sep 19, 2026
1892b6a
fix: accept unary-plus exists targets
fglock Sep 19, 2026
c0a94c2
fix: preserve local-reference diagnostic source lines
fglock Sep 19, 2026
1959ed7
fix: preserve parenthesized state logical defaults
fglock Sep 19, 2026
6dee35c
fix: render NUL in unknown signal-hook diagnostics
fglock Sep 19, 2026
49f4f52
fix: warn for malformed signal names in %SIG
fglock Sep 19, 2026
3f2b185
fix: allow computed goto within entered foreach bodies
fglock Sep 19, 2026
c30538f
fix: initialize the child exit status to zero
fglock Sep 19, 2026
c6e1f80
fix: resolve duplicate goto labels by lexical scope
fglock Sep 19, 2026
00711a9
fix: preserve class field parameter default semantics
fglock Sep 19, 2026
6a8c4d4
fix: lazily initialize state declarations after redo
fglock Sep 19, 2026
2ab7903
fix: reject missing required class parameters
fglock Sep 19, 2026
a57c8a7
fix: support goto in class field initializers
fglock Sep 19, 2026
3c08791
fix: preserve localized warning and unknown signal semantics
fglock Sep 19, 2026
8ecaa8c
fix: bind goto labels to folded lexical scopes
fglock Sep 19, 2026
018132f
fix: align Unicode identifier starts with Perl core
fglock Sep 19, 2026
680f044
fix: ignore FIELDS sub stubs during typed field validation
fglock Sep 19, 2026
a681e07
fix: load enclosing class for nested class inheritance
fglock Sep 19, 2026
acb2a49
fix: exclude EOF sentinels from UTF-8 follower diagnostics
fglock Sep 19, 2026
51d5858
fix: prioritize malformed lexical-sub diagnostics
fglock Sep 19, 2026
280dbfe
fix: retain regex interpolation diagnostic context
fglock Sep 19, 2026
cd58815
fix: warn for non-destructive substitutions in void context
fglock Sep 19, 2026
a2c0495
wip: snapshot transliteration regression investigation before rebase
fglock Sep 19, 2026
ac9aa9e
fix: restore core regressions after diagnostics changes
fglock Sep 20, 2026
bc06eeb
perf: avoid key-list materialization for scalar keys
fglock Sep 20, 2026
0bdd77e
fix: resolve rebased foreach dereference opcode collision
fglock Sep 20, 2026
84b5745
fix: reset embedded readline state between scripts
fglock Sep 20, 2026
0f22657
fix(windows): preserve bang in multiline child jperl argv
fglock Sep 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion docs/about/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,21 @@ priorities and future plans.
- Complete `tr///` compatibility for extended Unicode and surrogate scalars,
identity lvalues, and `chop`/`chomp` diagnostics on both execution backends.

- Reject Unicode named sequences in transliteration operands and preserve the
Perl foreach-entry diagnostic for shadowing `goto` labels inside `eval`.

- Avoid materializing a key list when bytecode evaluates `keys %hash` in scalar
context, restoring empty-hash performance for repeated hash-count queries.

- Reset embedded-script readline state between top-level programs and include
the nested-class fixture required by the standalone unit-test corpus.

- Preserve literal exclamation marks in multiline `-e` arguments when Windows
dispatches a child `jperl` process without invoking its batch launcher.

- Improve Perl-compatible compiler diagnostics for unterminated quoted strings
and here-document delimiters.

- Restore `local` compatibility for tied hash and array elements, sparse
arrays, magic stashes, implicit `$_` foreach aliases (including early
return), and localized regex captures on both execution backends.
Expand All @@ -34,6 +49,36 @@ priorities and future plans.

- Keep debugger EOF from terminating embedded Gradle test workers on Windows.


- Restore source-scoped eval diagnostic numbering; reject Unicode punctuation
in lexical declarations; diagnose invalid `delete` and `exists` targets; and
report clean control-flow errors from `defer` and `finally` blocks. Require
block arguments for feature-gated `all` and `any` keywords, with
Perl-compatible syntax diagnostics, and diagnose invalid indirect arguments
to `return` without rejecting valid return statement modifiers. Reject
reference-valued `bless` class names, including values from tied scalars.
Diagnose `when` and `default` used outside a `given` topicalizer.
Reject assignments to unknown `%SIG` hooks and diagnose defined assignments
to the removed `${^ENCODING}` special variable.
Reject assignments of Perl class objects to typeglobs.
Diagnose aggregate operands to numeric and string bitwise assignments.
Diagnose aggregate lvalues passed to `substr` and `vec`.
Report Perl-compatible hash, private-hash, and typeglob diagnostics for
invalid `push`, `pop`, `shift`, and `unshift` operands, including every
direct invalid operation in a compilation.
Report undefined hash-reference diagnostics when aggregate values are used
as hash references.
Preserve mismatched array and hash literal delimiters in syntax-error
context, matching Perl's diagnostics.
Report evaluated missing labels for the legacy `CORE::dump` operator.
Report Perl-compatible undefined subroutine-reference errors for ordinary
and tied scalar codereferences.
Reject attempts to reopen active filehandles as directory handles (and vice
versa), with Perl-compatible lexical and Unicode handle diagnostics.
Report Perl-compatible UTF-8-layer errors from `sysread` and `syswrite`.
Reject non-reference and wrong-reference-type values in declared-reference
`foreach` iterators with Perl-compatible diagnostics.

- Avoid transient helper allocation while counting ordinary Perl UTF strings.

- Reuse static literal regular-expression match wrappers per runtime and call
Expand Down Expand Up @@ -96,7 +141,8 @@ priorities and future plans.
closure capture, and experimental `@_` warnings.

- Preserve state-variable initialization across `goto` loops after nested
closure compilation.
closure compilation and parenthesized logical defaults on both execution
backends.

- Preserve async Future ownership across interpreter suspension and resume.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ public static void resetAll() {
// engine resets run multiple top-level programs in one JVM, so give
// the next program a fresh wrapper around the process standard input.
RuntimeIO.setStdin(new RuntimeIO(new StandardIO(System.in)));
RuntimeIO.resetLastReadlineHandle();
DataSection.reset();
}
}
Expand Down Expand Up @@ -653,12 +654,10 @@ private static RuntimeList executeCodeImpl(RuntimeCode runtimeCode, Node ast, Em
// internal control-flow marker.
result = RuntimeCode.resolveTailCalls(result, executionContext);

// A labelled goto that reaches the outermost execution boundary
// has no remaining lexical scope in which it can be resolved.
// Do not silently return its marker as the program result: Perl
// reports the missing label at this point.
if (isMainProgram && result instanceof RuntimeControlFlowList flow
&& flow.getControlFlowType() == ControlFlowType.GOTO) {
// A non-local control marker that reaches the outermost execution
// boundary has no remaining lexical scope in which it can be
// resolved. Do not silently return it as the program result.
if (isMainProgram && result instanceof RuntimeControlFlowList flow) {
throw new PerlCompilerException(flow.marker.buildErrorMessage());
}

Expand Down
Loading
Loading