#include "ppport.h"
-/* for portability */
+/* Portability stuff */
+
#ifndef newSVpvs_share
#define newSVpvs_share(s) Perl_newSVpvn_share(aTHX_ s, sizeof(s)-1, 0U)
#endif
#endif /* !no_mro_get_linear_isa */
#endif /* mro_get_package_gen */
+#if !defined(__GNUC__)
+# if (!defined(__cplusplus__) || !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)) && !defined(inline)
+# define inline /* nothing */
+# endif
+#endif
+
+/* Mouse stuff */
+
#define newAV_mortal() (AV*)sv_2mortal((SV*)newAV())
#define newHV_mortal() (HV*)sv_2mortal((SV*)newHV())
#define MOUSE_av_at(av, ix) AvARRAY(av)[ix]
#endif
-#define dMOUSE_self SV* const self = mouse_accessor_get_self(aTHX_ ax, items, cv)
-SV* mouse_accessor_get_self(pTHX_ I32 const ax, I32 const items, CV* const cv);
-
#define MOUSE_mg_obj(mg) ((mg)->mg_obj)
#define MOUSE_mg_ptr(mg) ((mg)->mg_ptr)
#define MOUSE_mg_flags(mg) ((mg)->mg_private)
/* Mouse XS Attribute object */
AV* mouse_get_xa(pTHX_ SV* const attr);
+SV* mouse_xa_apply_type_constraint(pTHX_ AV* const xa, SV* value, U16 const flags);
+SV* mouse_xa_set_default(pTHX_ AV* const xa, SV* const object);
enum mouse_xa_ix_t{
MOUSE_XA_SLOT, /* for constructors, sync to mg_obj */
MOUSE_XA_FLAGS, /* for constructors, sync to mg_private */
MOUSE_XA_ATTRIBUTE,
+ MOUSE_XA_INIT_ARG,
MOUSE_XA_TC,
MOUSE_XA_TC_CODE,
};
#define MOUSE_xa_slot(m) MOUSE_av_at(m, MOUSE_XA_SLOT)
-#define MOUSE_xa_flags(m) MOUSE_av_at(m, MOUSE_XA_FLAGS)
+#define MOUSE_xa_flags(m) SvUVX( MOUSE_av_at(m, MOUSE_XA_FLAGS) )
#define MOUSE_xa_attribute(m) MOUSE_av_at(m, MOUSE_XA_ATTRIBUTE)
+#define MOUSE_xa_init_arg(m) MOUSE_av_at(m, MOUSE_XA_INIT_ARG)
#define MOUSE_xa_tc(m) MOUSE_av_at(m, MOUSE_XA_TC)
#define MOUSE_xa_tc_code(m) MOUSE_av_at(m, MOUSE_XA_TC_CODE)
-
enum mouse_xa_flags_t{
MOUSEf_ATTR_HAS_TC = 0x0001,
MOUSEf_ATTR_HAS_DEFAULT = 0x0002,
MOUSEf_ATTR_HAS_BUILDER = 0x0004,
- MOUSEf_ATTR_HAS_INITIALIZER = 0x0008,
+ MOUSEf_ATTR_HAS_INITIALIZER = 0x0008, /* not used */
MOUSEf_ATTR_HAS_TRIGGER = 0x0010,
MOUSEf_ATTR_IS_LAZY = 0x0020,