Recursive calls incorrectly enforce block prototype on scalar coderef
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 49/100
Direzione di ricerca
Start by reading the recursive call in the reproducer and tracing how PerlOnJava checks prototypes for named subroutine calls; the issue identifies failures on both the JVM and interpreter backends. Add the requested regression coverage, then run the focused reproducer on both backends and the HOP-Stream 0.03 upstream suite. Done means all three pass, including HOP::Stream loading successfully.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
PerlOnJava rejects a valid recursive call to a subroutine declared with a block prototype. HOP-Stream 0.03 uses transform (&$) and recursively calls transform($f, tail($s)) from inside transform. Standard Perl accepts and runs this code, but PerlOnJava applies the block prototype check to the recursive call and rejects the scalar code reference $f.
Minimal reproducer
sub transform (&$) {
my ($f, $x) = @_;
return $x if $x <= 1;
return transform($f, $x - 1);
}
print transform { $_[0] + 1 } 2;
Expected output: 2.
PerlOnJava reports:
Type of arg 1 to main::transform must be block or sub {} (not scalar variable)
Evidence
- Distribution: HOP-Stream 0.03
- CPAN random tester run:
20261011-174632-64969 - Failing tests:
t/00-load.t,t/10-streams.t, andt/pod-coverage.t; all fail because loadingHOP::Streamfails at its recursivetransform($f, tail($s))call. - System Perl 5.42.2: PASS, all 64 runnable tests; POD coverage was skipped because
Test::Pod::Coverage1.04 was unavailable. - PerlOnJava v5.44.1: FAIL on both JVM and interpreter backends. The focused module-load reproduction also fails on both backends.
- The distribution is pure Perl and has no native-code prerequisite.
This concerns prototype checking on a recursive named call. It is distinct from #1491, which tracked parsing an anonymous block followed by another argument.
Acceptance criteria
- The focused reproducer passes on system Perl and both PerlOnJava backends.
- Add permanent regression coverage for passing a scalar coderef to a block-prototype subroutine through a recursive call from within that subroutine.
- HOP-Stream 0.03 loads successfully and its upstream suite passes under PerlOnJava.
- Lingua principale
- Perl
- Stelle
- 64
- Fork
- 7
- Merge medio
- 5h 7m
- PR unite (30g)
- 201
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di fglock/PerlOnJava
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
fglock/PerlOnJava#1651 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
fglock/PerlOnJava#1579 ·
I maintainer di solito rispondono entro 1 giorno
-
area:cpan-port area:unicode bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
fglock/PerlOnJava#1341 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 68/100
fglock/PerlOnJava#1735 ·
I maintainer di solito rispondono entro 1 giorno
-
area:backend area:cpan-port bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
fglock/PerlOnJava#1713 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di fglock/PerlOnJava
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
bioconda/bioconda-recipes#70187 ·
I maintainer di solito rispondono entro 2 giorni
-
documentation Needs Triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 93/100
I maintainer di solito rispondono entro 1 giorno
-
Proposed Text EditsAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
curl/everything-curl#658 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
PDLPorters/pdl#561 ·