X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=coe%2Fbin.py;h=0e92bc6d28475de26df73ebde377089937753e54;hb=6d98d3d8cebcff5dd8a3ee274d4392d862f20172;hp=0aa6e5ae6279f1d9e88c454d209372454d3e7895;hpb=82855e293520a6112cbb353d9fb3ae9fff2e049d;p=coe.git diff --git a/coe/bin.py b/coe/bin.py index 0aa6e5a..0e92bc6 100644 --- a/coe/bin.py +++ b/coe/bin.py @@ -152,9 +152,6 @@ class referror(fmterror): def __init__(self): super().__init__("bad backref") -class namedtype(type): - pass - class decoder(object): def __init__(self): self.reftab = [] @@ -225,6 +222,9 @@ class decoder(object): return buf buf[key] = self.loadtagged(fp, tag) + def makeobjtype(self, nm): + return data.namedtype(str(nm), (data.obj, object), {}, typename=nm) + def loadobj(self, fp, ref=False): if ref: refid = len(self.reftab) @@ -232,8 +232,7 @@ class decoder(object): nm = self.load(fp) typ = self.namedtypes.get(nm) if typ is None: - typ = self.namedtypes[nm] = namedtype(str(nm), (data.obj, object), {}) - typ.typename = nm + typ = self.namedtypes[nm] = self.makeobjtype(nm) ret = typ() if ref: self.reftab[refid] = ret @@ -260,10 +259,10 @@ class decoder(object): return self.reftab[idx] return self.addref(self.loadint(fp)) elif pri == T_STR: - ret = self.addref(self.loadstr(fp)) + ret = self.loadstr(fp) if sec == STR_SYM: - return data.symbol.get("", ret) - return ret + return self.addref(data.symbol.get("", ret)) + return self.addref(ret) elif pri == T_BIT: ln = self.loadint(fp) ret = self.addref(fp.read(ln))