develooper Front page | perl.perl5.porters | Postings from August 2011

Re: Predeclaration vs. scalar types - no worries

Thread Previous | Thread Next
Nicholas Clark
August 14, 2011 02:50
Re: Predeclaration vs. scalar types - no worries
Message ID:
On Sat, Aug 13, 2011 at 09:35:33PM +0200, Steffen Mueller wrote:
> On 08/13/2011 06:23 PM, Chip Salzenberg wrote:
> > On Sat, Aug 13, 2011 at 8:00 AM, Nicholas Clark<>  wrote:
> >> I'd feel a lot calmer if someone were able to test build CPAN (ie as much
> >> of it as possible for their OS etc) and compare this branch to blead
> >
> > That's a test I had planned anyway.  It's been done before; is there a
> > test harness already, or did everyone make it up as they went?

> This was a lot of work and I would rather not do that again. If I had 
> to, I'd most certainly try to automate more.
> One obvious way to try to improve the process would be to have the same 
> machine smoke both branches and then look at only the dists where the 
> result is different.

That seems like a very good way to go.

Also, I fear that this particular plan of Chip's would really benefit
from being smoked on CPAN (at least) tice. Once with -DDEBUGGING to
enable assertions, to catch assumptions in CPAN code analogous to

commit 13dc07cdac031027ff4a529a4c28f3d2b2c4ad9e
Author: Chip Salzenberg <>
Date:   Fri Aug 12 17:45:05 2011 -0700

    minimize copy of strings as well as numbers; tweak pad.c which assumed otherwise

diff --git a/pad.c b/pad.c
index da35a09..406b9d9 100644
--- a/pad.c
+++ b/pad.c
@@ -1243,12 +1243,14 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv,
 	   type as the source, independent of the flags set, and on it being
 	   "good" and only copying flag bits and pointers that it understands.
-	SV *new_namesv = newSVsv(*out_name_sv);
 	AV *  const ocomppad_name = PL_comppad_name;
 	PAD * const ocomppad = PL_comppad;
 	PL_comppad_name = MUTABLE_AV(AvARRAY(padlist)[0]);
 	PL_comppad = MUTABLE_AV(AvARRAY(padlist)[1]);
 	PL_curpad = AvARRAY(PL_comppad);
+	SV *new_namesv = newSVsv(*out_name_sv);
+	if (SvTYPE(new_namesv) < SVt_PVNV)
+	    sv_upgrade(new_namesv, SVt_PVNV); /* pad names use SvNVX */
 	    = pad_alloc_name(new_namesv,


and once with full-on optimisation, to try to tickle crashes caused by
anything else.

[and possibly also with/without threads]

Maybe I'm too paranoid. Or maybe that's just what the bugs want me to think.

Nicholas Clark

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About