Commit | Line | Data |
d846ade3 |
1 | #include "mop.h" |
2 | |
3 | NEEDS_KEY(package); |
4 | |
5 | MODULE = Class::MOP::Package PACKAGE = Class::MOP::Package |
6 | |
7 | PROTOTYPES: DISABLE |
8 | |
9 | void |
10 | get_all_package_symbols(self, filter=TYPE_FILTER_NONE) |
11 | SV *self |
12 | type_filter_t filter |
13 | PREINIT: |
14 | HV *stash = NULL; |
15 | HV *symbols = NULL; |
16 | register HE *he; |
17 | PPCODE: |
18 | if ( ! SvROK(self) ) { |
19 | die("Cannot call get_all_package_symbols as a class method"); |
20 | } |
21 | |
22 | if (GIMME_V == G_VOID) { |
23 | XSRETURN_EMPTY; |
24 | } |
25 | |
26 | PUTBACK; |
27 | |
28 | if ( (he = hv_fetch_ent((HV *)SvRV(self), key_package, 0, hash_package)) ) { |
29 | stash = gv_stashsv(HeVAL(he), 0); |
30 | } |
31 | |
32 | |
33 | if (!stash) { |
34 | XSRETURN_UNDEF; |
35 | } |
36 | |
37 | symbols = get_all_package_symbols(stash, filter); |
38 | PUSHs(sv_2mortal(newRV_noinc((SV *)symbols))); |
39 | |
40 | void |
41 | name(self) |
42 | SV *self |
43 | PREINIT: |
44 | register HE *he; |
45 | PPCODE: |
46 | if ( ! SvROK(self) ) { |
47 | die("Cannot call name as a class method"); |
48 | } |
49 | |
50 | if ( (he = hv_fetch_ent((HV *)SvRV(self), key_package, 0, hash_package)) ) |
51 | XPUSHs(HeVAL(he)); |
52 | else |
53 | ST(0) = &PL_sv_undef; |