more fixes for DISOWN

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7719 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2005-10-25 14:49:09 +00:00
commit 651046b927
2 changed files with 12 additions and 13 deletions

View file

@ -148,18 +148,17 @@ SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *
almost copy paste code from bellow SWIG_POINTER_OWN setting almost copy paste code from bellow SWIG_POINTER_OWN setting
*/ */
SV *obj = sv; SV *obj = sv;
HV *hv; HV *stash = SvSTASH(SvRV(obj));
HV *stash;
stash=SvSTASH(SvRV(obj));
GV *gv = *(GV**) hv_fetch(stash, "OWNER", 5, TRUE); GV *gv = *(GV**) hv_fetch(stash, "OWNER", 5, TRUE);
if (!isGV(gv)) if (isGV(gv)) {
gv_init(gv, stash, "OWNER", 5, FALSE); HV *hv = GvHVn(gv);
hv = GvHVn(gv);
/* /*
To set ownership (see bellow), we use newSViv(1). Hence, to To set ownership (see bellow), an newSViv(1) entry is added.
remove ownership, now we use newSViv(0), right? Hence, to remove ownership, we delete the entry.
*/ */
hv_store_ent(hv, obj, newSViv(0), 0); SV *v = hv_delete_ent(hv, obj, 0, 0);
if (v) SvREFCNT_dec(v);
}
} }
return SWIG_OK; return SWIG_OK;
} }

View file

@ -1380,7 +1380,7 @@ public:
tab4, "my $self = tied(%{$_[0]});\n", tab4, "my $self = tied(%{$_[0]});\n",
tab4, "return unless defined $self;\n", tab4, "return unless defined $self;\n",
tab4, "delete $ITERATORS{$self};\n", tab4, "delete $ITERATORS{$self};\n",
tab4, "if ((exists $OWNER{$self}) and ($OWNER{$self} == 1)) {\n", tab4, "if (exists $OWNER{$self}) {\n",
tab8, cmodule, "::", Swig_name_destroy(symname), "($self);\n", tab8, cmodule, "::", Swig_name_destroy(symname), "($self);\n",
tab8, "delete $OWNER{$self};\n", tab8, "delete $OWNER{$self};\n",
tab4, "}\n}\n\n", tab4, "}\n}\n\n",