… | |
… | |
51 | |
51 | |
52 | IV |
52 | IV |
53 | ppaddr (int optype) |
53 | ppaddr (int optype) |
54 | CODE: |
54 | CODE: |
55 | RETVAL = optype == OP_ENTERSUB |
55 | RETVAL = optype == OP_ENTERSUB |
56 | ? old_entersub |
56 | ? (IV)old_entersub |
57 | : PL_ppaddr [optype]; |
57 | : (IV)PL_ppaddr [optype]; |
58 | OUTPUT: |
58 | OUTPUT: |
59 | RETVAL |
59 | RETVAL |
60 | |
60 | |
61 | void |
61 | void |
62 | hook_entersub () |
62 | hook_entersub () |
… | |
… | |
68 | patch_cv (B::CV cv, void *ptr) |
68 | patch_cv (B::CV cv, void *ptr) |
69 | CODE: |
69 | CODE: |
70 | { |
70 | { |
71 | OP *op; |
71 | OP *op; |
72 | |
72 | |
|
|
73 | if (!ptr) |
|
|
74 | croak ("NULL not allowed as code address for patch_cv"); |
|
|
75 | |
73 | NewOp (0, op, 1, OP); |
76 | NewOp (0, op, 1, OP); |
74 | |
77 | |
75 | op->op_sibling = CvSTART (cv); |
78 | op->op_sibling = CvSTART (cv); |
76 | op->op_type = OP_NULL; |
79 | op->op_type = OP_NULL; |
77 | op->op_ppaddr = ptr; |
80 | op->op_ppaddr = ptr; |