diff options
author | Karl Williamson <public@khwilliamson.com> | 2012-08-24 14:38:02 -0600 |
---|---|---|
committer | Karl Williamson <public@khwilliamson.com> | 2012-08-25 23:21:29 -0600 |
commit | 872dd7e02968b0b8c2eb1b53c82bd05cff5080c9 (patch) | |
tree | 64a3e42904361fd9941d9bd55f82ab21caa334c6 | |
parent | 6dd9dce957a17e45449a2fa4e684b1b241302529 (diff) | |
download | perl-872dd7e02968b0b8c2eb1b53c82bd05cff5080c9.tar.gz |
regexec.c: Use get method instead of internals
A new get method has been written to access the internals of a swash
it's best to use it.
This also moves the error checking to the method
-rw-r--r-- | regcomp.c | 6 | ||||
-rw-r--r-- | regexec.c | 14 | ||||
-rw-r--r-- | utf8.c | 8 |
3 files changed, 12 insertions, 16 deletions
@@ -11602,11 +11602,7 @@ parseit: NULL, /* No inversion list */ &swash_init_flags ); - if ( ! swash - || ! SvROK(swash) - || ! SvTYPE(SvRV(swash)) == SVt_PVHV - || ! (invlist = _get_swash_invlist(swash))) - { + if (! swash || ! (invlist = _get_swash_invlist(swash))) { if (swash) { SvREFCNT_dec(swash); swash = NULL; @@ -6740,20 +6740,14 @@ S_core_regclass_swash(pTHX_ const regexp *prog, register const regnode* node, bo if (listsvp) { SV* matches_string = newSVpvn("", 0); - SV** invlistsvp; /* Use the swash, if any, which has to have incorporated into it all * possibilities */ - if ( sw - && SvROK(sw) - && SvTYPE(SvRV(sw)) == SVt_PVHV - && (invlistsvp = hv_fetchs(MUTABLE_HV(SvRV(sw)), "INVLIST", FALSE))) - { - invlist = *invlistsvp; - } - else if (si && si != &PL_sv_undef) { + if ((! sw || (invlist = _get_swash_invlist(sw)) == NULL) + && (si && si != &PL_sv_undef)) + { - /* If no swash, use the input nitialization string, if available */ + /* If no swash, use the input initialization string, if available */ sv_catsv(matches_string, si); } @@ -4142,10 +4142,16 @@ Perl__swash_to_invlist(pTHX_ SV* const swash) SV* Perl__get_swash_invlist(pTHX_ SV* const swash) { - SV** ptr = hv_fetchs(MUTABLE_HV(SvRV(swash)), "INVLIST", FALSE); + SV** ptr; PERL_ARGS_ASSERT__GET_SWASH_INVLIST; + if (! SvROK(swash) || SvTYPE(SvRV(swash)) != SVt_PVHV) { + return NULL; + } + + ptr = hv_fetchs(MUTABLE_HV(SvRV(swash)), "INVLIST", FALSE); + if (! ptr) { return NULL; } |