037ed41f2347c72761625b025b63b640fcb1fa89
[gitmo/Class-MOP.git] / xs / MethodAccessor.xs
1 #include "mop.h"
2
3 static CV*
4 mop_instantiate_xs_accessor(pTHX_ SV* const accessor, XSPROTO(accessor_impl)){
5     /* $key = $accessor->associated_attribute->name */
6     SV* const attr = mop_call0(aTHX_ accessor, mop_associated_attribute);
7     SV* const key  = mop_call0(aTHX_ attr, mop_name);
8     STRLEN len;
9     const char* const pv = SvPV_const(key, len);
10     return mop_install_simple_accessor(aTHX_ NULL /* anonymous */, pv, len, accessor_impl);
11 }
12
13 MODULE = Class::MOP::Method::Accessor   PACKAGE = Class::MOP::Method::Accessor
14
15 PROTOTYPES: DISABLE
16
17 BOOT:
18     INSTALL_SIMPLE_READER_WITH_KEY(Method::Accessor, associated_attribute, attribute);
19     INSTALL_SIMPLE_READER(Method::Accessor, accessor_type);
20
21
22 CV*
23 _generate_accessor_method_xs(SV* self)
24 CODE:
25     RETVAL = mop_instantiate_xs_accessor(aTHX_ self, mop_xs_simple_accessor);
26 OUTPUT:
27     RETVAL
28
29 CV*
30 _generate_reader_method_xs(SV* self)
31 CODE:
32     RETVAL = mop_instantiate_xs_accessor(aTHX_ self, mop_xs_simple_reader);
33 OUTPUT:
34     RETVAL
35
36 CV*
37 _generate_writer_method_xs(SV* self)
38 CODE:
39     RETVAL = mop_instantiate_xs_accessor(aTHX_ self, mop_xs_simple_writer);
40 OUTPUT:
41     RETVAL
42
43 CV*
44 _generate_predicate_method_xs(SV* self)
45 CODE:
46     RETVAL = mop_instantiate_xs_accessor(aTHX_ self, mop_xs_simple_predicate);
47 OUTPUT:
48     RETVAL
49
50 CV*
51 _generate_clearer_method_xs(SV* self)
52 CODE:
53     RETVAL = mop_instantiate_xs_accessor(aTHX_ self, mop_xs_simple_clearer);
54 OUTPUT:
55     RETVAL
56