Silence some VC6 compiler warnings in the regex code
[p5sagit/p5-mst-13.2.git] / ext / re / re.xs
index aa601cf..c569ad1 100644 (file)
 
 START_EXTERN_C
 
-extern regexp* my_re_compile (pTHX_ char* exp, char* xend, PMOP* pm);
-extern I32     my_regexec (pTHX_ regexp* prog, char* stringarg, char* strend,
+extern REGEXP* my_re_compile (pTHX_ const SV * const pattern, const U32 pm_flags);
+extern I32     my_regexec (pTHX_ REGEXP * const prog, char* stringarg, char* strend,
                            char* strbeg, I32 minend, SV* screamer,
                            void* data, U32 flags);
 
-extern char*   my_re_intuit_start (pTHX_ regexp *prog, SV *sv, char *strpos,
-                                   char *strend, U32 flags,
+extern char*   my_re_intuit_start (pTHX_ REGEXP * const prog, SV *sv, char *strpos,
+                                   char *strend, const U32 flags,
                                    struct re_scream_pos_data_s *data);
-extern SV*     my_re_intuit_string (pTHX_ regexp *prog);
+extern SV*     my_re_intuit_string (pTHX_ REGEXP * const prog);
 
-extern void    my_regfree (pTHX_ struct regexp* r);
+extern void    my_regfree (pTHX_ REGEXP * const r);
+
+extern void my_reg_numbered_buff_fetch(pTHX_ REGEXP * const rx, const I32 paren,
+                                     SV * const usesv);
+extern void my_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren,
+                                       SV const * const value);
+extern I32 my_reg_numbered_buff_length(pTHX_ REGEXP * const rx, const I32 paren);
+
+extern SV* my_reg_named_buff_fetch(pTHX_ REGEXP * const rx, SV * const key,
+                                      const U32 flags);
+
+extern SV*      my_reg_qr_package(pTHX_ REGEXP * const rx);
 #if defined(USE_ITHREADS)
-extern void*   my_regdupe (pTHX_ const regexp *r, CLONE_PARAMS *param);
+extern void*   my_regdupe (pTHX_ REGEXP * const r, CLONE_PARAMS *param);
 #endif
 
 EXTERN_C const struct regexp_engine my_reg_engine;
@@ -36,12 +47,17 @@ const struct regexp_engine my_reg_engine = {
         my_re_intuit_start, 
         my_re_intuit_string, 
         my_regfree, 
+        my_reg_numbered_buff_fetch,
+        my_reg_numbered_buff_store,
+        my_reg_numbered_buff_length,
+        my_reg_named_buff_fetch,
+        my_reg_qr_package,
 #if defined(USE_ITHREADS)
         my_regdupe 
 #endif
 };
 
-regexp *
+REGEXP *
 get_re_arg( pTHX_ SV *sv, U32 flags, MAGIC **mgp) {
     MAGIC *mg;
     if (sv) {
@@ -53,7 +69,7 @@ get_re_arg( pTHX_ SV *sv, U32 flags, MAGIC **mgp) {
             (mg = mg_find(sv, PERL_MAGIC_qr))) /* assign deliberate */
         {        
             if (mgp) *mgp = mg;
-            return (regexp *)mg->mg_obj;       
+            return (REGEXP *)mg->mg_obj;       
         }
     }    
     if (mgp) *mgp = NULL;
@@ -71,27 +87,12 @@ install()
        
 
 void
-is_regexp(sv)
-    SV * sv
-PROTOTYPE: $
-PPCODE:
-{
-    if ( get_re_arg( aTHX_ sv, 0, NULL ) ) 
-    {
-        XSRETURN_YES;
-    } else {
-        XSRETURN_NO;
-    }
-    /* NOTREACHED */        
-}        
-       
-void
 regexp_pattern(sv)
     SV * sv
 PROTOTYPE: $
 PREINIT:
     MAGIC *mg;
-    regexp *re;
+    REGEXP *re;
 PPCODE:
 {
     /*
@@ -120,7 +121,7 @@ PPCODE:
                modifiers" in this scenario. 
             */
 
-            char *fptr = "msix";
+            char *fptr = INT_PAT_MODS;
             char ch;
             U16 match_flags = (U16)((re->extflags & PMf_COMPILETIME) >> 12);
 
@@ -140,11 +141,8 @@ PPCODE:
             XSRETURN(2);
         } else {
             /* Scalar, so use the string that Perl would return */
-            if (!mg->mg_ptr) 
-                CALLREG_STRINGIFY(mg,0,0);
-            
             /* return the pattern in (?msix:..) format */
-            pattern = sv_2mortal(newSVpvn(mg->mg_ptr,mg->mg_len));
+            pattern = sv_2mortal(newSVpvn(re->wrapped,re->wraplen));
             if (re->extflags & RXf_UTF8) 
                 SvUTF8_on(pattern);
             XPUSHs(pattern);
@@ -179,7 +177,7 @@ regmust(sv)
     SV * sv
 PROTOTYPE: $
 PREINIT:
-    regexp *re;
+    REGEXP *re;
 PPCODE:
 {
     if ( re = get_re_arg( aTHX_ sv, 0, 0) ) /* assign deliberate */
@@ -203,150 +201,3 @@ PPCODE:
     XSRETURN_UNDEF;
 }
 
-void
-regname(sv, qr = NULL, all = NULL)
-    SV * sv
-    SV * qr
-    SV * all
-PROTOTYPE: ;$$$
-PREINIT:
-    regexp *re = NULL;
-    SV *bufs = NULL;
-PPCODE:
-{
-    re = get_re_arg( aTHX_ qr, 1, NULL);
-    if (SvPOK(sv) && re && re->paren_names) {
-        bufs = Perl_reg_named_buff_get(aTHX_ sv, re ,all && SvTRUE(all));
-        if (bufs) {
-            if (all && SvTRUE(all))
-                XPUSHs(newRV(bufs));
-            else
-                XPUSHs(SvREFCNT_inc(bufs));
-            XSRETURN(1);
-        }
-    }
-    XSRETURN_UNDEF;
-}        
-    
-void
-regnames(sv = NULL, all = NULL)
-    SV *sv
-    SV *all
-PROTOTYPE: ;$$
-PREINIT:
-    regexp *re = NULL;
-    IV count = 0;
-PPCODE:
-{
-    re = get_re_arg( aTHX_  sv, 1, NULL );
-    if (re && re->paren_names) {
-        HV *hv= re->paren_names;
-        (void)hv_iterinit(hv);
-        while (1) {
-            HE *temphe = hv_iternext_flags(hv,0);
-            if (temphe) {
-                IV i;
-                IV parno = 0;
-                SV* sv_dat = HeVAL(temphe);
-                I32 *nums = (I32*)SvPVX(sv_dat);
-                for ( i = 0; i < SvIVX(sv_dat); i++ ) {
-                    if ((I32)(re->lastcloseparen) >= nums[i] &&
-                        re->startp[nums[i]] != -1 &&
-                        re->endp[nums[i]] != -1)
-                    {
-                        parno = nums[i];
-                        break;
-                    }
-                }
-                if (parno || (all && SvTRUE(all))) {
-                    STRLEN len;
-                    char *pv = HePV(temphe, len);
-                    if ( GIMME_V == G_ARRAY ) 
-                        XPUSHs(newSVpvn(pv,len));
-                    count++;
-                }
-            } else {
-                break;
-            }
-        }
-    }
-    if ( GIMME_V == G_ARRAY ) 
-        XSRETURN(count);
-    else 
-        XSRETURN_UNDEF;
-}    
-
-void
-regnames_iterinit(sv = NULL)
-    SV * sv
-PROTOTYPE: ;$
-PREINIT:
-    regexp *re = NULL;
-PPCODE:
-{
-    re = get_re_arg( aTHX_  sv, 1, NULL );
-    if (re && re->paren_names) {
-        (void)hv_iterinit(re->paren_names);
-        XPUSHs(newSViv(HvTOTALKEYS(re->paren_names)));
-    } else {
-        XSRETURN_UNDEF;
-    }  
-}
-
-void
-regnames_iternext(sv = NULL, all = NULL)
-    SV *sv
-    SV *all
-PROTOTYPE: ;$$
-PREINIT:
-    regexp *re;
-PPCODE:
-{
-    re = get_re_arg( aTHX_  sv, 1, NULL ); 
-    if (re && re->paren_names) {
-        HV *hv= re->paren_names;
-        while (1) {
-            HE *temphe = hv_iternext_flags(hv,0);
-            if (temphe) {
-                IV i;
-                IV parno = 0;
-                SV* sv_dat = HeVAL(temphe);
-                I32 *nums = (I32*)SvPVX(sv_dat);
-                for ( i = 0; i < SvIVX(sv_dat); i++ ) {
-                    if ((I32)(re->lastcloseparen) >= nums[i] &&
-                        re->startp[nums[i]] != -1 &&
-                        re->endp[nums[i]] != -1)
-                    {
-                        parno = nums[i];
-                        break;
-                    }
-                }
-                if (parno || (all && SvTRUE(all))) {
-                    STRLEN len;
-                    char *pv = HePV(temphe, len);
-                    XPUSHs(newSVpvn(pv,len));
-                    XSRETURN(1);    
-                }
-            } else {
-                break;
-            }
-        }
-    }
-    XSRETURN_UNDEF;
-}    
-
-void
-regnames_count(sv = NULL)
-    SV * sv
-PROTOTYPE: ;$
-PREINIT:
-    regexp *re = NULL;
-PPCODE:
-{
-    re = get_re_arg( aTHX_  sv, 1, NULL );
-    if (re && re->paren_names) {
-        XPUSHs(newSViv(HvTOTALKEYS(re->paren_names)));
-    } else {
-        XSRETURN_UNDEF;
-    }  
-}