[pypy-commit] pypy cppyy-packaging: minor performance improvement
wlav
pypy.commits at gmail.com
Tue Jul 10 02:27:28 EDT 2018
Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: cppyy-packaging
Changeset: r94842:d69a3855cc3a
Date: 2018-07-09 23:07 -0700
http://bitbucket.org/pypy/pypy/changeset/d69a3855cc3a/
Log: minor performance improvement
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
@@ -491,7 +491,7 @@
from pypy.module._cppyy.interp_cppyy import W_CPPInstance
if isinstance(w_obj, W_CPPInstance):
from pypy.module._cppyy.interp_cppyy import INSTANCE_FLAGS_IS_RVALUE
- if w_obj.flags & INSTANCE_FLAGS_IS_RVALUE:
+ if w_obj.rt_flags & INSTANCE_FLAGS_IS_RVALUE:
# reject moves as all are explicit
raise ValueError("lvalue expected")
if capi.c_is_subtype(space, w_obj.clsdecl, self.clsdecl):
@@ -523,14 +523,14 @@
from pypy.module._cppyy.interp_cppyy import W_CPPInstance, INSTANCE_FLAGS_IS_RVALUE
obj = space.interp_w(W_CPPInstance, w_obj)
if obj:
- if obj.flags & INSTANCE_FLAGS_IS_RVALUE:
- obj.flags &= ~INSTANCE_FLAGS_IS_RVALUE
+ if obj.rt_flags & INSTANCE_FLAGS_IS_RVALUE:
+ obj.rt_flags &= ~INSTANCE_FLAGS_IS_RVALUE
try:
return InstanceRefConverter._unwrap_object(self, space, w_obj)
except Exception:
# TODO: if the method fails on some other converter, then the next
# overload can not be an rvalue anymore
- obj.flags |= INSTANCE_FLAGS_IS_RVALUE
+ obj.rt_flags |= INSTANCE_FLAGS_IS_RVALUE
raise
raise oefmt(space.w_ValueError, "object is not an rvalue")
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
@@ -633,7 +633,7 @@
@unwrap_spec(args_w='args_w')
def call_args(self, args_w):
jit.promote(self)
- return self.call_impl(capi.C_NULL_OBJECT, args_w, 0)
+ return self.call_impl(capi.C_NULL_OBJECT, args_w)
def __repr__(self):
return "W_CPPStaticOverload(%s)" % [f.prototype() for f in self.functions]
@@ -699,7 +699,7 @@
if args_w:
# try to specialize the type match for the given object
cppinstance = self.space.interp_w(W_CPPInstance, args_w[i])
- if cppinstance.flags & INSTANCE_FLAGS_IS_RVALUE:
+ if cppinstance.rt_flags & INSTANCE_FLAGS_IS_RVALUE:
sugar = "&&"
elif cppinstance.flags & INSTANCE_FLAGS_IS_REF:
sugar = "*"
@@ -1340,9 +1340,9 @@
class W_CPPInstance(W_Root):
- _attrs_ = ['space', 'clsdecl', '_rawobject', 'smartdecl', 'deref', 'flags',
+ _attrs_ = ['space', 'clsdecl', '_rawobject', 'smartdecl', 'deref', 'flags', 'rt_flags',
'finalizer_registered']
- _immutable_fields_ = ['clsdecl', 'smartdecl', 'deref']
+ _immutable_fields_ = ['clsdecl', 'smartdecl', 'deref', 'flags']
finalizer_registered = False
@@ -1357,15 +1357,16 @@
self.flags = 0
if isref or (smartdecl and deref):
self.flags |= INSTANCE_FLAGS_IS_REF
+ self.rt_flags = 0
if python_owns:
- self.flags |= INSTANCE_FLAGS_PYTHON_OWNS
+ self.rt_flags |= INSTANCE_FLAGS_PYTHON_OWNS
self._opt_register_finalizer()
self.smartdecl = smartdecl
self.deref = deref
def _opt_register_finalizer(self):
if not self.finalizer_registered and not hasattr(self.space, "fake"):
- assert self.flags & INSTANCE_FLAGS_PYTHON_OWNS
+ assert self.rt_flags & INSTANCE_FLAGS_PYTHON_OWNS
self.register_finalizer(self.space)
self.finalizer_registered = True
@@ -1377,15 +1378,15 @@
# allow user to determine ownership rules on a per object level
def fget_python_owns(self, space):
- return space.newbool(bool(self.flags & INSTANCE_FLAGS_PYTHON_OWNS))
+ return space.newbool(bool(self.rt_flags & INSTANCE_FLAGS_PYTHON_OWNS))
@unwrap_spec(value=bool)
def fset_python_owns(self, space, value):
if space.is_true(value):
- self.flags |= INSTANCE_FLAGS_PYTHON_OWNS
+ self.rt_flags |= INSTANCE_FLAGS_PYTHON_OWNS
self._opt_register_finalizer()
else:
- self.flags &= ~INSTANCE_FLAGS_PYTHON_OWNS
+ self.rt_flags &= ~INSTANCE_FLAGS_PYTHON_OWNS
def get_cppthis(self, calling_scope):
return self.clsdecl.get_cppthis(self, calling_scope)
@@ -1505,7 +1506,7 @@
self._rawobject = capi.C_NULL_OBJECT
def _finalize_(self):
- if self.flags & INSTANCE_FLAGS_PYTHON_OWNS:
+ if self.rt_flags & INSTANCE_FLAGS_PYTHON_OWNS:
self.destruct()
W_CPPInstance.typedef = TypeDef(
@@ -1649,7 +1650,7 @@
"""Casts the given instance into an C++-style rvalue."""
obj = space.interp_w(W_CPPInstance, w_obj)
if obj:
- obj.flags |= INSTANCE_FLAGS_IS_RVALUE
+ obj.rt_flags |= INSTANCE_FLAGS_IS_RVALUE
return w_obj
More information about the pypy-commit
mailing list