Encode 1.76 Released
[p5sagit/p5-mst-13.2.git] / util.c
diff --git a/util.c b/util.c
index 5eea1c9..f275fca 100644 (file)
--- a/util.c
+++ b/util.c
@@ -4072,6 +4072,7 @@ char *
 Perl_scan_vstring(pTHX_ char *s, SV *sv)
 {
     char *pos = s;
+    char *start = s;
     if (*pos == 'v') pos++;  /* get past 'v' */
     while (isDIGIT(*pos) || *pos == '_')
     pos++;
@@ -4121,7 +4122,8 @@ Perl_scan_vstring(pTHX_ char *s, SV *sv)
                 pos++;
        }
        SvPOK_on(sv);
-       SvREADONLY_on(sv);
+       sv_magicext(sv,NULL,PERL_MAGIC_vstring,NULL,(const char*)start, pos-start);
+       SvRMAGICAL_on(sv);
     }
     return s;
 }
@@ -4250,19 +4252,19 @@ correct type (for speed).
 */
 
 SV *
-Perl_vnumify(SV *sv, SV *vs)
+Perl_vnumify(pTHX_ SV *sv, SV *vs)
 {
     U8* pv = (U8*)SvPVX(vs);
     STRLEN len = SvCUR(vs);
     STRLEN retlen;
     UV digit = utf8_to_uvchr(pv,&retlen);
-    sv_setpvf(sv,"%"UVf".",digit);
+    Perl_sv_setpvf(aTHX_ sv,"%"UVf".",digit);
     for (pv += retlen, len -= retlen;
        len > 0;
        pv += retlen, len -= retlen)
     {
        digit = utf8_to_uvchr(pv,&retlen);
-       sv_catpvf(sv,"%03"UVf,digit);
+       Perl_sv_catpvf(aTHX_ sv,"%03"UVf,digit);
     }
     return sv;
 }
@@ -4282,19 +4284,19 @@ correct type (for speed).
 */
 
 SV *
-Perl_vstringify(SV *sv, SV *vs)
+Perl_vstringify(pTHX_ SV *sv, SV *vs)
 {
     U8* pv = (U8*)SvPVX(vs);
     STRLEN len = SvCUR(vs);
     STRLEN retlen;
     UV digit = utf8_to_uvchr(pv,&retlen);
-    sv_setpvf(sv,"%"UVf,digit);
+    Perl_sv_setpvf(aTHX_ sv,"%"UVf,digit);
     for (pv += retlen, len -= retlen;
        len > 0;
        pv += retlen, len -= retlen)
     {
        digit = utf8_to_uvchr(pv,&retlen);
-       sv_catpvf(sv,".%03"UVf,digit);
+       Perl_sv_catpvf(aTHX_ sv,".%03"UVf,digit);
     }
     if ( SvIVX(vs) < 0 )
        sv_catpv(sv,"beta");