develooper Front page | perl.ponie.changes | Postings from August 2005

[svn:ponie] r341 - trunk/perl

From:
nicholas
Date:
August 25, 2005 04:48
Subject:
[svn:ponie] r341 - trunk/perl
Message ID:
20050825114806.21505.qmail@x1.develooper.com
Author: nicholas
Date: Thu Aug 25 04:48:05 2005
New Revision: 341

Modified:
   trunk/perl/embed.fnc
   trunk/perl/embed.h
   trunk/perl/global.sym
   trunk/perl/proto.h
   trunk/perl/sv.c
Log:
For the next steps in refactoring, need to be able to call sv_clear without
temporarily setting the reference count to zero. So add a new sv_clear_backend
function that does not assert this. For future expansion possibilities add
a flags parameter, which currently is unused.


Modified: trunk/perl/embed.fnc
==============================================================================
--- trunk/perl/embed.fnc	(original)
+++ trunk/perl/embed.fnc	Thu Aug 25 04:48:05 2005
@@ -736,6 +736,7 @@ Apd	|void	|sv_chop	|SV* sv|char* ptr
 pd	|I32	|sv_clean_all
 pd	|void	|sv_clean_objs
 Apd	|void	|sv_clear	|SV* sv
+Apd	|void	|sv_clear_backend|SV* sv|I32 flags
 Apd	|I32	|sv_cmp		|SV* sv1|SV* sv2
 Apd	|I32	|sv_cmp_locale	|SV* sv1|SV* sv2
 #if defined(USE_LOCALE_COLLATE)

Modified: trunk/perl/embed.h
==============================================================================
--- trunk/perl/embed.h	(original)
+++ trunk/perl/embed.h	Thu Aug 25 04:48:05 2005
@@ -996,6 +996,7 @@
 #define sv_clean_objs		Perl_sv_clean_objs
 #endif
 #define sv_clear		Perl_sv_clear
+#define sv_clear_backend	Perl_sv_clear_backend
 #define sv_cmp			Perl_sv_cmp
 #define sv_cmp_locale		Perl_sv_cmp_locale
 #if defined(USE_LOCALE_COLLATE)
@@ -3494,6 +3495,7 @@
 #define sv_clean_objs()		Perl_sv_clean_objs(aTHX)
 #endif
 #define sv_clear(a)		Perl_sv_clear(aTHX_ a)
+#define sv_clear_backend(a,b)	Perl_sv_clear_backend(aTHX_ a,b)
 #define sv_cmp(a,b)		Perl_sv_cmp(aTHX_ a,b)
 #define sv_cmp_locale(a,b)	Perl_sv_cmp_locale(aTHX_ a,b)
 #if defined(USE_LOCALE_COLLATE)

Modified: trunk/perl/global.sym
==============================================================================
--- trunk/perl/global.sym	(original)
+++ trunk/perl/global.sym	Thu Aug 25 04:48:05 2005
@@ -455,6 +455,7 @@ Perl_sv_catpvn
 Perl_sv_catsv
 Perl_sv_chop
 Perl_sv_clear
+Perl_sv_clear_backend
 Perl_sv_cmp
 Perl_sv_cmp_locale
 Perl_sv_collxfrm

Modified: trunk/perl/proto.h
==============================================================================
--- trunk/perl/proto.h	(original)
+++ trunk/perl/proto.h	Thu Aug 25 04:48:05 2005
@@ -705,6 +705,7 @@ PERL_CALLCONV void	Perl_sv_chop(pTHX_ SV
 PERL_CALLCONV I32	Perl_sv_clean_all(pTHX);
 PERL_CALLCONV void	Perl_sv_clean_objs(pTHX);
 PERL_CALLCONV void	Perl_sv_clear(pTHX_ SV* sv);
+PERL_CALLCONV void	Perl_sv_clear_backend(pTHX_ SV* sv, I32 flags);
 PERL_CALLCONV I32	Perl_sv_cmp(pTHX_ SV* sv1, SV* sv2);
 PERL_CALLCONV I32	Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2);
 #if defined(USE_LOCALE_COLLATE)

Modified: trunk/perl/sv.c
==============================================================================
--- trunk/perl/sv.c	(original)
+++ trunk/perl/sv.c	Thu Aug 25 04:48:05 2005
@@ -4885,7 +4885,13 @@ Perl_sv_clear(pTHX_ register SV *sv)
 {
     assert(sv);
     assert(SvREFCNT(sv) == 0);
+    sv_clear_backend(sv, 0);
+}
 
+void
+Perl_sv_clear_backend(pTHX_ register SV *sv, I32 flags)
+{
+    U32 refcount = SvREFCNT(sv);
     if (SvOBJECT(sv)) {
 	if (PL_defstash) {		/* Still have a symbol table? */
 	    dSP;
@@ -4924,7 +4930,7 @@ Perl_sv_clear(pTHX_ register SV *sv)
 	    } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
 
 
-	    if (SvREFCNT(sv)) {
+	    if (SvREFCNT(sv) > refcount) {
 		if (PL_in_clean_objs)
 		    Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
 			  HvNAME(stash));



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About