This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Implement facility to plug in syntax triggered by keywords
authorJesse Vincent <jesse@bestpractical.com>
Thu, 5 Nov 2009 16:14:45 +0000 (11:14 -0500)
committerJesse Vincent <jesse@bestpractical.com>
Thu, 5 Nov 2009 16:14:45 +0000 (11:14 -0500)
commit88e1f1a2657a3a28cf3a7811902a09aca9e18986
treee7280ddd6c04915543c3850e403d06b8b5892524
parent9b583d5830e4b19cc53ab2180c0fd30418e764ed
Implement facility to plug in syntax triggered by keywords

Date: Tue, 27 Oct 2009 01:29:40 +0000
From: Zefram <zefram@fysh.org>
To: perl5-porters@perl.org
Subject: bareword sub lookups

Attached is a patch that changes how the tokeniser looks up subroutines,
when they're referenced by a bareword, for prototype and const-sub
purposes.  Formerly, it has looked up bareword subs directly in the
package, which is contrary to the way the generated op tree looks up
the sub, via an rv2cv op.  The patch makes the tokeniser generate the
rv2cv op earlier, and dig around in that.

The motivation for this is to allow modules to hook the rv2cv op
creation, to affect the name->subroutine lookup process.  Currently,
such hooking affects op execution as intended, but everything goes wrong
with a bareword ref where the tokeniser looks at some unrelated CV,
or a blank space, in the package.  With the patch in place, an rv2cv
hook correctly affects the tokeniser and therefore the prototype-based
aspects of parsing.

The patch also changes ck_subr (which applies the argument context and
checking parts of prototype behaviour) to handle subs referenced by an
RV const op inside the rv2cv, where formerly it would only handle a gv
op inside the rv2cv.  This is to support the most likely kind of modified
rv2cv op.

[This commit includes the Makefile.PL for XS-APITest-KeywordRPN missing
from the original patch, as well as updates to perldiag.pod and a
MANIFEST sort]
25 files changed:
Configure
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
MANIFEST
NetWare/Makefile
Porting/Maintainers.pl
Porting/config.sh
djgpp/config.over
embed.fnc
ext/XS-APItest-KeywordRPN/KeywordRPN.pm [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/KeywordRPN.xs [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/Makefile.PL [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/README [new file with mode: 0644]
ext/XS-APItest-KeywordRPN/t/keyword_plugin.t [new file with mode: 0644]
perl.h
perlvars.h
perly.y
plan9/config_sh.sample
pod/perl5112delta.pod
pod/perldiag.pod
pod/perlfunc.pod
pod/perlsyn.pod
symbian/install.cfg
toke.c
utils/perlivp.PL