diff --git a/src/perl/perl-common.c b/src/perl/perl-common.c index a3a599ac..cad117fc 100644 --- a/src/perl/perl-common.c +++ b/src/perl/perl-common.c @@ -219,12 +219,12 @@ char *perl_get_use_list(void) return ret; } -void irssi_callXS(void (*subaddr)(CV* cv), CV *cv, SV **mark) +void irssi_callXS(void (*subaddr)(pTHX_ CV* cv), CV *cv, SV **mark) { dSP; PUSHMARK(mark); - (*subaddr)(cv); + (*subaddr)(aTHX_ cv); PUTBACK; } diff --git a/src/perl/perl-common.h b/src/perl/perl-common.h index 9fa85f07..50469942 100644 --- a/src/perl/perl-common.h +++ b/src/perl/perl-common.h @@ -32,6 +32,10 @@ SV *perl_func_sv_inc(SV *func, const char *package); extern STRLEN PL_na; #endif +#ifndef pTHX_ +# define pTHX_ +#endif + #define iobject_bless(object) \ ((object) == NULL ? &PL_sv_undef : \ irssi_bless_iobject((object)->type, (object)->chat_type, object)) @@ -57,10 +61,10 @@ void irssi_add_plains(PLAIN_OBJECT_INIT_REC *objects); char *perl_get_use_list(void); #define irssi_boot(x) { \ - extern void boot_Irssi__##x(CV *cv); \ + extern void boot_Irssi__##x(pTHX_ CV *cv); \ irssi_callXS(boot_Irssi__##x, cv, mark); \ } -void irssi_callXS(void (*subaddr)(CV* cv), CV *cv, SV **mark); +void irssi_callXS(void (*subaddr)(pTHX_ CV* cv), CV *cv, SV **mark); void perl_common_start(void); void perl_common_stop(void); diff --git a/src/perl/perl-core.c b/src/perl/perl-core.c index 0c1e506b..2d300289 100644 --- a/src/perl/perl-core.c +++ b/src/perl/perl-core.c @@ -84,7 +84,7 @@ static void perl_script_destroy(PERL_SCRIPT_REC *script) g_free(script); } -extern void boot_DynaLoader(CV* cv); +extern void boot_DynaLoader(pTHX_ CV* cv); #if PERL_STATIC_LIBS == 1 extern void boot_Irssi(CV *cv); @@ -101,7 +101,7 @@ XS(boot_Irssi_Core) } #endif -static void xs_init(void) +static void xs_init(pTHX) { dXSUB_SYS;