In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/fee9ff27862b4adbfe2630331c0a13155dad90e2?hp=ca53e5d538c69672817c510e43c842c5a2bd2557>
- Log ----------------------------------------------------------------- commit fee9ff27862b4adbfe2630331c0a13155dad90e2 Merge: ca53e5d 6a83a53 Author: Tony Cook <t...@develop-help.com> Date: Mon Nov 18 16:44:40 2013 +1100 [perl #120535] Add UTF8 flag to B::HV->ARRAY keys commit 6a83a53c49edb3a5ba834feb552a25e8b42a019f Author: Tony Cook <t...@develop-help.com> Date: Mon Nov 18 15:20:16 2013 +1100 un-TODO the test for 120535, Reini's patch fixes it M ext/B/t/b.t commit fa0789a79059cdefbf7197a9330c0fd6a06011b2 Author: Reini Urban <rur...@x-ray.at> Date: Wed Nov 13 13:18:09 2013 -0600 Add UTF8 flag to keys returned by B::HV->ARRAY hv_iternextsv() ignores the HEK flags, but we do care about the UTF8 flag at least when returning hash keys from B::HV->ARRAY M ext/B/B.xs commit cc54be842f98c857dd862cc0172a4cc56973c027 Author: Tony Cook <t...@develop-help.com> Date: Mon Nov 18 15:16:31 2013 +1100 TODO test for 120535 M ext/B/t/b.t ----------------------------------------------------------------------- Summary of changes: ext/B/B.xs | 16 ++++++++++------ ext/B/t/b.t | 7 +++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ext/B/B.xs b/ext/B/B.xs index 0b097d4..1c44857 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -1952,14 +1952,18 @@ HvARRAY(hv) B::HV hv PPCODE: if (HvUSEDKEYS(hv) > 0) { - SV *sv; - char *key; - I32 len; + HE *he; (void)hv_iterinit(hv); EXTEND(sp, HvUSEDKEYS(hv) * 2); - while ((sv = hv_iternextsv(hv, &key, &len))) { - mPUSHp(key, len); - PUSHs(make_sv_object(aTHX_ sv)); + while ((he = hv_iternext(hv))) { + if (HeSVKEY(he)) { + mPUSHs(HeSVKEY(he)); + } else if (HeKUTF8(he)) { + PUSHs(newSVpvn_flags(HeKEY(he), HeKLEN(he), SVf_UTF8|SVs_TEMP)); + } else { + mPUSHp(HeKEY(he), HeKLEN(he)); + } + PUSHs(make_sv_object(aTHX_ HeVAL(he))); } } diff --git a/ext/B/t/b.t b/ext/B/t/b.t index cbf9e1f..1fee139 100644 --- a/ext/B/t/b.t +++ b/ext/B/t/b.t @@ -415,4 +415,11 @@ EOS } } +{ # [perl #120535] + my %h = ( "\x{100}" => 1 ); + my $b = B::svref_2object(\%h); + my ($k, $v) = $b->ARRAY; + is($k, "\x{100}", "check utf8 preserved by B::HV::ARRAY"); +} + done_testing(); -- Perl5 Master Repository