Commit | Line | Data |
e0e4674a |
1 | |
2 | #include "EXTERN.h" |
3 | #include "perl.h" |
4 | #include "XSUB.h" |
b0e94057 |
5 | #include "ppport.h" |
e0e4674a |
6 | |
7 | /* |
e0e4674a |
8 | get_code_info: |
9 | Pass in a coderef, returns: |
10 | [ $pkg_name, $coderef_name ] ie: |
11 | [ 'Foo::Bar', 'new' ] |
12 | */ |
13 | |
14 | MODULE = Class::MOP PACKAGE = Class::MOP |
15 | |
d7bf3478 |
16 | PROTOTYPES: ENABLE |
17 | |
e0e4674a |
18 | void |
19 | get_code_info(coderef) |
20 | SV* coderef |
21 | PREINIT: |
22 | char* name; |
23 | char* pkg; |
24 | PPCODE: |
e0e4674a |
25 | if( SvOK(coderef) && SvROK(coderef) && SvTYPE(SvRV(coderef)) == SVt_PVCV){ |
26 | coderef = SvRV(coderef); |
27 | name = GvNAME( CvGV(coderef) ); |
28 | pkg = HvNAME( GvSTASH(CvGV(coderef)) ); |
29 | |
30 | EXTEND(SP, 2); |
31 | PUSHs(newSVpvn(pkg, strlen(pkg))); |
32 | PUSHs(newSVpvn(name, strlen(name))); |
33 | } |
34 | |