Recursive calls incorrectly enforce block prototype on scalar coderef
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 49/100
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Perl
- Étoiles
- 64
- Forks
- 7
- Merge moyen
- 5 h 7 min
- PR mergées (30 j)
- 201
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de fglock/PerlOnJava
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
fglock/PerlOnJava#1651 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
fglock/PerlOnJava#1579 ·
Les mainteneurs répondent en général sous 1 jour
-
area:cpan-port area:unicode bug
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
fglock/PerlOnJava#1341 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 Une demi-journée Accessibilité débutants 68/100
fglock/PerlOnJava#1735 ·
Les mainteneurs répondent en général sous 1 jour
-
area:backend area:cpan-port bug
Difficulté 4/5 3-5 jours Accessibilité débutants 22/100
fglock/PerlOnJava#1713 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de fglock/PerlOnJava
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 69/100
bioconda/bioconda-recipes#70187 ·
Les mainteneurs répondent en général sous 2 jours
-
documentation Needs Triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 93/100
Les mainteneurs répondent en général sous 1 jour
-
Proposed Text EditsOuverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
curl/everything-curl#658 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
PDLPorters/pdl#561 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
objectionary/eolang.sty#197 ·
Les mainteneurs répondent en général sous 1 jour