Exemple #1
0
 def merge(self, other):
     if self is not other:
         assert self.custom_eq_hash == other.custom_eq_hash, (
             "mixing plain dictionaries with r_dict()")
         ListItem.merge(self, other)
         if self.custom_eq_hash:
             self.update_rdict_annotations(other.s_rdict_eqfn,
                                           other.s_rdict_hashfn,
                                           other=other)
Exemple #2
0
 def merge(self, other):
     if self is not other:
         assert self.custom_eq_hash == other.custom_eq_hash, (
             "mixing plain dictionaries with r_dict()")
         ListItem.merge(self, other)
         if self.custom_eq_hash:
             self.update_rdict_annotations(other.s_rdict_eqfn,
                                           other.s_rdict_hashfn,
                                           other=other)
Exemple #3
0
 def generalize(self, s_other_value):
     updated = ListItem.generalize(self, s_other_value)
     if updated:
         self.enable_hashing()
     if updated and self.custom_eq_hash:
         self.emulate_rdict_calls()
     return updated
 def generalize(self, s_other_value):
     updated = ListItem.generalize(self, s_other_value)
     if updated:
         self.enable_hashing()
     if updated and self.custom_eq_hash:
         self.emulate_rdict_calls()
     return updated
Exemple #5
0
 def __init__(self, bookkeeper, name, hs_value):
     ListItem.__init__(self, bookkeeper, hs_value)
     self.name = name
Exemple #6
0
 def __init__(self, bookkeeper, name, hs_value):
     ListItem.__init__(self, bookkeeper, hs_value)
     self.name = name
Exemple #7
0
 def __init__(self, bookkeeper, s_value, is_r_dict=False):
     ListItem.__init__(self, bookkeeper, s_value)
     self.custom_eq_hash = is_r_dict
Exemple #8
0
class VirtualListDef(AbstractContainerDef):
    type_name = 'list'

    def __init__(self, bookkeeper, LIST):
        AbstractContainerDef.__init__(self, bookkeeper, LIST)
        hs = make_item_annotation(bookkeeper, LIST.ITEM)
        self.listitem = ListItem(bookkeeper, hs)
        self.listitem.itemof[self] = True

    def read_item(self):
        self.listitem.read_locations[self.bookkeeper.position_key] = True
        return self.listitem.s_value

    def same_as(self, other):
        return self.listitem == other.listitem

    def union(self, other):
        assert self.T == other.T
        self.listitem.merge(other.listitem)
        return self

    def generalize_item(self, hs_value):
        assert hs_value.concretetype == self.T.ITEM
        self.listitem.generalize(hs_value)

    # ________________________________________
    # OOP high-level operations

    def oop_len(self):
        origin = getbookkeeper().myorigin()
        return SomeLLAbstractConstant(lltype.Signed, {origin: True})

    def oop_nonzero(self):
        origin = getbookkeeper().myorigin()
        return SomeLLAbstractConstant(lltype.Bool, {origin: True})

    def oop_getitem(self, hs_index):
        assert hs_index.concretetype == lltype.Signed
        hs_res = self.read_item()
        return reorigin(hs_res, hs_res, hs_index)

    def oop_setitem(self, hs_index, hs_value):
        assert hs_index.concretetype == lltype.Signed
        self.generalize_item(hs_value)

    def oop_delitem(self, hs_index):
        assert hs_index.concretetype == lltype.Signed

    def oop_append(self, hs_value):
        self.generalize_item(hs_value)

    def oop_insert(self, hs_index, hs_value):
        assert hs_index.concretetype == lltype.Signed
        self.generalize_item(hs_value)

    def oop_pop(self, hs_index=None):
        assert hs_index is None or hs_index.concretetype == lltype.Signed
        hs_res = self.read_item()
        return reorigin(hs_res, hs_res, hs_index)

    def oop_reverse(self):
        pass

    def oop_copy(self):
        bk = self.bookkeeper
        vlistdef = bk.getvirtualcontainerdef(self.T, VirtualListDef)
        vlistdef.generalize_item(self.read_item())
        return SomeLLAbstractContainer(vlistdef)

    def oop_concat(self, hs_other):
        assert isinstance(hs_other, SomeLLAbstractContainer) # for now
        assert hs_other.contentdef.T == self.T
        return self.oop_copy()
Exemple #9
0
 def __init__(self, bookkeeper, LIST):
     AbstractContainerDef.__init__(self, bookkeeper, LIST)
     hs = make_item_annotation(bookkeeper, LIST.ITEM)
     self.listitem = ListItem(bookkeeper, hs)
     self.listitem.itemof[self] = True
Exemple #10
0
 def __init__(self, bookkeeper, s_value, is_r_dict=False):
     ListItem.__init__(self, bookkeeper, s_value)
     self.is_r_dict = is_r_dict
     self.enable_hashing()
Exemple #11
0
 def __init__(self, bookkeeper, s_value, is_r_dict=False):
     ListItem.__init__(self, bookkeeper, s_value)
     self.custom_eq_hash = is_r_dict
 def __init__(self, bookkeeper, s_value, is_r_dict=False):
     ListItem.__init__(self, bookkeeper, s_value)
     self.is_r_dict = is_r_dict
     self.enable_hashing()