Commit | Line | Data |
d846ade3 |
1 | #ifndef __MOP_H__ |
2 | #define __MOP_H__ |
3 | |
4 | #include "EXTERN.h" |
5 | #include "perl.h" |
6 | #include "XSUB.h" |
7 | |
8 | #define NEED_newRV_noinc |
9 | #define NEED_sv_2pv_flags |
10 | #define NEED_sv_2pv_nolen |
11 | #include "ppport.h" |
12 | |
25bcd95c |
13 | #define MOP_CALL_BOOT(name) mop_call_xs(aTHX_ name, cv, mark); |
d846ade3 |
14 | |
c97ec1de |
15 | #ifndef XSPROTO |
16 | #define XSPROTO(name) XS(name) |
17 | #endif |
18 | |
1be56175 |
19 | void mop_call_xs (pTHX_ XSPROTO(subaddr), CV *cv, SV **mark); |
d846ade3 |
20 | |
8a2e4cdb |
21 | |
22 | #define MAKE_KEYSV(name) newSVpvn_share(#name, sizeof(#name)-1, 0U) |
23 | |
a69b9501 |
24 | CV* mop_install_simple_accessor(pTHX_ const char* const fq_name, const char* const key, I32 const keylen, XSPROTO(accessor_impl)); |
d846ade3 |
25 | |
0253cbf3 |
26 | #define INSTALL_SIMPLE_READER(klass, name) INSTALL_SIMPLE_READER_WITH_KEY(klass, name, name) |
a69b9501 |
27 | #define INSTALL_SIMPLE_READER_WITH_KEY(klass, name, key) (void)mop_install_simple_accessor(aTHX_ "Class::MOP::" #klass "::" #name, #key, sizeof(#key)-1, mop_xs_simple_reader) |
8a2e4cdb |
28 | |
a53443d6 |
29 | #define INSTALL_SIMPLE_WRITER(klass, name) INSTALL_SIMPLE_WRITER_WITH_KEY(klass, name, name) |
30 | #define INSTALL_SIMPLE_WRITER_WITH_KEY(klass, name, key) (void)mop_install_simple_accessor(aTHX_ "Class::MOP::" #klass "::" #name, #key, sizeof(#key)-1, mop_xs_simple_writer) |
31 | |
8a2e4cdb |
32 | #define INSTALL_SIMPLE_PREDICATE(klass, name) INSTALL_SIMPLE_PREDICATE_WITH_KEY(klass, name, name) |
a69b9501 |
33 | #define INSTALL_SIMPLE_PREDICATE_WITH_KEY(klass, name, key) (void)mop_install_simple_accessor(aTHX_ "Class::MOP::" #klass "::has_" #name, #key, sizeof(#key)-1, mop_xs_simple_predicate_for_metaclass) |
8a2e4cdb |
34 | |
7ec7b950 |
35 | |
a69b9501 |
36 | XS(mop_xs_simple_accessor); |
7ec7b950 |
37 | XS(mop_xs_simple_reader); |
a69b9501 |
38 | XS(mop_xs_simple_writer); |
39 | XS(mop_xs_simple_predicate); |
40 | XS(mop_xs_simple_predicate_for_metaclass); |
41 | XS(mop_xs_simple_clearer); |
7ec7b950 |
42 | |
e1f52a8a |
43 | extern SV *mop_method_metaclass; |
44 | extern SV *mop_associated_metaclass; |
ffec3ec3 |
45 | extern SV *mop_associated_attribute; |
e1f52a8a |
46 | extern SV *mop_wrap; |
8a2e4cdb |
47 | extern SV *mop_methods; |
48 | extern SV *mop_name; |
49 | extern SV *mop_body; |
50 | extern SV *mop_package; |
51 | extern SV *mop_package_name; |
52 | extern SV *mop_package_cache_flag; |
53 | extern SV *mop_VERSION; |
54 | extern SV *mop_ISA; |
d846ade3 |
55 | |
56 | UV mop_check_package_cache_flag(pTHX_ HV *stash); |
e1f52a8a |
57 | int mop_get_code_info (SV *coderef, char **pkg, char **name); |
d846ade3 |
58 | SV *mop_call0(pTHX_ SV *const self, SV *const method); |
59 | |
60 | typedef enum { |
61 | TYPE_FILTER_NONE, |
62 | TYPE_FILTER_CODE, |
63 | TYPE_FILTER_ARRAY, |
64 | TYPE_FILTER_IO, |
65 | TYPE_FILTER_HASH, |
66 | TYPE_FILTER_SCALAR, |
67 | } type_filter_t; |
68 | |
69 | typedef bool (*get_package_symbols_cb_t) (const char *, STRLEN, SV *, void *); |
70 | |
e1f52a8a |
71 | void mop_get_package_symbols(HV *stash, type_filter_t filter, get_package_symbols_cb_t cb, void *ud); |
72 | HV *mop_get_all_package_symbols (HV *stash, type_filter_t filter); |
d846ade3 |
73 | |
74 | #endif |