new tags are now mapped to their own IDs, not an allocated one
[swftools.git] / lib / python / taglist.c
index 27b3a66..e4eeffc 100644 (file)
@@ -19,7 +19,7 @@ typedef struct {
 PyObject * taglist_new()
 {
     TagListObject* taglist = PyObject_New(TagListObject, &TagListClass);
-    mylog("+%08x(%d) taglist_new2", (int)taglist, taglist->ob_refcnt);
+    mylog("+%08x(%d) taglist_new", (int)taglist, taglist->ob_refcnt);
     taglist->tagmap = tagmap_new();
     taglist->taglist = PyList_New(0);
     return (PyObject*)taglist;
@@ -28,21 +28,28 @@ PyObject * taglist_new()
 PyObject * taglist_new2(TAG*tag)
 {
     TagListObject* taglist = PyObject_New(TagListObject, &TagListClass);
-    mylog("+%08x(%d) taglist_new2", (int)taglist, taglist->ob_refcnt);
+    mylog("+%08x(%d) taglist_new2 tag=%08x", (int)taglist, taglist->ob_refcnt, tag);
     taglist->tagmap = tagmap_new();
 
     int nr=0;
     TAG*t = tag;
     while(t) {nr++;t=t->next;}
     taglist->taglist = PyList_New(nr);
+    
+    mylog("+%08x(%d) taglist_new2: %d items", (int)taglist, taglist->ob_refcnt, nr);
 
     nr = 0;
     t = tag;
     while(t) {
-       PyObject*newtag = tag_new(tag);
+       PyObject*newtag = tag_new2(t, taglist->tagmap);
+       if(newtag==NULL) {
+           // pass through exception
+           return NULL;
+       }
        PyList_SET_ITEM(taglist->taglist,nr,newtag);Py_INCREF(newtag);
        if(swf_isDefiningTag(t)) {
-           tagmap_add(taglist->tagmap, newtag);
+           int id = swf_GetDefineID(t);
+           tagmap_addMapping(taglist->tagmap, id, newtag);
        }
        nr++;
        t=t->next;
@@ -70,6 +77,7 @@ TAG* taglist_getTAGs(PyObject*self)
        tag = tag_getTAG(item, tag, taglist->tagmap);
        if(!firstTag)
            firstTag = tag;
+       mylog(" %08x(%d) taglist_getTAGs: added tag %08x", (int)self, self->ob_refcnt, tag);
     }
     return firstTag;
 }