Prefix all exported symbols with "mop_"
[gitmo/Class-MOP.git] / xs / Package.xs
CommitLineData
d846ade3 1#include "mop.h"
2
3NEEDS_KEY(package);
4
5MODULE = Class::MOP::Package PACKAGE = Class::MOP::Package
6
7PROTOTYPES: DISABLE
8
9void
10get_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
e1f52a8a 37 symbols = mop_get_all_package_symbols(stash, filter);
d846ade3 38 PUSHs(sv_2mortal(newRV_noinc((SV *)symbols)));
39
40void
41name(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;