Esempio n. 1
0
 def _setup_repr_fields(self):
     fields = []
     self.fieldmap = {}
     if self.access_set is not None:
         attrlist = self.access_set.attrs.keys()
         attrlist.sort()
         for attr in attrlist:
             s_value = self.access_set.attrs[attr]
             r_value = self.rtyper.getrepr(s_value)
             mangled_name = mangle('pbc', attr)
             fields.append((mangled_name, r_value.lowleveltype))
             self.fieldmap[attr] = mangled_name, r_value
     return fields
Esempio n. 2
0
 def _setup_repr_fields(self):
     fields = []
     self.fieldmap = {}
     if self.access_set is not None:
         attrlist = self.access_set.attrs.keys()
         attrlist.sort()
         for attr in attrlist:
             s_value = self.access_set.attrs[attr]
             r_value = self.rtyper.getrepr(s_value)
             mangled_name = mangle('pbc', attr)
             fields.append((mangled_name, r_value.lowleveltype))
             self.fieldmap[attr] = mangled_name, r_value
     return fields 
Esempio n. 3
0
 def _setup_repr(self):
     # NOTE: don't store mutable objects like the dicts below on 'self'
     #       before they are fully built, to avoid strange bugs in case
     #       of recursion where other code would uses these
     #       partially-initialized dicts.
     clsfields = {}
     pbcfields = {}
     allmethods = {}
     if self.classdef is not None:
         # class attributes
         llfields = []
         attrs = self.classdef.attrs.items()
         attrs.sort()
         for name, attrdef in attrs:
             if attrdef.readonly:
                 s_value = attrdef.s_value
                 s_unboundmethod = self.prepare_method(s_value)
                 if s_unboundmethod is not None:
                     allmethods[name] = True
                     s_value = s_unboundmethod
                 r = self.rtyper.getrepr(s_value)
                 mangled_name = 'cls_' + name
                 clsfields[name] = mangled_name, r
                 llfields.append((mangled_name, r.lowleveltype))
         # attributes showing up in getattrs done on the class as a PBC
         extra_access_sets = self.rtyper.class_pbc_attributes.get(
             self.classdef, {})
         for access_set, (attr, counter) in extra_access_sets.items():
             r = self.rtyper.getrepr(access_set.s_value)
             mangled_name = mangle('pbc%d' % counter, attr)
             pbcfields[access_set, attr] = mangled_name, r
             llfields.append((mangled_name, r.lowleveltype))
         #
         self.rbase = getclassrepr(self.rtyper, self.classdef.basedef)
         self.rbase.setup()
         kwds = {'hints': {'immutable': True}}
         vtable_type = Struct('%s_vtable' % self.classdef.name,
                              ('super', self.rbase.vtable_type), *llfields,
                              **kwds)
         self.vtable_type.become(vtable_type)
         allmethods.update(self.rbase.allmethods)
     self.clsfields = clsfields
     self.pbcfields = pbcfields
     self.allmethods = allmethods
     self.vtable = None
Esempio n. 4
0
 def _setup_repr(self):
     # NOTE: don't store mutable objects like the dicts below on 'self'
     #       before they are fully built, to avoid strange bugs in case
     #       of recursion where other code would uses these
     #       partially-initialized dicts.
     clsfields = {}
     pbcfields = {}
     allmethods = {}
     if self.classdef is not None:
         # class attributes
         llfields = []
         attrs = self.classdef.attrs.items()
         attrs.sort()
         for name, attrdef in attrs:
             if attrdef.readonly:
                 s_value = attrdef.s_value
                 s_unboundmethod = self.prepare_method(s_value)
                 if s_unboundmethod is not None:
                     allmethods[name] = True
                     s_value = s_unboundmethod
                 r = self.rtyper.getrepr(s_value)
                 mangled_name = 'cls_' + name
                 clsfields[name] = mangled_name, r
                 llfields.append((mangled_name, r.lowleveltype))
         # attributes showing up in getattrs done on the class as a PBC
         extra_access_sets = self.rtyper.class_pbc_attributes.get(
             self.classdef, {})
         for access_set, (attr, counter) in extra_access_sets.items():
             r = self.rtyper.getrepr(access_set.s_value)
             mangled_name = mangle('pbc%d' % counter, attr)
             pbcfields[access_set, attr] = mangled_name, r
             llfields.append((mangled_name, r.lowleveltype))
         #
         self.rbase = getclassrepr(self.rtyper, self.classdef.basedef)
         self.rbase.setup()
         kwds = {'hints': {'immutable': True}}
         vtable_type = Struct('%s_vtable' % self.classdef.name,
                              ('super', self.rbase.vtable_type),
                              *llfields, **kwds)
         self.vtable_type.become(vtable_type)
         allmethods.update(self.rbase.allmethods)
     self.clsfields = clsfields
     self.pbcfields = pbcfields
     self.allmethods = allmethods
     self.vtable = None