/* proto member is unused in version, it is used in CORE by non version xsubs */
# define VXSXSDP(x)
#endif
-#define VXS(name) XS(VXSp(name))
+
+#ifndef XS_INTERNAL
+# define XS_INTERNAL(name) static XSPROTO(name)
+#endif
+
+#define VXS(name) XS_INTERNAL(VXSp(name)); XS_INTERNAL(VXSp(name))
/* uses PUSHs, so SP must be at start, PUSHs sv on Perl stack, then returns from
xsub; this is a little more machine code/tailcall friendly than mPUSHs(foo);
VXS(universal_version)
{
- dVAR;
dXSARGS;
HV *pkg;
GV **gvp;
}
if ( VCMP( req, sv ) > 0 ) {
- if ( hv_exists(MUTABLE_HV(SvRV(req)), "qv", 2 ) ) {
+ if ( hv_existss(MUTABLE_HV(SvRV(req)), "qv") ) {
req = VNORMAL(req);
sv = VNORMAL(sv);
}
VXS(version_new)
{
- dVAR;
dXSARGS;
SV *vs;
SV *rv;
default:
case 0:
Perl_croak_nocontext("Usage: version::new(class, version)");
- break;
}
svarg0 = ST(0);
VXS(version_stringify)
{
- dVAR;
dXSARGS;
if (items < 1)
croak_xs_usage(cv, "lobj, ...");
VXS(version_numify)
{
- dVAR;
dXSARGS;
if (items < 1)
croak_xs_usage(cv, "lobj, ...");
VXS(version_normal)
{
- dVAR;
dXSARGS;
if (items != 1)
croak_xs_usage(cv, "ver");
VXS(version_vcmp)
{
- dVAR;
dXSARGS;
if (items < 1)
croak_xs_usage(cv, "lobj, ...");
VXS(version_boolean)
{
- dVAR;
dXSARGS;
SV *lobj;
if (items < 1)
VXS(version_noop)
{
- dVAR;
dXSARGS;
if (items < 1)
croak_xs_usage(cv, "lobj, ...");
void
S_version_check_key(pTHX_ CV * cv, const char * key, int keylen)
{
- dVAR;
dXSARGS;
if (items != 1)
croak_xs_usage(cv, "lobj");
VXS(version_qv)
{
- dVAR;
dXSARGS;
PERL_UNUSED_ARG(cv);
SP -= items;