- if (_sv && (!SvOK(_sv) || strNE(XS_VERSION, SvPV(_sv, n_a)))) \
- Perl_croak(aTHX_ "%s object version %s does not match %s%s%s%s %"SVf,\
- module, XS_VERSION, \
- vn ? "$" : "", vn ? module : "", vn ? "::" : "", \
- vn ? vn : "bootstrap parameter", _sv); \
+ if (_sv) { \
+ SV *xssv = Perl_newSVpv(aTHX_ XS_VERSION, 0); \
+ xssv = new_version(xssv); \
+ if ( !sv_derived_from(_sv, "version") ) \
+ _sv = new_version(_sv); \
+ if ( vcmp(_sv,xssv) ) \
+ Perl_croak(aTHX_ "%s object version %"SVf" does not match %s%s%s%s %"SVf,\
+ module, SVfARG(vstringify(xssv)), \
+ vn ? "$" : "", vn ? module : "", vn ? "::" : "", \
+ vn ? vn : "bootstrap parameter", SVfARG(vstringify(_sv)));\
+ } \