@@ -564,6 +564,26 @@ to force this SV to be interpreted as an "extended" version.
564
564
=cut
565
565
*/
566
566
567
+ /* Macro to do the meat of getting the PV of an NV version number. This is
568
+ * macroized because can be called from several places */
569
+ #define GET_NUMERIC_VERSION (ver , sv , tbuf , buf , len ) \
570
+ STMT_START { \
571
+ \
572
+ /* We earlier created 'sv' for very large version numbers, to rely \
573
+ * on the specialized algorithms SV code has built-in for such \
574
+ * values */ \
575
+ if (sv ) { \
576
+ Perl_sv_setpvf (aTHX_ sv , "%.9" NVff , SvNVX (ver )); \
577
+ len = SvCUR (sv ); \
578
+ buf = SvPVX (sv ); \
579
+ } \
580
+ else { \
581
+ len = my_snprintf (tbuf , sizeof (tbuf ), "%.9" NVff , SvNVX (ver )); \
582
+ buf = tbuf ; \
583
+ } \
584
+ \
585
+ } STMT_END
586
+
567
587
SV *
568
588
#ifdef VUTIL_REPLACE_CORE
569
589
Perl_upg_version2 (pTHX_ SV * ver , bool qv )
@@ -693,15 +713,7 @@ Perl_upg_version(pTHX_ SV *ver, bool qv)
693
713
/* Prevent recursed calls from trying to change back */
694
714
LOCK_LC_NUMERIC_STANDARD ();
695
715
#endif
696
- if (sv ) {
697
- Perl_sv_setpvf (aTHX_ sv , "%.9" NVff , SvNVX (ver ));
698
- len = SvCUR (sv );
699
- buf = SvPVX (sv );
700
- }
701
- else {
702
- len = my_snprintf (tbuf , sizeof (tbuf ), "%.9" NVff , SvNVX (ver ));
703
- buf = tbuf ;
704
- }
716
+ GET_NUMERIC_VERSION (ver , sv , tbuf , buf , len );
705
717
706
718
#ifdef USE_LOCALE_NUMERIC
707
719
0 commit comments