ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Faster/Faster.xs
(Generate patch)

Comparing Faster/Faster.xs (file contents):
Revision 1.3 by root, Thu Mar 9 22:32:17 2006 UTC vs.
Revision 1.7 by root, Fri Mar 10 22:18:39 2006 UTC

3#include "XSUB.h" 3#include "XSUB.h"
4 4
5typedef CV *B__CV; 5typedef CV *B__CV;
6 6
7static OP *(*old_entersub)(pTHX); 7static OP *(*old_entersub)(pTHX);
8
9int count = 1;
10 8
11// this is, of course, a slower entersub 9// this is, of course, a slower entersub
12static OP * 10static OP *
13faster_entersub (pTHX) 11faster_entersub (pTHX)
14{ 12{
24 PL_op->op_ppaddr = old_entersub; 22 PL_op->op_ppaddr = old_entersub;
25 23
26 // only simple cv calls for now 24 // only simple cv calls for now
27 if (!PL_perldb && !PL_tainting 25 if (!PL_perldb && !PL_tainting
28 && SvTYPE (sv) == SVt_PVCV && !CvXSUB (sv) 26 && SvTYPE (sv) == SVt_PVCV && !CvXSUB (sv)
27 && CvSTART (sv) // must exist
29 && CvSTART (sv)->op_type != OP_NULL) // shield against compiling an already-compiled op 28 && CvSTART (sv)->op_type != OP_NULL) // shield against compiling an already-compiled op
30 { 29 {
31 SV *bsv = newSViv (PTR2IV (sv)); 30 SV *bsv = newSViv (PTR2IV (sv));
32 31
33 ENTER; 32 ENTER;
52 51
53IV 52IV
54ppaddr (int optype) 53ppaddr (int optype)
55 CODE: 54 CODE:
56 RETVAL = optype == OP_ENTERSUB 55 RETVAL = optype == OP_ENTERSUB
57 ? old_entersub 56 ? (IV)old_entersub
58 : PL_ppaddr [optype]; 57 : (IV)PL_ppaddr [optype];
59 OUTPUT: 58 OUTPUT:
60 RETVAL 59 RETVAL
61 60
62void 61void
63hook_entersub () 62hook_entersub ()
69patch_cv (B::CV cv, void *ptr) 68patch_cv (B::CV cv, void *ptr)
70 CODE: 69 CODE:
71{ 70{
72 OP *op; 71 OP *op;
73 72
73 if (!ptr)
74 croak ("NULL not allowed as code address for patch_cv");
75
74 NewOp (0, op, 1, OP); 76 NewOp (0, op, 1, OP);
75 77
76 op->op_sibling = CvSTART (cv); 78 op->op_sibling = CvSTART (cv);
77 op->op_type = OP_NULL; 79 op->op_type = OP_NULL;
78 op->op_ppaddr = ptr; 80 op->op_ppaddr = ptr;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines