X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpython%2Ftagmap.c;h=317d817e4a3bb597ed215a7db937dbddd6e61879;hb=3281edc9ef69c0ba876f0146f55540227aa6a7fb;hp=055d035c950fc1315d7ea89f393bc687f4ae1b9a;hpb=726d172d02228a2e9b084efba8d3173994343c2b;p=swftools.git diff --git a/lib/python/tagmap.c b/lib/python/tagmap.c index 055d035..317d817 100644 --- a/lib/python/tagmap.c +++ b/lib/python/tagmap.c @@ -90,6 +90,27 @@ int tagmap_getFreeID(PyObject*self) return -1; } //---------------------------------------------------------------------------- +static void tagmap_add_mapping(PyObject*self, int id, PyObject* obj) +{ + TagMapObject*tagmap = (TagMapObject*)self; + PyList_Append(tagmap->objlist, obj);//Py_INCREF(obj); done by PyList_Append + PyObject*id_obj = PyLong_FromLong(id); + PyDict_SetItem(tagmap->obj2id, obj, id_obj);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem + PyDict_SetItem(tagmap->id2obj, id_obj, obj);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem + Py_DECREF(id_obj); +} +//---------------------------------------------------------------------------- +void tagmap_addMapping(PyObject*self, int id, PyObject* obj) +{ + TagMapObject*tagmap = (TagMapObject*)self; + int id2 = tagmap_obj2id(self, obj); + if(id2>=0) { + assert(id==id2); + return; + } + tagmap_add_mapping(self, id, obj); +} +//---------------------------------------------------------------------------- int tagmap_add(PyObject* self, PyObject* obj) { TagMapObject*tagmap = (TagMapObject*)self; @@ -99,11 +120,9 @@ int tagmap_add(PyObject* self, PyObject* obj) return id; } id = tagmap_getFreeID(self); - PyList_Append(tagmap->objlist, obj);//Py_INCREF(obj); done by PyList_Append - PyObject*id_obj = PyLong_FromLong(id); - PyDict_SetItem(tagmap->obj2id, obj, id_obj);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem - PyDict_SetItem(tagmap->id2obj, id_obj, obj);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem - Py_DECREF(id_obj); + + tagmap_add_mapping(self, id, obj); + mylog(" %08x(%d) tagmap_add %08x->%d", (int)self, self->ob_refcnt, (int)obj, id); return id; }