File: _pypy_util_cffi.py

package info (click to toggle)
pypy3 7.3.20%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 212,628 kB
  • sloc: python: 2,101,020; ansic: 540,684; 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 (22 lines) | stat: -rw-r--r-- 695 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import __pypy__
from _pypy_util_cffi_inner import ffi, lib

class StackNew(object):
    def __init__(self, tp, size=None):
        if size is None:
            total_size = ffi.sizeof(tp)
        else:
            if tp.endswith("[]"):
                total_size = ffi.sizeof(tp[:-2] + "[1]") * size
            else:
                total_size = ffi.sizeof(tp) * size                
        if tp.endswith("[]"):
            tp = tp[:-2] + "*" # XXX dodgu?
        self._p = ffi.cast(tp, lib.malloc(total_size))
        __pypy__.add_memory_pressure(total_size)

    def __enter__(self):
        return self._p

    def __exit__(self, tp, val, tb):
        lib.free(ffi.cast("void*", self._p))