summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <public@khwilliamson.com>2012-08-24 14:38:02 -0600
committerKarl Williamson <public@khwilliamson.com>2012-08-25 23:21:29 -0600
commit872dd7e02968b0b8c2eb1b53c82bd05cff5080c9 (patch)
tree64a3e42904361fd9941d9bd55f82ab21caa334c6
parent6dd9dce957a17e45449a2fa4e684b1b241302529 (diff)
downloadperl-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.c6
-rw-r--r--regexec.c14
-rw-r--r--utf8.c8
3 files changed, 12 insertions, 16 deletions
diff --git a/regcomp.c b/regcomp.c
index c856c08379..5a771767cb 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -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;
diff --git a/regexec.c b/regexec.c
index 9ddfdb4344..5da40f8736 100644
--- a/regexec.c
+++ b/regexec.c
@@ -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);
}
diff --git a/utf8.c b/utf8.c
index 6c43f8246e..b12d82c0ef 100644
--- a/utf8.c
+++ b/utf8.c
@@ -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;
}