diff options
author | Father Chrysostomos <sprout@cpan.org> | 2011-11-21 16:12:50 -0800 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-11-21 16:24:45 -0800 |
commit | 8f82b567179d2b438689e3b9818104ecfaee6373 (patch) | |
tree | b73e2fd6e0a32ce326053af217d6cf2481eb21a9 /ext/XS-APItest/APItest.xs | |
parent | feb8397238ac35fa664623f94191b2f117ff687e (diff) | |
download | perl-8f82b567179d2b438689e3b9818104ecfaee6373.tar.gz |
Make const redef warnings default in newXS
There is no reason why constant redefinition warnings should be
default warnings for sub foo(){1}, but not for newCONSTSUB (which
calls newXS, which triggers the warning).
To make this work properly, I also had to import sv.c’s ‘are these
const subs from the same SV originally?’ logic. Constants created
with XS can have NULL for the SV (they return an empty list or
&PL_sv_undef), which means sv.c’s logic will stop *this=\&that from
warning if both this and that are such XS-created constants.
newCONSTSUB needed to be consistent with that. It required tweaking a
test I added a few commits ago, which arguably shouldn’t have warned
the way it was written.
As of this commit (and before it, too, come to think of it),
newXS_len_flags’s calling convention is quite awful and would need to
be throughly re-thunk before being made into an API, or probably sim-
ply never made into an API.
Diffstat (limited to 'ext/XS-APItest/APItest.xs')
-rw-r--r-- | ext/XS-APItest/APItest.xs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs index 46cc458d52..4f84c60d3e 100644 --- a/ext/XS-APItest/APItest.xs +++ b/ext/XS-APItest/APItest.xs @@ -1878,11 +1878,12 @@ call_method(methname, flags, ...) PUSHs(sv_2mortal(newSViv(i))); void -newCONSTSUB_type(stash, name, flags, type) +newCONSTSUB_type(stash, name, flags, type, sv) HV* stash SV* name I32 flags int type + SV* sv PREINIT: CV* cv; STRLEN len; @@ -1890,10 +1891,12 @@ newCONSTSUB_type(stash, name, flags, type) PPCODE: switch (type) { case 0: - cv = newCONSTSUB(stash, pv, NULL); + cv = newCONSTSUB(stash, pv, SvOK(sv) ? sv : NULL); break; case 1: - cv = newCONSTSUB_flags(stash, pv, len, flags | SvUTF8(name), NULL); + cv = newCONSTSUB_flags( + stash, pv, len, flags | SvUTF8(name), SvOK(sv) ? sv : NULL + ); break; } EXTEND(SP, 2); |