Move Tie::Hash::NamedCapture::{FIRST,NEXT}KEY to NamedCapture.xs
authorNicholas Clark <nick@ccl4.org>
Thu, 14 Oct 2010 13:09:15 +0000 (14:09 +0100)
committerNicholas Clark <nick@ccl4.org>
Thu, 14 Oct 2010 13:34:29 +0000 (14:34 +0100)
ext/Tie-Hash-NamedCapture/NamedCapture.xs
universal.c

index b51deda..248efea 100644 (file)
@@ -6,6 +6,33 @@ MODULE = Tie::Hash::NamedCapture       PACKAGE = Tie::Hash::NamedCapture
 PROTOTYPES: DISABLE
 
 void
+FIRSTKEY(...)
+    ALIAS:
+       Tie::Hash::NamedCapture::NEXTKEY = 1
+    PREINIT:
+       REGEXP *const rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
+       U32 flags;
+       SV *ret;
+       const int expect = ix ? 2 : 1;
+       const U32 action = ix ? RXapif_NEXTKEY : RXapif_FIRSTKEY;
+    PPCODE:
+       if (items != expect)
+           croak_xs_usage(cv, expect == 2 ? "$lastkey" : "");
+
+       if (!rx || !SvROK(ST(0)))
+           XSRETURN_UNDEF;
+
+       flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0))));
+
+       PUTBACK;
+       ret = RX_ENGINE(rx)->named_buff_iter(aTHX_ (rx),
+                                            expect >= 2 ? ST(1) : NULL,
+                                            flags | action);
+       SPAGAIN;
+
+       PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
+
+void
 flags(...)
     PPCODE:
        EXTEND(SP, 2);
index 2cfb241..1946318 100644 (file)
@@ -1321,46 +1321,6 @@ XS(XS_Tie_Hash_NamedCapture_EXISTS)
     S_named_capture_common(aTHX_ cv, FALSE, 2, FALSE, RXapif_EXISTS);
 }
 
-static void
-S_named_capture_iter_common(pTHX_ CV *const cv, const int expect,
-                           const U32 action)
-{
-    dVAR;
-    dXSARGS;
-    REGEXP * rx;
-    U32 flags;
-    SV * ret;
-
-    if (items != expect)
-       croak_xs_usage(cv, expect == 2 ? "$lastkey" : "");
-
-    rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
-
-    if (!rx || !SvROK(ST(0)))
-        XSRETURN_UNDEF;
-
-    SP -= items;
-    PUTBACK;
-
-    flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0))));
-    ret = RX_ENGINE(rx)->named_buff_iter(aTHX_ (rx), expect >= 2 ? ST(1) : NULL,
-                                        flags | action);
-
-    SPAGAIN;
-    PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
-    XSRETURN(1);
-}
-
-XS(XS_Tie_Hash_NamedCapture_FIRSTK)
-{
-    S_named_capture_iter_common(aTHX_ cv, 1, RXapif_FIRSTKEY);
-}
-
-XS(XS_Tie_Hash_NamedCapture_NEXTK)
-{
-    S_named_capture_iter_common(aTHX_ cv, 2, RXapif_NEXTKEY);
-}
-
 XS(XS_Tie_Hash_NamedCapture_SCALAR)
 {
     S_named_capture_common(aTHX_ cv, FALSE, 1, FALSE, RXapif_SCALAR);
@@ -1421,8 +1381,6 @@ struct xsub_details details[] = {
     {"Tie::Hash::NamedCapture::DELETE", XS_Tie_Hash_NamedCapture_DELETE, NULL},
     {"Tie::Hash::NamedCapture::CLEAR", XS_Tie_Hash_NamedCapture_CLEAR, NULL},
     {"Tie::Hash::NamedCapture::EXISTS", XS_Tie_Hash_NamedCapture_EXISTS, NULL},
-    {"Tie::Hash::NamedCapture::FIRSTKEY", XS_Tie_Hash_NamedCapture_FIRSTK, NULL},
-    {"Tie::Hash::NamedCapture::NEXTKEY", XS_Tie_Hash_NamedCapture_NEXTK, NULL},
     {"Tie::Hash::NamedCapture::SCALAR", XS_Tie_Hash_NamedCapture_SCALAR, NULL},
 };