[pypy-commit] pypy reflex-support: rpython fixes
wlav
noreply at buildbot.pypy.org
Thu May 12 02:46:59 CEST 2011
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: reflex-support
Changeset: r44087:a9d4425f7bfe
Date: 2011-05-11 17:54 -0700
http://bitbucket.org/pypy/pypy/changeset/a9d4425f7bfe/
Log: rpython fixes
diff --git a/pypy/module/cppyy/converter.py b/pypy/module/cppyy/converter.py
--- a/pypy/module/cppyy/converter.py
+++ b/pypy/module/cppyy/converter.py
@@ -5,23 +5,21 @@
from pypy.rlib.rarithmetic import r_singlefloat
from pypy.rlib import jit, libffi
-from pypy.objspace.std.noneobject import W_NoneObject
-
from pypy.module._rawffi.interp_rawffi import unpack_simple_shape
from pypy.module._rawffi.array import W_Array
from pypy.module.cppyy import helper, capi
+
_converters = {}
def get_rawobject(space, w_obj):
- from pypy.module.cppyy.interp_cppyy import W_CPPInstance
- w_obj = space.wrap(space.findattr(w_obj, space.wrap("_cppinstance")))
- obj = space.interp_w(W_CPPInstance, w_obj, can_be_None=True)
- if obj:
- return obj.rawobject
- else:
- return lltype.nullptr(rffi.CCHARP.TO)
+ if w_obj:
+ from pypy.module.cppyy.interp_cppyy import W_CPPInstance
+ w_cpp_instance = space.findattr(w_obj, space.wrap("_cppinstance"))
+ if w_cpp_instance:
+ return w_cpp_instance.rawobject
+ return lltype.nullptr(rffi.CCHARP.TO)
class TypeConverter(object):
@@ -32,7 +30,7 @@
pass
@jit.dont_look_inside
- def _get_fieldptr(self, space, w_obj, offset):
+ def _get_raw_address(self, space, w_obj, offset):
rawobject = get_rawobject(space, w_obj)
if rawobject:
fieldptr = lltype.direct_ptradd(rawobject, offset)
@@ -40,11 +38,6 @@
fieldptr = rffi.cast(rffi.CCHARP, offset)
return fieldptr
- def _get_address(self, space, w_obj, offset):
- fieldptr = self._get_fieldptr(space, w_obj, offset)
- address = rffi.cast(rffi.CCHARP, fieldptr)
- return address
-
def _is_abstract(self):
raise NotImplementedError(
"abstract base class" ) # more detailed part is not rpython: (actual: %s)" % type(self).__name__)
@@ -79,22 +72,22 @@
def from_memory(self, space, w_obj, offset):
# read access, so no copy needed
- address_value = self._get_address(space, w_obj, offset)
+ address_value = self._get_raw_address(space, w_obj, offset)
address = rffi.cast(rffi.UINT, address_value)
arr = space.interp_w(W_Array, unpack_simple_shape(space, space.wrap(self.typecode)))
return arr.fromaddress(space, address, self.size)
def to_memory(self, space, w_obj, w_value, offset):
# copy the full array (uses byte copy for now)
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
buf = space.interp_w(Buffer, w_value.getslotvalue(2))
for i in range(min(self.size*self.typesize, buf.getlength())):
address[i] = buf.getitem(i)
class PtrTypeConverter(ArrayTypeConverter):
- def _get_fieldptr(self, space, w_obj, offset):
- fieldptr = TypeConverter._get_fieldptr(self, space, w_obj, offset)
+ def _get_raw_address(self, space, w_obj, offset):
+ fieldptr = TypeConverter._get_raw_address(self, space, w_obj, offset)
ptrptr = rffi.cast(rffi.LONGP, fieldptr)
return ptrptr[0]
@@ -122,13 +115,13 @@
return rffi.cast(rffi.VOIDP, x)
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
if address[0] == '\x01':
return space.wrap(True)
return space.wrap(False)
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
arg = space.c_int_w(w_value)
if arg != False and arg != True:
raise OperationError(space.w_TypeError,
@@ -165,11 +158,11 @@
return rffi.cast(rffi.VOIDP, x)
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
return space.wrap(address[0])
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
address[0] = self._from_space(space, w_value)
class LongConverter(TypeConverter):
@@ -189,12 +182,12 @@
argchain.arg(self._unwrap_object(space, w_obj))
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
longptr = rffi.cast(rffi.LONGP, address)
return space.wrap(longptr[0])
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
longptr = rffi.cast(rffi.LONGP, address)
longptr[0] = space.c_int_w(w_value)
@@ -212,12 +205,12 @@
return rffi.cast(rffi.VOIDP, x)
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
ulongptr = rffi.cast(rffi.ULONGP, address)
return space.wrap(ulongptr[0])
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
ulongptr = rffi.cast(rffi.ULONGP, address)
ulongptr[0] = space.c_uint_w(w_value)
@@ -226,12 +219,12 @@
libffitype = libffi.types.sshort
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
shortptr = rffi.cast(rffi.SHORTP, address)
return space.wrap(shortptr[0])
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
shortptr = rffi.cast(rffi.SHORTP, address)
shortptr[0] = rffi.cast(rffi.SHORT, self._unwrap_object(space, w_value))
@@ -245,12 +238,12 @@
return rffi.cast(rffi.VOIDP, x)
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
floatptr = rffi.cast(rffi.FLOATP, address)
return space.wrap(float(floatptr[0]))
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
floatptr = rffi.cast(rffi.FLOATP, address)
floatptr[0] = r_singlefloat(space.float_w(w_value))
@@ -270,12 +263,12 @@
argchain.arg(self._unwrap_object(space, w_obj))
def from_memory(self, space, w_obj, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
doubleptr = rffi.cast(rffi.DOUBLEP, address)
return space.wrap(doubleptr[0])
def to_memory(self, space, w_obj, w_value, offset):
- address = self._get_address(space, w_obj, offset)
+ address = self._get_raw_address(space, w_obj, offset)
doubleptr = rffi.cast(rffi.DOUBLEP, address)
doubleptr[0] = space.float_w(w_value)
@@ -344,7 +337,7 @@
def convert_argument(self, space, w_obj):
from pypy.module.cppyy import interp_cppyy
w_cppinstance = space.findattr(w_obj, space.wrap("_cppinstance"))
- if w_cppinstance is not None:
+ if w_cppinstance:
w_obj = w_cppinstance
obj = space.interpclass_w(w_obj)
if isinstance(obj, interp_cppyy.W_CPPInstance):
More information about the pypy-commit
mailing list