def _parse(self, stream, context): obj = ListContainer() c = 0 count = self.countfunc(context) try: if self.subcon.conflags & self.FLAG_COPY_CONTEXT: while c < count: obj.append(self.subcon._parse(stream, context.__copy__())) c += 1 else: while c < count: obj.append(self.subcon._parse(stream, context)) c += 1 except ConstructError: raise ArrayError("expected %d, found %d" % (count, c), sys.exc_info()[1]) return obj
def _parse(self, stream, context): if "<obj>" in context: obj = context["<obj>"] del context["<obj>"] else: obj = ListContainer() if self.nested: context = Container(_ = context) for sc in self.subcons: if sc.conflags & self.FLAG_EMBED: context["<obj>"] = obj sc._parse(stream, context) else: subobj = sc._parse(stream, context) if sc.name is not None: obj.append(subobj) context[sc.name] = subobj return obj
def _parse(self, stream, context): obj = ListContainer() c = 0 try: if self.subcon.conflags & self.FLAG_COPY_CONTEXT: while c < self.maxcout: pos = stream.tell() obj.append(self.subcon._parse(stream, context.__copy__())) c += 1 else: while c < self.maxcout: pos = stream.tell() obj.append(self.subcon._parse(stream, context)) c += 1 except ConstructError: if c < self.mincount: raise RangeError("expected %d to %d, found %d" % (self.mincount, self.maxcout, c), sys.exc_info()[1]) stream.seek(pos) return obj