xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/ext/B/C/C.xs (revision 0:68f95e015346)
1 #include <EXTERN.h>
2 #include <perl.h>
3 #include <XSUB.h>
4 
5 int
my_runops(pTHX)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 
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 
48 MODULE=B__C PACKAGE=B::C
49 
50 PROTOTYPES: DISABLE
51 
52 BOOT:
53     PL_runops = my_runops;
54