Esempio n. 1
0
def setup_buffer_procs(space, w_type, pto):
    bufspec = w_type.layout.typedef.buffer
    if bufspec is None and not space.is_w(w_type, space.w_unicode):
        # not a buffer, but let w_unicode be a read buffer
        return
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getsegcount = llslot(space, bf_segcount)
    if space.is_w(w_type, space.w_str):
        # Special case: str doesn't support get_raw_address(), so we have a
        # custom get*buffer that instead gives the address of the char* in the
        # PyBytesObject*!
        c_buf.c_bf_getreadbuffer = llslot(space, str_getreadbuffer)
        c_buf.c_bf_getcharbuffer = llslot(space, str_getcharbuffer)
    elif space.is_w(w_type, space.w_unicode):
        # Special case: unicode doesn't support get_raw_address(), so we have a
        # custom get*buffer that instead gives the address of the char* in the
        # PyUnicodeObject*!
        c_buf.c_bf_getreadbuffer = llslot(space, unicode_getreadbuffer)
    elif space.is_w(w_type, space.w_buffer):
        # Special case: we store a permanent address on the cpyext wrapper,
        # so we'll reuse that.
        # Note: we could instead store a permanent address on the buffer object,
        # and use get_raw_address()
        c_buf.c_bf_getreadbuffer = llslot(space, buf_getreadbuffer)
        c_buf.c_bf_getcharbuffer = llslot(space, buf_getcharbuffer)
    else:
        # use get_raw_address()
        c_buf.c_bf_getreadbuffer = llslot(space, bf_getreadbuffer)
        c_buf.c_bf_getcharbuffer = llslot(space, bf_getcharbuffer)
        if bufspec == 'read-write':
            c_buf.c_bf_getwritebuffer = llslot(space, bf_getwritebuffer)
    pto.c_tp_as_buffer = c_buf
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_NEWBUFFER
Esempio n. 2
0
def setup_buffer_procs(space, w_type, pto):
    bufspec = w_type.layout.typedef.buffer
    if bufspec is None and not space.is_w(w_type, space.w_unicode):
        # not a buffer, but let w_unicode be a read buffer
        return
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getsegcount = llslot(space, bf_segcount)
    if space.is_w(w_type, space.w_bytes):
        # Special case: str doesn't support get_raw_address(), so we have a
        # custom get*buffer that instead gives the address of the char* in the
        # PyBytesObject*!
        c_buf.c_bf_getreadbuffer = llslot(space, str_getreadbuffer)
        c_buf.c_bf_getcharbuffer = llslot(space, str_getcharbuffer)
    elif space.is_w(w_type, space.w_unicode):
        # Special case: unicode doesn't support get_raw_address(), so we have a
        # custom get*buffer that instead gives the address of the char* in the
        # PyUnicodeObject*!
        c_buf.c_bf_getreadbuffer = llslot(space, unicode_getreadbuffer)
    elif space.is_w(w_type, space.w_buffer):
        # Special case: we store a permanent address on the cpyext wrapper,
        # so we'll reuse that.
        # Note: we could instead store a permanent address on the buffer object,
        # and use get_raw_address()
        c_buf.c_bf_getreadbuffer = llslot(space, buf_getreadbuffer)
        c_buf.c_bf_getcharbuffer = llslot(space, buf_getcharbuffer)
    else:
        # use get_raw_address()
        c_buf.c_bf_getreadbuffer = llslot(space, bf_getreadbuffer)
        c_buf.c_bf_getcharbuffer = llslot(space, bf_getcharbuffer)
        if bufspec == 'read-write':
            c_buf.c_bf_getwritebuffer = llslot(space, bf_getwritebuffer)
    pto.c_tp_as_buffer = c_buf
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_NEWBUFFER
Esempio n. 3
0
 def get_version(self):
     if not self.version:
         space = self.space
         w_version = space.sys.get('version')
         version = space.str_w(w_version)
         self.version = rffi.str2charp(version)
         lltype.render_immortal(self.version)
     return self.version
Esempio n. 4
0
 def get_version(self):
     if not self.version:
         space = self.space
         w_version = space.sys.get('version')
         version = space.str_w(w_version)
         self.version = rffi.str2charp(version)
         lltype.render_immortal(self.version)
     return self.version
Esempio n. 5
0
def setup_buffer_buffer_procs(space, pto):
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getsegcount = llhelper(str_segcount.api_func.functype,
                                      str_segcount.api_func.get_wrapper(space))
    c_buf.c_bf_getreadbuffer = llhelper(buf_getreadbuffer.api_func.functype,
                                 buf_getreadbuffer.api_func.get_wrapper(space))
    pto.c_tp_as_buffer = c_buf
Esempio n. 6
0
def setup_bytes_buffer_procs(space, pto):
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getbuffer = llhelper(
        bytes_getbuffer.api_func.functype,
        bytes_getbuffer.api_func.get_wrapper(space))
    pto.c_tp_as_buffer = c_buf
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER
Esempio n. 7
0
def setup_buffer_buffer_procs(space, pto):
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getsegcount = llhelper(str_segcount.api_func.functype,
                                      str_segcount.api_func.get_wrapper(space))
    c_buf.c_bf_getreadbuffer = llhelper(buf_getreadbuffer.api_func.functype,
                                 buf_getreadbuffer.api_func.get_wrapper(space))
    pto.c_tp_as_buffer = c_buf
Esempio n. 8
0
 def get_version(self):
     if not self.version:
         space = self.space
         w_version = space.sys.get('version')
         version = space.str_w(w_version)
         self.version = rffi.str2charp(version)
         lltype.render_immortal(self.version)
     return self.version
     foo = self.import_module(name='foo', init=init)
Esempio n. 9
0
def setup_string_buffer_procs(space, pto):
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getsegcount = llhelper(str_segcount.api_func.functype,
                                      str_segcount.api_func.get_wrapper(space))
    c_buf.c_bf_getreadbuffer = llhelper(str_getreadbuffer.api_func.functype,
                                 str_getreadbuffer.api_func.get_wrapper(space))
    c_buf.c_bf_getcharbuffer = llhelper(str_getcharbuffer.api_func.functype,
                                 str_getcharbuffer.api_func.get_wrapper(space))
    pto.c_tp_as_buffer = c_buf
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER
Esempio n. 10
0
def setup_string_buffer_procs(space, pto):
    c_buf = lltype.malloc(PyBufferProcs, flavor='raw', zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getsegcount = llhelper(str_segcount.api_func.functype,
                                      str_segcount.api_func.get_wrapper(space))
    c_buf.c_bf_getreadbuffer = llhelper(str_getreadbuffer.api_func.functype,
                                 str_getreadbuffer.api_func.get_wrapper(space))
    c_buf.c_bf_getcharbuffer = llhelper(str_getcharbuffer.api_func.functype,
                                 str_getcharbuffer.api_func.get_wrapper(space))
    pto.c_tp_as_buffer = c_buf
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER
Esempio n. 11
0
 def get_programname(self):
     if not self.programname:
         space = self.space
         argv = space.sys.get('argv')
         if space.len_w(argv):
             argv0 = space.getitem(argv, space.newint(0))
             progname = space.unicode_w(argv0)
         else:
             progname = u"pypy3"
         self.programname = rffi.unicode2wcharp(progname)
         lltype.render_immortal(self.programname)
     return self.programname
Esempio n. 12
0
 def get_programname(self):
     if not self.programname:
         space = self.space
         argv = space.sys.get('argv')
         if space.len_w(argv):
             argv0 = space.getitem(argv, space.wrap(0))
             progname = space.str_w(argv0)
         else:
             progname = "pypy"
         self.programname = rffi.str2charp(progname)
         lltype.render_immortal(self.programname)
     return self.programname
Esempio n. 13
0
 def get_programname(self):
     if not self.programname:
         space = self.space
         argv = space.sys.get('argv')
         if space.len_w(argv):
             argv0 = space.getitem(argv, space.wrap(0))
             progname = space.str_w(argv0)
         else:
             progname = "pypy"
         self.programname = rffi.str2charp(progname)
         lltype.render_immortal(self.programname)
     return self.programname
Esempio n. 14
0
 def get_programname(self):
     if not self.programname:
         space = self.space
         argv = space.sys.get('argv')
         if space.len_w(argv):
             argv0 = space.getitem(argv, space.newint(0))
             progname = space.utf8_w(argv0)
             lgt = space.len_w(argv0)
         else:
             progname = "pypy3"
             lgt = len(progname)
         self.programname = rffi.utf82wcharp(progname, lgt)
         lltype.render_immortal(self.programname)
     return self.programname
Esempio n. 15
0
def get_new_method_def(space):
    state = space.fromcache(State)
    if state.new_method_def:
        return state.new_method_def
    ptr = lltype.malloc(PyMethodDef, flavor="raw", zero=True,
                        immortal=True)
    ptr.c_ml_name = rffi.cast(rffi.CONST_CCHARP, rffi.str2charp("__new__"))
    lltype.render_immortal(ptr.c_ml_name)
    rffi.setintfield(ptr, 'c_ml_flags', METH_VARARGS | METH_KEYWORDS)
    ptr.c_ml_doc = rffi.cast(rffi.CONST_CCHARP, rffi.str2charp(
        "T.__new__(S, ...) -> a new object with type S, a subtype of T"))
    lltype.render_immortal(ptr.c_ml_doc)
    state.new_method_def = ptr
    return ptr
Esempio n. 16
0
def get_new_method_def(space):
    state = space.fromcache(State)
    if state.new_method_def:
        return state.new_method_def
    from pypy.module.cpyext.modsupport import PyMethodDef

    ptr = lltype.malloc(PyMethodDef, flavor="raw", zero=True, immortal=True)
    ptr.c_ml_name = rffi.str2charp("__new__")
    lltype.render_immortal(ptr.c_ml_name)
    rffi.setintfield(ptr, "c_ml_flags", METH_VARARGS | METH_KEYWORDS)
    ptr.c_ml_doc = rffi.str2charp("T.__new__(S, ...) -> a new object with type S, a subtype of T")
    lltype.render_immortal(ptr.c_ml_doc)
    state.new_method_def = ptr
    return ptr
Esempio n. 17
0
def get_new_method_def(space):
    state = space.fromcache(State)
    if state.new_method_def:
        return state.new_method_def
    ptr = lltype.malloc(PyMethodDef, flavor="raw", zero=True,
                        immortal=True)
    ptr.c_ml_name = rffi.cast(rffi.CONST_CCHARP, rffi.str2charp("__new__"))
    lltype.render_immortal(ptr.c_ml_name)
    rffi.setintfield(ptr, 'c_ml_flags', METH_VARARGS | METH_KEYWORDS)
    ptr.c_ml_doc = rffi.cast(rffi.CONST_CCHARP, rffi.str2charp(
        "T.__new__(S, ...) -> a new object with type S, a subtype of T"))
    lltype.render_immortal(ptr.c_ml_doc)
    state.new_method_def = ptr
    return ptr
Esempio n. 18
0
def get_new_method_def(space):
    state = space.fromcache(State)
    if state.new_method_def:
        return state.new_method_def
    ptr = lltype.malloc(PyMethodDef, flavor="raw", zero=True,
                        immortal=True)
    ptr.c_ml_name = rffi.cast(rffi.CONST_CCHARP, rffi.str2charp("__new__"))
    lltype.render_immortal(ptr.c_ml_name)
    rffi.setintfield(ptr, 'c_ml_flags', METH_VARARGS | METH_KEYWORDS)
    ptr.c_ml_doc = rffi.cast(rffi.CONST_CCHARP, rffi.str2charp(
        "Create and return a new object.  "
        "See help(type) for accurate signature."))
    lltype.render_immortal(ptr.c_ml_doc)
    state.new_method_def = ptr
    return ptr
Esempio n. 19
0
def setup_bytes_buffer_procs(space, pto):
    c_buf = lltype.malloc(PyBufferProcs, flavor="raw", zero=True)
    lltype.render_immortal(c_buf)
    c_buf.c_bf_getbuffer = llhelper(bytes_getbuffer.api_func.functype, bytes_getbuffer.api_func.get_wrapper(space))
    pto.c_tp_as_buffer = c_buf
    pto.c_tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER