]> git.vpit.fr Git - perl/modules/re-engine-Plugin.git/commitdiff
Fall back to the default behaviour when the re::engine::Plugin hint can't be found...
authorVincent Pit <vince@profvince.com>
Sat, 29 Aug 2009 15:22:13 +0000 (17:22 +0200)
committerVincent Pit <vince@profvince.com>
Sat, 29 Aug 2009 15:22:13 +0000 (17:22 +0200)
Plugin.xs

index 28558a73b42c028e08e81a67e12e7c52797bfae3..c5e9ebd465648482d86e78dfdc9721861af6c46e 100644 (file)
--- a/Plugin.xs
+++ b/Plugin.xs
@@ -271,6 +271,10 @@ Plugin_comp(pTHX_ SV * const pattern, U32 flags)
     re__engine__Plugin re;
     const rep_hint_t *h;
 
     re__engine__Plugin re;
     const rep_hint_t *h;
 
+    h = rep_hint();
+    if (!h) /* This looks like a pragma leak. Apply the default behaviour */
+        return re_compile(pattern, flags);
+
     /* exp/xend version of the pattern & length */
     STRLEN plen;
     char*  exp = SvPV((SV*)pattern, plen);
     /* exp/xend version of the pattern & length */
     STRLEN plen;
     char*  exp = SvPV((SV*)pattern, plen);
@@ -311,12 +315,10 @@ Plugin_comp(pTHX_ SV * const pattern, U32 flags)
     re->pattern = (SV*)pattern;
     SvREFCNT_inc(re->pattern);
 
     re->pattern = (SV*)pattern;
     SvREFCNT_inc(re->pattern);
 
-    h = rep_hint();
-
     /* If there's an exec callback, store it into the private object so
      * that it will be the one to be called, even if the engine changes
      * in between */
     /* If there's an exec callback, store it into the private object so
      * that it will be the one to be called, even if the engine changes
      * in between */
-    if (h && h->exec) {
+    if (h->exec) {
         re->cb_exec = h->exec;
        SvREFCNT_inc_simple_void_NN(h->exec);
     }
         re->cb_exec = h->exec;
        SvREFCNT_inc_simple_void_NN(h->exec);
     }
@@ -325,12 +327,10 @@ Plugin_comp(pTHX_ SV * const pattern, U32 flags)
     re->cb_num_capture_buff_STORE  = NULL;
     re->cb_num_capture_buff_LENGTH = NULL;
 
     re->cb_num_capture_buff_STORE  = NULL;
     re->cb_num_capture_buff_LENGTH = NULL;
 
-    /*
-     * Call our callback function if one was defined, if not we've
+    /* Call our callback function if one was defined, if not we've
      * already set up all the stuff we're going to to need for
      * already set up all the stuff we're going to to need for
-     * subsequent exec and other calls
-     */
-    if (h && h->comp) {
+     * subsequent exec and other calls */
+    if (h->comp) {
         ENTER;    
         SAVETMPS;
    
         ENTER;    
         SAVETMPS;