Beispiel #1
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]
Beispiel #2
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]
Beispiel #3
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)
Beispiel #5
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