Recursive calls incorrectly enforce block prototype on scalar coderef
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 49/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Perl
- Estrelas
- 64
- Forks
- 7
- Merge médio
- 4h 57min
- PRs com merge (30d)
- 203
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de fglock/PerlOnJava
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
fglock/PerlOnJava#1651 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
fglock/PerlOnJava#1579 ·
Mantenedores costumam responder em até 1 dia
-
area:cpan-port area:unicode bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
fglock/PerlOnJava#1341 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 15/100
fglock/PerlOnJava#1795 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 12/100
fglock/PerlOnJava#1794 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de fglock/PerlOnJava
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
major/MySQLTuner-perl#1007 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 69/100
bioconda/bioconda-recipes#70187 ·
Mantenedores costumam responder em até 2 dias
-
documentation Needs Triage
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 93/100
Mantenedores costumam responder em até 1 dia
-
Proposed Text EditsAberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
curl/everything-curl#658 ·