X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=mouse.h;h=88d17daaf881038050c7e54e2f3042143c2c5b84;hb=8e4a10a887ee294310139992d722aed93b574379;hp=bfb7836c36078cea72d21f64263363413b055689;hpb=d06d926635763fa5687c429b5ad39938c564fbed;p=gitmo%2FMouse.git diff --git a/mouse.h b/mouse.h index bfb7836..88d17da 100644 --- a/mouse.h +++ b/mouse.h @@ -1,34 +1,13 @@ #ifndef MOUSE_H #define MOUSE_H -#define PERL_NO_GET_CONTEXT -#include -#include -#include - -#include "ppport.h" - -/* Portability stuff */ - -#ifndef newSVpvs_share -#define newSVpvs_share(s) Perl_newSVpvn_share(aTHX_ s, sizeof(s)-1, 0U) -#endif - -#ifndef get_cvs -#define get_cvs(name, flags) get_cv(name, flags) -#endif - -#ifndef GvNAME_get -#define GvNAME_get GvNAME -#endif -#ifndef GvNAMELEN_get -#define GvNAMELEN_get GvNAMELEN -#endif +#include "xshelper.h" #ifndef mro_get_linear_isa #define no_mro_get_linear_isa #define mro_get_linear_isa(stash) mouse_mro_get_linear_isa(aTHX_ stash) AV* mouse_mro_get_linear_isa(pTHX_ HV* const stash); +#define mro_method_changed_in(stash) ((void)++PL_sub_generation) #endif /* !mro_get_linear_isa */ #ifndef mro_get_pkg_gen @@ -39,23 +18,6 @@ AV* mouse_mro_get_linear_isa(pTHX_ HV* const stash); #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_CALL_BOOT(name) STMT_START { \ - EXTERN_C XS(CAT2(boot_, name)); \ - PUSHMARK(SP); \ - CALL_FPTR(CAT2(boot_, name))(aTHX_ cv); \ - } STMT_END - extern SV* mouse_package; extern SV* mouse_namespace; extern SV* mouse_methods; @@ -64,11 +26,16 @@ extern SV* mouse_coerce; void mouse_throw_error(SV* const metaobject, SV* const data /* not used */, const char* const fmt, ...) -#ifdef __attribute__format__ __attribute__format__(__printf__, 3, 4); -#else - ; -#endif + +/* workaround RT #69939 */ +I32 +mouse_call_sv_safe(pTHX_ SV*, I32); + +#define call_sv_safe(sv, flags) mouse_call_sv_safe(aTHX_ sv, flags) +#define call_method_safe(m, flags) mouse_call_sv_safe(aTHX_ newSVpvn_flags(m, strlen(m), SVs_TEMP), flags | G_METHOD) +#define call_method_safes(m, flags) mouse_call_sv_safe(aTHX_ newSVpvs_flags(m, SVs_TEMP), flags | G_METHOD) + #define is_class_loaded(sv) mouse_is_class_loaded(aTHX_ sv) bool mouse_is_class_loaded(pTHX_ SV*); @@ -172,7 +139,6 @@ void mouse_instance_weaken_slot(pTHX_ SV* const instance, SV* const slot); CV* mouse_simple_accessor_generate(pTHX_ const char* const fq_name, const char* const key, I32 const keylen, XSUBADDR_t const accessor_impl, void* const dptr, I32 const dlen); -XS(XS_Mouse_simple_accessor); XS(XS_Mouse_simple_reader); XS(XS_Mouse_simple_writer); XS(XS_Mouse_simple_clearer);