Commit | Line | Data |
9d2bbe64 |
1 | #include <EXTERN.h> |
2 | #include <perl.h> |
3 | #include <XSUB.h> |
4 | |
f681a178 |
5 | static int |
9d2bbe64 |
6 | my_runops(pTHX) |
7 | { |
8 | HV* regexp_hv = get_hv( "B::C::REGEXP", 0 ); |
9 | SV* key = newSViv( 0 ); |
10 | |
11 | do { |
12 | PERL_ASYNC_CHECK(); |
13 | |
14 | if( PL_op->op_type == OP_QR ) { |
15 | PMOP* op; |
16 | REGEXP* rx = PM_GETRE( (PMOP*)PL_op ); |
17 | SV* rv = newSViv( 0 ); |
18 | |
a02a5408 |
19 | Newx( op, 1, PMOP ); |
9d2bbe64 |
20 | Copy( PL_op, op, 1, PMOP ); |
21 | /* we need just the flags */ |
22 | op->op_next = NULL; |
23 | op->op_sibling = NULL; |
24 | op->op_first = NULL; |
25 | op->op_last = NULL; |
26 | op->op_pmreplroot = NULL; |
27 | op->op_pmreplstart = NULL; |
28 | op->op_pmnext = NULL; |
29 | #ifdef USE_ITHREADS |
30 | op->op_pmoffset = 0; |
31 | #else |
32 | op->op_pmregexp = 0; |
33 | #endif |
34 | |
35 | sv_setiv( key, PTR2IV( rx ) ); |
36 | sv_setref_iv( rv, "B::PMOP", PTR2IV( op ) ); |
37 | |
38 | hv_store_ent( regexp_hv, key, rv, 0 ); |
39 | } |
40 | } while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX))); |
41 | |
42 | SvREFCNT_dec( key ); |
43 | |
44 | TAINT_NOT; |
45 | return 0; |
46 | } |
47 | |
48 | MODULE=B__C PACKAGE=B::C |
49 | |
1aebe30a |
50 | PROTOTYPES: DISABLE |
51 | |
9d2bbe64 |
52 | BOOT: |
53 | PL_runops = my_runops; |