Properly detect recursive structures. Adopted from patch #465298.

This commit is contained in:
Martin v. Löwis 2001-09-30 20:15:41 +00:00
parent af5910f025
commit 5f12d755a8

View file

@ -490,6 +490,10 @@ def container(self, value):
raise TypeError, "cannot marshal recursive data structures"
self.memo[i] = None
def endcontainer(self, value):
if value:
del self.memo[id(value)]
def dump_array(self, value):
self.container(value)
write = self.write
@ -497,6 +501,7 @@ def dump_array(self, value):
for v in value:
self.__dump(v)
write("</data></array></value>\n")
self.endcontainer(value)
dispatch[TupleType] = dump_array
dispatch[ListType] = dump_array
@ -513,6 +518,7 @@ def dump_struct(self, value):
self.__dump(v)
write("</member>\n")
write("</struct></value>\n")
self.endcontainer(value)
dispatch[DictType] = dump_struct
def dump_instance(self, value):