Beispiel #1
0
 def _test_size_limit(self, toobig):
     import sys
     from rpython.rtyper.lltypesystem import llgroup
     from rpython.rtyper.lltypesystem.lloperation import llop
     from rpython.translator.platform import CompilationError
     if toobig and sys.maxint > 2147483647:
         py.test.skip("not easy to test groups too big on 64-bit platforms")
     grp = llgroup.group("big")
     S1 = Struct('S1', ('x', Signed), ('y', Signed),
                       ('z', Signed), ('u', Signed),
                       ('x2', Signed), ('y2', Signed),
                       ('z2', Signed), ('u2', Signed),
                       ('x3', Signed), ('y3', Signed),
                       ('z3', Signed), ('u3', Signed),
                       ('x4', Signed), ('y4', Signed),
                       ('z4', Signed), ('u4', Signed))
     goffsets = []
     for i in range(4096 + toobig):
         ofs = grp.add_member(malloc(S1, immortal=True))
         goffsets.append(llgroup.CombinedSymbolic(ofs, 0))
     grpptr = grp._as_ptr()
     def f(n):
         o = llop.extract_ushort(llgroup.HALFWORD, goffsets[n])
         p = llop.get_group_member(Ptr(S1), grpptr, o)
         p.x = 5
         for i in range(len(goffsets)):
             if i != n:
                 o = llop.extract_ushort(llgroup.HALFWORD, goffsets[i])
                 q = llop.get_group_member(Ptr(S1), grpptr, o)
                 q.x = 666
         return p.x
     if toobig:
         py.test.raises(CompilationError, self.getcompiled, f, [int])
     else:
         fn = self.getcompiled(f, [int])
         res = fn(len(goffsets)-1)
         assert res == 5
Beispiel #2
0
 def make_type_info_group(self):
     self.type_info_group = llgroup.group("typeinfo")
     # don't use typeid 0, may help debugging
     DUMMY = lltype.Struct("dummy", ('x', lltype.Signed))
     dummy = lltype.malloc(DUMMY, immortal=True, zero=True)
     self.type_info_group.add_member(dummy)
Beispiel #3
0
 def make_type_info_group(self):
     self.type_info_group = llgroup.group("typeinfo")
     # don't use typeid 0, may help debugging
     DUMMY = lltype.Struct("dummy", ('x', lltype.Signed))
     dummy = lltype.malloc(DUMMY, immortal=True, zero=True)
     self.type_info_group.add_member(dummy)