}
}
-use Test::More tests => 76;
+use Test::More tests => 78;
my $ro_err = qr/^Modification of a read-only value attempted/;
is( Internals::SvREFCNT($foo, 2), 2, "update ref count");
is( Internals::SvREFCNT($foo), 2, "check we got the stored value");
+# the reference count is a U16, but was returned as an IV resulting in
+# different values between 32 and 64-bit builds
+my $big_count = 0xFFFFFFF0; # -16 32-bit signed
+is( Internals::SvREFCNT($foo, $big_count), $big_count,
+ "set reference count unsigned");
+is( Internals::SvREFCNT($foo), $big_count, "reference count unsigned");
+
Internals::SvREFCNT($foo, 1 );
sv = SvRV(svz);
if (items == 1)
- XSRETURN_IV(SvREFCNT(sv) - 1); /* Minus the ref created for us. */
+ XSRETURN_UV(SvREFCNT(sv) - 1); /* Minus the ref created for us. */
else if (items == 2) {
/* I hope you really know what you are doing. */
- SvREFCNT(sv) = SvIV(ST(1)) + 1; /* we free one ref on exit */
- XSRETURN_IV(SvREFCNT(sv) - 1);
+ SvREFCNT(sv) = SvUV(ST(1)) + 1; /* we free one ref on exit */
+ XSRETURN_UV(SvREFCNT(sv) - 1);
}
XSRETURN_UNDEF; /* Can't happen. */
}