Ejemplo n.º 1
0
 def _get_offset(self, cppinstance):
     if cppinstance:
         assert lltype.typeOf(cppinstance.cppclass.handle) == lltype.typeOf(self.scope.handle)
         offset = self.offset + capi.c_base_offset(cppinstance.cppclass, self.scope, cppinstance.get_rawobject(), 1)
     else:
         offset = self.offset
     return offset
Ejemplo n.º 2
0
 def _unwrap_object(self, space, w_obj):
     from pypy.module.cppyy.interp_cppyy import W_CPPInstance
     if isinstance(w_obj, W_CPPInstance):
         if capi.c_is_subtype(space, w_obj.cppclass, self.cppclass):
             rawobject = w_obj.get_rawobject()
             offset = capi.c_base_offset(space, w_obj.cppclass, self.cppclass, rawobject, 1)
             obj_address = capi.direct_ptradd(rawobject, offset)
             return rffi.cast(capi.C_OBJECT, obj_address)
     raise oefmt(space.w_TypeError, "cannot pass %T as %s",
                 w_obj, self.cppclass.name)
Ejemplo n.º 3
0
 def _unwrap_object(self, space, w_obj):
     from pypy.module.cppyy.interp_cppyy import W_CPPInstance
     if isinstance(w_obj, W_CPPInstance):
         if capi.c_is_subtype(space, w_obj.cppclass, self.cppclass):
             rawobject = w_obj.get_rawobject()
             offset = capi.c_base_offset(space, w_obj.cppclass,
                                         self.cppclass, rawobject, 1)
             obj_address = capi.direct_ptradd(rawobject, offset)
             return rffi.cast(capi.C_OBJECT, obj_address)
     raise oefmt(space.w_TypeError, "cannot pass %T as %s", w_obj,
                 self.cppclass.name)
Ejemplo n.º 4
0
 def _unwrap_object(self, space, w_obj):
     from pypy.module.cppyy.interp_cppyy import W_CPPInstance
     obj = space.interpclass_w(w_obj)
     if isinstance(obj, W_CPPInstance):
         if capi.c_is_subtype(obj.cppclass, self.cppclass):
             rawobject = obj.get_rawobject()
             offset = capi.c_base_offset(obj.cppclass, self.cppclass, rawobject, 1)
             obj_address = capi.direct_ptradd(rawobject, offset)
             return rffi.cast(capi.C_OBJECT, obj_address)
     raise OperationError(space.w_TypeError,
                          space.wrap("cannot pass %s as %s" %
                          (space.type(w_obj).getname(space, "?"), self.cppclass.name)))
Ejemplo n.º 5
0
 def get_cppthis(self, cppinstance, calling_scope):
     assert self == cppinstance.cppclass
     offset = capi.c_base_offset(self, calling_scope, cppinstance.get_rawobject(), 1)
     return capi.direct_ptradd(cppinstance.get_rawobject(), offset)