pgraph: fix has_tags() after clearing Python tags

Fixes #936
This commit is contained in:
rdb 2020-06-02 20:23:38 +02:00
parent 08339d3b80
commit 55951c3025
2 changed files with 35 additions and 0 deletions

View File

@ -165,6 +165,12 @@ clear_python_tag(PyObject *key) {
if (PyDict_GetItem(dict, key) != nullptr) {
PyDict_DelItem(dict, key);
}
if (PyDict_Size(dict) == 0 && Py_REFCNT(dict) == 1) {
// This was the last tag, and do_get_python_tags() made sure we have a
// unique reference to the tags, so clear the tag object.
_this->_python_tag_data.clear();
}
}
/**

View File

@ -151,6 +151,35 @@ def test_nodepath_python_tags():
assert rc1 == rc2
def test_nodepath_clear_python_tag():
from panda3d.core import NodePath
path = NodePath("node")
assert not path.has_python_tag("a")
assert not path.has_python_tag("b")
assert not path.node().has_tags()
path.set_python_tag("a", "value")
assert path.has_python_tag("a")
assert not path.has_python_tag("b")
assert path.node().has_tags()
path.set_python_tag("b", "value")
assert path.has_python_tag("a")
assert path.has_python_tag("b")
assert path.node().has_tags()
path.clear_python_tag("a")
assert not path.has_python_tag("a")
assert path.has_python_tag("b")
assert path.node().has_tags()
path.clear_python_tag("b")
assert not path.has_python_tag("a")
assert not path.has_python_tag("b")
assert not path.node().has_tags()
def test_nodepath_replace_texture():
from panda3d.core import NodePath, Texture