[svn:ponie] rev 324 - trunk/perl
[email protected] 10 Jul 2005 09:55:59 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
Author: nicholas
Date: Sun Jul 10 02:55:59 2005
New Revision: 324
Modified:
trunk/perl/embed.fnc
trunk/perl/embed.h
trunk/perl/proto.h
trunk/perl/sv.c
Log:
Part 1 of refactoring setting the PV - introduce a single backend function.
Modified: trunk/perl/embed.fnc
==============================================================================
--- trunk/perl/embed.fnc (original)
+++ trunk/perl/embed.fnc Sun Jul 10 02:55:59 2005
@@ -781,6 +781,7 @@ Apd |void |sv_report_used
#if defined(PERL_CORE) || defined(PONIE_CORE)
po |void |sv_setnv_backend |SV* sv|NV num|I32 flags
po |void |sv_setiv_backend |SV* sv|UV num|I32 flags
+po |void |sv_setpvn_backend|SV* sv|const char* ptr|STRLEN len|I32 flags
#endif
Apd |void |sv_reset |const char* s|HV* stash
Afpd |void |sv_setpvf |SV* sv|const char* pat|...
Modified: trunk/perl/embed.h
==============================================================================
--- trunk/perl/embed.h (original)
+++ trunk/perl/embed.h Sun Jul 10 02:55:59 2005
@@ -3539,6 +3539,8 @@
#endif
#ifdef PERL_CORE
#endif
+#ifdef PERL_CORE
+#endif
#endif
#define sv_reset(a,b) Perl_sv_reset(aTHX_ a,b)
#define sv_vsetpvf(a,b,c) Perl_sv_vsetpvf(aTHX_ a,b,c)
Modified: trunk/perl/proto.h
==============================================================================
--- trunk/perl/proto.h (original)
+++ trunk/perl/proto.h Sun Jul 10 02:55:59 2005
@@ -746,6 +746,7 @@ PERL_CALLCONV void Perl_sv_report_used(p
#if defined(PERL_CORE) || defined(PONIE_CORE)
PERL_CALLCONV void Perl_sv_setnv_backend(pTHX_ SV* sv, NV num, I32 flags);
PERL_CALLCONV void Perl_sv_setiv_backend(pTHX_ SV* sv, UV num, I32 flags);
+PERL_CALLCONV void Perl_sv_setpvn_backend(pTHX_ SV* sv, const char* ptr, STRLEN len, I32 flags);
#endif
PERL_CALLCONV void Perl_sv_reset(pTHX_ const char* s, HV* stash);
PERL_CALLCONV void Perl_sv_setpvf(pTHX_ SV* sv, const char* pat, ...)
Modified: trunk/perl/sv.c
==============================================================================
--- trunk/perl/sv.c (original)
+++ trunk/perl/sv.c Sun Jul 10 02:55:59 2005
@@ -3795,20 +3795,10 @@ Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *ss
}
#endif
-/*
-=for apidoc sv_setpvn
-
-Copies a string into an SV. The C<len> parameter indicates the number of
-bytes to be copied. If the C<ptr> argument is NULL the SV will become
-undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
-
-=cut
-*/
-
void
-Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
+Perl_sv_setpvn_backend(pTHX_ SV *sv, const char *ptr, STRLEN len, I32 flags)
{
- register char *dptr;
+ char *dptr;
SV_CHECK_THINKFIRST_COW_DROP(sv);
if (!ptr) {
@@ -3830,6 +3820,25 @@ Perl_sv_setpvn(pTHX_ register SV *sv, re
SvCUR_set(sv, len);
(void)SvPOK_only_UTF8(sv); /* validate pointer */
SvTAINT(sv);
+ if (flags & SV_SMAGIC)
+ SvSETMAGIC(sv);
+}
+
+
+/*
+=for apidoc sv_setpvn
+
+Copies a string into an SV. The C<len> parameter indicates the number of
+bytes to be copied. If the C<ptr> argument is NULL the SV will become
+undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
+
+=cut
+*/
+
+void
+Perl_sv_setpvn(pTHX_ SV *sv, const char *ptr, STRLEN len)
+{
+ Perl_sv_setpvn_backend(aTHX_ sv, ptr, len, 0);
}
/*
@@ -3843,10 +3852,10 @@ Like C<sv_setpvn>, but also handles 'set
void
Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
{
- sv_setpvn(sv,ptr,len);
- SvSETMAGIC(sv);
+ Perl_sv_setpvn_backend(aTHX_ sv, ptr, len, SV_SMAGIC);
}
+
/*
=for apidoc sv_setpv
@@ -3859,21 +3868,8 @@ handle 'set' magic. See C<sv_setpv_mg>.
void
Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
{
- register STRLEN len;
-
- SV_CHECK_THINKFIRST_COW_DROP(sv);
- if (!ptr) {
- (void)SvOK_off(sv);
- return;
- }
- len = strlen(ptr);
- (void)SvUPGRADE(sv, SVt_PV);
-
- SvGROW(sv, len + 1);
- Move(ptr,SvPVX(sv),len+1,char);
- SvCUR_set(sv, len);
- (void)SvPOK_only_UTF8(sv); /* validate pointer */
- SvTAINT(sv);
+ const STRLEN len = ptr ? strlen(ptr) : 0;
+ Perl_sv_setpvn_backend(aTHX_ sv, ptr, len, 0);
}
/*
@@ -3887,8 +3883,8 @@ Like C<sv_setpv>, but also handles 'set'
void
Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
{
- sv_setpv(sv,ptr);
- SvSETMAGIC(sv);
+ const STRLEN len = ptr ? strlen(ptr) : 0;
+ Perl_sv_setpvn_backend(aTHX_ sv, ptr, len, SV_SMAGIC);
}
/*