[pypy-commit] pypy default: fixes to elidable; now warning free
wlav
noreply at buildbot.pypy.org
Wed Apr 23 21:50:47 CEST 2014
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch:
Changeset: r70892:a637c43f17fa
Date: 2014-04-23 12:45 -0700
http://bitbucket.org/pypy/pypy/changeset/a637c43f17fa/
Log: fixes to elidable; now warning free
diff --git a/pypy/module/cppyy/capi/loadable_capi.py b/pypy/module/cppyy/capi/loadable_capi.py
--- a/pypy/module/cppyy/capi/loadable_capi.py
+++ b/pypy/module/cppyy/capi/loadable_capi.py
@@ -216,11 +216,20 @@
'stdstring2stdstring' : ([c_object], c_object),
}
+ # size/offset are backend-specific but fixed after load
+ self.c_sizeof_farg = 0
+ self.c_offset_farg = 0
+
+
def load_reflection_library(space):
state = space.fromcache(State)
if state.library is None:
from pypy.module._cffi_backend.libraryobj import W_Library
state.library = W_Library(space, reflection_library, rdynload.RTLD_LOCAL | rdynload.RTLD_LAZY)
+ if state.library:
+ # fix constants
+ state.c_sizeof_farg = _cdata_to_size_t(space, call_capi(space, 'function_arg_sizeof', []))
+ state.c_offset_farg = _cdata_to_size_t(space, call_capi(space, 'function_arg_typeoffset', []))
return state.library
def verify_backend(space):
@@ -340,12 +349,12 @@
return _cdata_to_ptr(space, call_capi(space, 'allocate_function_args', [_Arg(l=size)]))
def c_deallocate_function_args(space, cargs):
call_capi(space, 'deallocate_function_args', [_Arg(vp=cargs)])
- at jit.elidable
def c_function_arg_sizeof(space):
- return _cdata_to_size_t(space, call_capi(space, 'function_arg_sizeof', []))
- at jit.elidable
+ state = space.fromcache(State)
+ return state.c_sizeof_farg
def c_function_arg_typeoffset(space):
- return _cdata_to_size_t(space, call_capi(space, 'function_arg_typeoffset', []))
+ state = space.fromcache(State)
+ return state.c_offset_farg
# scope reflection information -----------------------------------------------
def c_is_namespace(space, scope):
@@ -365,13 +374,12 @@
def c_base_name(space, cppclass, base_index):
args = [_Arg(l=cppclass.handle), _Arg(l=base_index)]
return charp2str_free(space, call_capi(space, 'base_name', args))
- at jit.elidable_promote('2')
def c_is_subtype(space, derived, base):
+ jit.promote(base)
if derived == base:
return bool(1)
return space.bool_w(call_capi(space, 'is_subtype', [_Arg(l=derived.handle), _Arg(l=base.handle)]))
- at jit.elidable_promote('1,2,4')
def _c_base_offset(space, derived_h, base_h, address, direction):
args = [_Arg(l=derived_h), _Arg(l=base_h), _Arg(l=address), _Arg(l=direction)]
return _cdata_to_size_t(space, call_capi(space, 'base_offset', args))
diff --git a/pypy/module/cppyy/interp_cppyy.py b/pypy/module/cppyy/interp_cppyy.py
--- a/pypy/module/cppyy/interp_cppyy.py
+++ b/pypy/module/cppyy/interp_cppyy.py
@@ -604,12 +604,10 @@
def get_returntype(self):
return self.space.wrap(self.converter.name)
- @jit.elidable_promote()
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(self.space,
- cppinstance.cppclass, self.scope, cppinstance.get_rawobject(), 1)
+ offset = self.offset + cppinstance.cppclass.get_base_offset(cppinstance, self.scope)
else:
offset = self.offset
return offset
@@ -739,7 +737,6 @@
self.datamembers[name] = new_dm
return new_dm
- @jit.elidable_promote()
def dispatch(self, name, signature):
overload = self.get_overload(name)
sig = '(%s)' % signature
@@ -908,6 +905,10 @@
def find_datamember(self, name):
raise self.missing_attribute_error(name)
+ def get_base_offset(self, cppinstance, calling_scope):
+ assert self == cppinstance.cppclass
+ return 0
+
def get_cppthis(self, cppinstance, calling_scope):
assert self == cppinstance.cppclass
return cppinstance.get_rawobject()
@@ -939,10 +940,15 @@
class W_ComplexCPPClass(W_CPPClass):
- def get_cppthis(self, cppinstance, calling_scope):
+ def get_base_offset(self, cppinstance, calling_scope):
assert self == cppinstance.cppclass
offset = capi.c_base_offset(self.space,
self, calling_scope, cppinstance.get_rawobject(), 1)
+ return offset
+
+ def get_cppthis(self, cppinstance, calling_scope):
+ assert self == cppinstance.cppclass
+ offset = self.get_base_offset(cppinstance, calling_scope)
return capi.direct_ptradd(cppinstance.get_rawobject(), offset)
W_ComplexCPPClass.typedef = TypeDef(
More information about the pypy-commit
mailing list