dougm 01/03/04 19:48:15 Added: xs modperl_xs_util.h Log: utilties for extensions Revision Changes Path 1.1 modperl-2.0/xs/modperl_xs_util.h Index: modperl_xs_util.h =================================================================== #ifndef MODPERL_XS_H #define MODPERL_XS_H #ifndef dAX # define dAX I32 ax = mark - PL_stack_base + 1 #endif #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif #define mpxs_sv_grow(sv, len) \ (void)SvUPGRADE(sv, SVt_PV); \ SvGROW(sv, len+1) #define mpxs_sv_cur_set(sv, len) \ SvCUR_set(sv, len); \ *SvEND(sv) = '\0'; \ SvPOK_only(sv) #define mpxs_set_targ(func, arg) \ STMT_START { \ dXSTARG; \ XSprePUSH; \ func(aTHX_ TARG, arg); \ PUSHTARG; \ XSRETURN(1); \ } STMT_END #define mpxs_cv_name() \ HvNAME(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)) #define mpxs_sv_is_object(sv) \ (SvROK(sv) && (SvTYPE(SvRV(sv)) == SVt_PVMG)) #define mpxs_sv_object_deref(sv) \ (mpxs_sv_is_object(sv) ? SvIV((SV*)SvRV(sv)) : NULL) #define mpxs_sv2_obj(obj, sv) \ (obj = mp_xs_sv2_##obj(sv)) #define mpxs_usage_items_1(arg) \ if (items != 1) { \ Perl_croak(aTHX_ "usage: %s::%s(%s)", \ mpxs_cv_name(), arg); \ } #define mpxs_usage_va(i, obj, msg) \ if ((items < i) || !(mpxs_sv2_obj(obj, *MARK))) \ croak("usage: %s", msg); \ MARK++ #define mpxs_usage_va_1(obj, msg) mpxs_usage_va(1, obj, msg) #define mpxs_usage_va_2(obj, arg, msg) \ mpxs_usage_va(2, obj, msg); \ arg = *MARK++ #endif /* MODPERL_XS_H */