Refactor method generators, preparing XS constructor generator
[gitmo/Class-MOP.git] / xs / Attribute.xs
1 #include "mop.h"
2
3 static MGVTBL mop_attr_vtbl;
4
5
6 MAGIC*
7 mop_attr_get_mg(pTHX_ SV* const attr){
8     if(!SvROK(attr)) croak("Invalid object");
9
10     return mop_mg_find(aTHX_ SvRV(attr), &mop_attr_vtbl, MOPf_DIE_ON_FAIL);
11 }
12
13
14 MODULE = Class::MOP::Attribute   PACKAGE = Class::MOP::Attribute
15
16 PROTOTYPES: DISABLE
17
18 BOOT:
19     INSTALL_SIMPLE_READER(Attribute, name);
20     INSTALL_SIMPLE_READER(Attribute, associated_class);
21     INSTALL_SIMPLE_READER(Attribute, associated_methods);
22     INSTALL_SIMPLE_READER(Attribute, accessor);
23     INSTALL_SIMPLE_READER(Attribute, reader);
24     INSTALL_SIMPLE_READER(Attribute, writer);
25     INSTALL_SIMPLE_READER(Attribute, predicate);
26     INSTALL_SIMPLE_READER(Attribute, clearer);
27     INSTALL_SIMPLE_READER(Attribute, builder);
28     INSTALL_SIMPLE_READER(Attribute, init_arg);
29     INSTALL_SIMPLE_READER(Attribute, initializer);
30     INSTALL_SIMPLE_READER(Attribute, insertion_order);
31     INSTALL_SIMPLE_READER(Attribute, definition_context);
32
33     INSTALL_SIMPLE_WRITER_WITH_KEY(Attribute, _set_insertion_order, insertion_order);
34
35     INSTALL_SIMPLE_PREDICATE(Attribute, accessor);
36     INSTALL_SIMPLE_PREDICATE(Attribute, reader);
37     INSTALL_SIMPLE_PREDICATE(Attribute, writer);
38     INSTALL_SIMPLE_PREDICATE(Attribute, predicate);
39     INSTALL_SIMPLE_PREDICATE(Attribute, clearer);
40     INSTALL_SIMPLE_PREDICATE(Attribute, builder);
41     INSTALL_SIMPLE_PREDICATE(Attribute, init_arg);
42     INSTALL_SIMPLE_PREDICATE(Attribute, initializer);
43     INSTALL_SIMPLE_PREDICATE(Attribute, default);
44
45 void
46 BUILD(SV* self)
47 PREINIT:
48     mop_instance_vtbl* vtbl;
49 CODE:
50     if(!( SvROK(self) && SvOBJECT(SvRV(self)) )){
51         croak("Invalid object");
52     }
53     sv_magicext(SvRV(self), NULL, PERL_MAGIC_ext, &mop_attr_vtbl, NULL, 0);
54