def test_getgcflavor(): class A: pass class B: _alloc_flavor_ = "gc" class R: _alloc_flavor_ = "raw" NDF = object() class DummyClsDescDef: def __init__(self, cls): self._cls = cls self.classdesc = self self.basedef = None def getmro(self): return [self] def read_attribute(self, attr, default=NDF): try: return Constant(getattr(self._cls, attr)) except AttributeError: if default is NDF: raise else: return default assert rmodel.getgcflavor(DummyClsDescDef(A)) == 'gc' assert rmodel.getgcflavor(DummyClsDescDef(B)) == 'gc' assert rmodel.getgcflavor(DummyClsDescDef(R)) == 'raw'
def create_instantiate_functions(annotator): # build the 'instantiate() -> instance of C' functions for the vtables needs_generic_instantiate = annotator.bookkeeper.needs_generic_instantiate for classdef in needs_generic_instantiate: assert getgcflavor(classdef) == 'gc' # only gc-case create_instantiate_function(annotator, classdef)
def getinstancerepr(rtyper, classdef, default_flavor='gc'): if classdef is None: flavor = default_flavor else: flavor = getgcflavor(classdef) try: result = rtyper.instance_reprs[classdef, flavor] except KeyError: result = buildinstancerepr(rtyper, classdef, gcflavor=flavor) rtyper.instance_reprs[classdef, flavor] = result rtyper.add_pendingsetup(result) return result