File: test_gcreftracer.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (54 lines) | stat: -rw-r--r-- 1,848 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
from rpython.jit.backend.llsupport.gcreftracer import GCREFTRACER, gcrefs_trace
from rpython.jit.backend.llsupport.gcreftracer import make_framework_tracer
from rpython.jit.backend.llsupport.gcreftracer import make_boehm_tracer


class FakeGC:
    def __init__(self):
        self.called = []
    def _trace_callback(self, callback, arg1, arg2, addr):
        assert callback == "callback"
        assert arg1 == "arg1"
        assert arg2 == "arg2"
        assert lltype.typeOf(addr) == llmemory.Address
        self.called.append(addr)


def test_gcreftracer():
    a = lltype.malloc(rffi.CArray(lltype.Signed), 3, flavor='raw')
    a[0] = 123
    a[1] = 456
    a[2] = 789
    tr = lltype.malloc(GCREFTRACER)
    tr.array_base_addr = base = rffi.cast(lltype.Signed, a)
    tr.array_length = 3
    gc = FakeGC()
    gcrefs_trace(gc, llmemory.cast_ptr_to_adr(tr), "callback", "arg1", "arg2")
    assert len(gc.called) == 3
    WORD = rffi.sizeof(lltype.Signed)
    for i in range(3):
        assert gc.called[i] == rffi.cast(llmemory.Address, base + i * WORD)
    lltype.free(a, flavor='raw')

def test_make_framework_tracer():
    a = lltype.malloc(rffi.CArray(lltype.Signed), 3, flavor='raw')
    base = rffi.cast(lltype.Signed, a)
    tr = make_framework_tracer(base, [123, 456, 789])
    assert a[0] == 123
    assert a[1] == 456
    assert a[2] == 789
    assert tr.array_base_addr == base
    assert tr.array_length == 3
    lltype.free(a, flavor='raw')

def test_make_boehm_tracer():
    a = lltype.malloc(rffi.CArray(lltype.Signed), 3, flavor='raw')
    base = rffi.cast(lltype.Signed, a)
    lst = [123, 456, 789]
    tr = make_boehm_tracer(base, lst)
    assert a[0] == 123
    assert a[1] == 456
    assert a[2] == 789
    assert tr is lst
    lltype.free(a, flavor='raw')