From: Florian Ragwitz Date: Sat, 22 Aug 2009 09:23:20 +0000 (+0200) Subject: Backport another speedup tweak from bleadperl. X-Git-Tag: 0.12_02~5 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3277bbc437306ad76a15c90b4271b4534ea633a5;p=gitmo%2FClass-C3-XS.git Backport another speedup tweak from bleadperl. --- diff --git a/XS.xs b/XS.xs index 0d22ac8..02f80ba 100644 --- a/XS.xs +++ b/XS.xs @@ -184,15 +184,16 @@ __mro_linear_isa_c3(pTHX_ HV* stash, HV* cache, I32 level) SV** seq_ptr = AvARRAY(seq) + 1; while(seq_items--) { SV* const seqitem = *seq_ptr++; - HE* const he = hv_fetch_ent(tails, seqitem, 0, 0); - if(!he) { - if(!hv_store_ent(tails, seqitem, newSViv(1), 0)) { - croak("failed to store value in hash"); - } - } - else { + /* LVALUE fetch will create a new undefined SV if necessary + */ + HE* const he = hv_fetch_ent(tails, seqitem, 1, 0); + if(he) { SV* const val = HeVAL(he); + /* This will increment undef to 1, which is what we + want for a newly created entry. */ sv_inc(val); + } else { + croak("failed to store value in hash"); } } }