+STATIC size_t svu_validate_uv(pTHX_ SV *sv, const char *desc) {
+#define svu_validate_uv(S, D) svu_validate_uv(aTHX_ (S), (D))
+ IV i;
+
+ if (SvOK(sv) && SvIOK(sv)) {
+ if (SvIsUV(sv))
+ return SvUVX(sv);
+ else {
+ i = SvIVX(sv);
+ if (i >= 0)
+ return i;
+ }
+ } else {
+ i = SvIV(sv);
+ if (i >= 0)
+ return i;
+ }
+
+ croak("Invalid negative %s", desc ? desc : "integer");
+ return 0;
+}