File: interp_tracker.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • 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 (45 lines) | stat: -rw-r--r-- 1,498 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
from rpython.rtyper.lltypesystem import rffi, lltype
from rpython.rlib.objectmodel import newlist_hint
from pypy.interpreter.error import OperationError, oefmt
from pypy.interpreter.baseobjspace import W_Root
from pypy.module._hpy_universal.apiset import API

class W_Tracker(W_Root):
    def __init__(self, size):
        self.hlist = newlist_hint(size)

    def add(self, h):
        self.hlist.append(h)

    def forget_all(self):
        self.hlist = []

    def close(self, handles):
        for h in self.hlist:
            handles.close(h)

@API.func("HPyTracker HPyTracker_New(HPyContext *ctx, HPy_ssize_t size)", error_value=0)
def HPyTracker_New(space, handles, ctx, size):
    w_tracker = W_Tracker(size)
    return handles.new(w_tracker)

@API.func("int HPyTracker_Add(HPyContext *ctx, HPyTracker ht, HPy h)",
          error_value=API.int(-1))
def HPyTracker_Add(space, handles, ctx, ht, h):
    w_tracker = handles.deref(ht)
    assert isinstance(w_tracker, W_Tracker)
    w_tracker.add(h)
    return API.int(0)

@API.func("void HPyTracker_ForgetAll(HPyContext *ctx, HPyTracker ht)")
def HPyTracker_ForgetAll(space, handles, ctx, ht):
    w_tracker = handles.deref(ht)
    assert isinstance(w_tracker, W_Tracker)
    w_tracker.forget_all()

@API.func("void HPyTracker_Close(HPyContext *ctx, HPyTracker ht)")
def HPyTracker_Close(space, handles, ctx, ht):
    w_tracker = handles.deref(ht)
    assert isinstance(w_tracker, W_Tracker)
    w_tracker.close(handles)
    handles.close(ht)