Prefix all exported symbols with "mop_"
[gitmo/Class-MOP.git] / xs / Package.xs
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 = mop_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;