Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r44825:5b8ff90f865c Date: 2011-06-07 16:41 -0700 http://bitbucket.org/pypy/pypy/changeset/5b8ff90f865c/
Log: rpython fixes and refactoring 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 @@ -350,12 +350,12 @@ self.cpptype = cpptype def convert_argument(self, space, w_obj): - from pypy.module.cppyy import interp_cppyy + from pypy.module.cppyy.interp_cppyy import W_CPPInstance w_cppinstance = space.findattr(w_obj, space.wrap("_cppinstance")) if w_cppinstance: w_obj = w_cppinstance obj = space.interpclass_w(w_obj) - if isinstance(obj, interp_cppyy.W_CPPInstance): + if isinstance(obj, W_CPPInstance): if capi.c_is_subtype(obj.cppclass.handle, self.cpptype.handle): return obj.rawobject raise OperationError(space.w_TypeError, @@ -402,9 +402,12 @@ # 5) generalized cases (covers basically all user classes) cpptype = interp_cppyy.type_byname(space, clean_name) - if compound == "*": + + if cpptype and compound == "*": + # type check for the benefit of the annotator + from pypy.module.cppyy.interp_cppyy import W_CPPType + cpptype = space.interp_w(W_CPPType, cpptype, can_be_None=False) return InstancePtrConverter(space, cpptype) - # 6) void converter, which fails on use # diff --git a/pypy/module/cppyy/executor.py b/pypy/module/cppyy/executor.py --- a/pypy/module/cppyy/executor.py +++ b/pypy/module/cppyy/executor.py @@ -176,14 +176,12 @@ pass # 3) types/classes, either by ref/ptr or by value - try: - cpptype = interp_cppyy.type_byname(space, clean_name) - if compound == "*" or compound == "&": - return InstancePtrExecutor(space, clean_name, cpptype) - except OperationError, e: - if not e.match(space, space.w_TypeError): - raise - pass + cpptype = interp_cppyy.type_byname(space, clean_name) + if cpptype and (compound == "*" or compound == "&"): + # type check for the benefit of the annotator + from pypy.module.cppyy.interp_cppyy import W_CPPType + cpptype = space.interp_w(W_CPPType, cpptype, can_be_None=False) + return InstancePtrExecutor(space, clean_name, cpptype) # 4) additional special cases # ... none for now 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 @@ -46,7 +46,7 @@ cpptype._find_data_members() return cpptype - return space.w_None + return None type_byname.unwrap_spec = [ObjSpace, str] def template_byname(space, name): @@ -62,7 +62,7 @@ state.cpptype_cache[name] = template return template - return space.w_None + return None template_byname.unwrap_spec = [ObjSpace, str] @@ -272,9 +272,9 @@ _immutable_=True _immutable_fields_ = ["converter", "offset"] - def __init__(self, space, cpptype, offset): + def __init__(self, space, type_name, offset): self.space = space - self.converter = converter.get_converter(self.space, cpptype) + self.converter = converter.get_converter(self.space, type_name) self.offset = offset def is_static(self): @@ -401,9 +401,9 @@ num_data_members = capi.c_num_data_members(self.handle) for i in range(num_data_members): data_member_name = capi.charp2str_free(capi.c_data_member_name(self.handle, i)) - cpptype = capi.charp2str_free(capi.c_data_member_type(self.handle, i)) + type_name = capi.charp2str_free(capi.c_data_member_type(self.handle, i)) offset = capi.c_data_member_offset(self.handle, i) - data_member = W_CPPStaticDataMember(self.space, cpptype, offset) + data_member = W_CPPStaticDataMember(self.space, type_name, offset) self.data_members[data_member_name] = data_member def is_namespace(self): @@ -440,12 +440,12 @@ num_data_members = capi.c_num_data_members(self.handle) for i in range(num_data_members): data_member_name = capi.charp2str_free(capi.c_data_member_name(self.handle, i)) - cpptype = capi.charp2str_free(capi.c_data_member_type(self.handle, i)) + type_name = capi.charp2str_free(capi.c_data_member_type(self.handle, i)) offset = capi.c_data_member_offset(self.handle, i) if capi.c_is_staticdata(self.handle, i): - data_member = W_CPPStaticDataMember(self.space, cpptype, offset) + data_member = W_CPPStaticDataMember(self.space, type_name, offset) else: - data_member = W_CPPDataMember(self.space, cpptype, offset) + data_member = W_CPPDataMember(self.space, type_name, offset) self.data_members[data_member_name] = data_member def is_namespace(self): @@ -508,7 +508,6 @@ def invoke(self, overload, args_w): self._nullcheck() - cppclass = jit.hint(self.cppclass, promote=True) return overload.call(self.rawobject, args_w) def destruct(self): diff --git a/pypy/module/cppyy/pythonify.py b/pypy/module/cppyy/pythonify.py --- a/pypy/module/cppyy/pythonify.py +++ b/pypy/module/cppyy/pythonify.py @@ -9,9 +9,9 @@ class CppyyScopeMeta(type): def __getattr__(self, attr): try: - cppclass = get_cppitem(attr, self) - self.__dict__[attr] = cppclass - return cppclass + cppitem = get_cppitem(attr, self) + self.__dict__[attr] = cppitem + return cppitem except TypeError: raise AttributeError("%s object has no attribute '%s'" % (self, attr)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit