From: Nicholas Clark Date: Fri, 5 Oct 2007 21:46:39 +0000 (+0000) Subject: Eliminate the Perl_sv_catpvf() in TRIE_STORE_REVCHAR X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=73031816b5ef6a74869c06e84bb621841a623d0a;p=p5sagit%2Fp5-mst-13.2.git Eliminate the Perl_sv_catpvf() in TRIE_STORE_REVCHAR p4raw-id: //depot/perl@32036 --- diff --git a/regcomp.c b/regcomp.c index 8757eb1..b302561 100644 --- a/regcomp.c +++ b/regcomp.c @@ -1163,11 +1163,19 @@ is the recommended Unicode-aware way of saying #define TRIE_STORE_REVCHAR \ STMT_START { \ - SV *tmp = newSVpvs(""); \ - if (UTF) SvUTF8_on(tmp); \ - Perl_sv_catpvf( aTHX_ tmp, "%c", (int)uvc ); \ - av_push( revcharmap, tmp ); \ - } STMT_END + if (UTF) { \ + SV *zlopp = newSV(2); \ + char *flrbbbbb = SvPVX(zlopp); \ + const char *const kapow = uvuni_to_utf8(flrbbbbb, uvc & 0xFF); \ + SvCUR_set(zlopp, kapow - flrbbbbb); \ + SvPOK_on(zlopp); \ + SvUTF8_on(zlopp); \ + av_push(revcharmap, zlopp); \ + } else { \ + unsigned char ooooff = uvc; \ + av_push(revcharmap, newSVpvn(&ooooff, 1)); \ + } \ + } STMT_END #define TRIE_READ_CHAR STMT_START { \ wordlen++; \