def _setup_repr(self): InstanceRepr._setup_repr(self) flds = self.allinstancefields.keys() flds.remove('__class__') if self.is_parent: if flds: raise TyperError("%r is a base class of an UnboxedValue," "so it cannot have fields: %r" % (self.classdef, flds)) else: if len(flds) != 1: raise TyperError("%r must have exactly one field: %r" % (self.classdef, flds)) self.specialfieldname = flds[0]
def _setup_repr(self): InstanceRepr._setup_repr(self) flds = self.allinstancefields.keys() flds.remove('__class__') if self.is_parent: if flds: raise TyperError("%r is a base class of an UnboxedValue," "so it cannot have fields: %r" % ( self.classdef, flds)) else: if len(flds) != 1: raise TyperError("%r must have exactly one field: %r" % ( self.classdef, flds)) self.specialfieldname = flds[0]
def _setup_repr(self): llfields = [] ACCESS = lltype.ForwardReference() if self.top_of_virtualizable_hierarchy: llfields.append(('vable_base', llmemory.Address)) llfields.append(('vable_rti', VABLERTIPTR)) llfields.append(('vable_access', lltype.Ptr(ACCESS))) InstanceRepr._setup_repr(self, llfields, hints={'virtualizable': True}, adtmeths={'ACCESS': ACCESS}) rbase = self.rbase accessors = [] if self.top_of_virtualizable_hierarchy: if len(rbase.allinstancefields) != 1: raise TyperError("virtulizable class cannot have" " non-virtualizable base class with instance" " fields: %r" % self.classdef) redirected_fields = [] else: accessors.append(('parent', rbase.ACCESS)) redirected_fields = list(rbase.ACCESS.redirected_fields) name = self.lowleveltype.TO._name TOPPTR = self.get_top_virtualizable_type() self.my_redirected_fields = my_redirected_fields = {} for name, (mangled_name, r) in self.fields.items(): T = r.lowleveltype if T is lltype.Void: continue GETTER = lltype.Ptr(lltype.FuncType([TOPPTR], T)) SETTER = lltype.Ptr(lltype.FuncType([TOPPTR, T], lltype.Void)) accessors.append(('get_' + mangled_name, GETTER)) accessors.append(('set_' + mangled_name, SETTER)) redirected_fields.append(mangled_name) my_redirected_fields[name] = None ACCESS.become( lltype.Struct( name + '_access', hints={'immutable': True}, adtmeths={'redirected_fields': tuple(redirected_fields)}, *accessors)) self.ACCESS = ACCESS
def _setup_repr(self): llfields = [] if self.top_of_virtualizable_hierarchy: llfields.append(("vable_base", llmemory.Address)) llfields.append(("vable_rti", VABLERTIPTR)) InstanceRepr._setup_repr( self, llfields, hints={"virtualizable2": True, "virtuals": self.virtuals}, adtmeths={"access": self.accessor}, ) my_redirected_fields = [] for _, (mangled_name, _) in self.fields.items(): my_redirected_fields.append(mangled_name) self.my_redirected_fields = dict.fromkeys(my_redirected_fields) if self.top_of_virtualizable_hierarchy: self.accessor.initialize(self.object_type, my_redirected_fields) else: self.accessor.initialize(self.object_type, my_redirected_fields, self.rbase.lowleveltype.TO)
def _setup_repr(self): llfields = [] ACCESS = lltype.ForwardReference() if self.top_of_virtualizable_hierarchy: llfields.append(('vable_base', llmemory.Address)) llfields.append(('vable_rti', VABLERTIPTR)) llfields.append(('vable_access', lltype.Ptr(ACCESS))) InstanceRepr._setup_repr(self, llfields, hints = {'virtualizable': True}, adtmeths = {'ACCESS': ACCESS}) rbase = self.rbase accessors = [] if self.top_of_virtualizable_hierarchy: if len(rbase.allinstancefields) != 1: raise TyperError("virtulizable class cannot have" " non-virtualizable base class with instance" " fields: %r" % self.classdef) redirected_fields = [] else: accessors.append(('parent', rbase.ACCESS)) redirected_fields = list(rbase.ACCESS.redirected_fields) name = self.lowleveltype.TO._name TOPPTR = self.get_top_virtualizable_type() self.my_redirected_fields = my_redirected_fields = {} for name, (mangled_name, r) in self.fields.items(): T = r.lowleveltype if T is lltype.Void: continue GETTER = lltype.Ptr(lltype.FuncType([TOPPTR], T)) SETTER = lltype.Ptr(lltype.FuncType([TOPPTR, T], lltype.Void)) accessors.append(('get_'+mangled_name, GETTER)) accessors.append(('set_'+mangled_name, SETTER)) redirected_fields.append(mangled_name) my_redirected_fields[name] = None ACCESS.become(lltype.Struct(name+'_access', hints = {'immutable': True}, adtmeths = {'redirected_fields': tuple(redirected_fields)}, *accessors)) self.ACCESS = ACCESS