1#include <EXTERN.h> 2#include <perl.h> 3#include <XSUB.h> 4 5int 6my_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 19 New( 671, op, 1, PMOP ); 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 48MODULE=B__C PACKAGE=B::C 49 50PROTOTYPES: DISABLE 51 52BOOT: 53 PL_runops = my_runops; 54