This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
plugin mechanism to rewrite calls to a subroutine
authorZefram <zefram@fysh.org>
Sun, 3 Oct 2010 13:53:16 +0000 (14:53 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 11 Oct 2010 00:25:15 +0000 (17:25 -0700)
commitd908838680ec40ea0e85f59ee66f5f56a225f9b4
treebe5eafa5cf981949a4e4bc308be6797443882229
parentb98b62bccdcb420ec5430eb831023e3d91ab2fa0
plugin mechanism to rewrite calls to a subroutine

New magic type PERL_MAGIC_checkcall attaches a function to a CV, which
will be called as the second half of the op checker for an entersub
op calling that CV.  Default state, in the absence of this magic,
is to process the CV's prototype if it has one, or apply list context
to all the arguments if not.  New API functions cv_get_call_checker()
and cv_set_call_checker() provide a clean interface to this facility,
hiding the internal use of magic.

Expose in the API the new functions rv2cv_op_cv(),
ck_entersub_args_list(), ck_entersub_args_proto(), and
ck_entersub_args_proto_or_list(), which are meaningful segments of
standard entersub op checking and are likely to be useful in plugged-in
call checker functions.

Expose new API function op_contextualize(), which is a public interface
to the internal scalar()/list()/scalarvoid() functions.  This API is
likely to be required in most plugged-in call checker functions.

Incidentally add new function mg_free_type(), in the API, which will
remove magic of one type from an SV.  (mg_free() removes all magic,
and there isn't anything else more selective.)
18 files changed:
MANIFEST
cv.h
dump.c
embed.fnc
embed.h
ext/XS-APItest/APItest.xs
ext/XS-APItest/t/call_checker.t [new file with mode: 0644]
ext/XS-APItest/t/magic_chain.t [new file with mode: 0644]
ext/XS-APItest/t/op_contextualize.t [new file with mode: 0644]
ext/XS-APItest/t/rv2cv_op_cv.t [new file with mode: 0644]
global.sym
mg.c
op.c
op.h
perl.h
proto.h
sv.c
toke.c