Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r54739:c606b30252d7 Date: 2012-04-24 11:48 -0700 http://bitbucket.org/pypy/pypy/changeset/c606b30252d7/
Log: translation fixes and extra test to catch them earlier next time diff --git a/pypy/module/cppyy/capi/__init__.py b/pypy/module/cppyy/capi/__init__.py --- a/pypy/module/cppyy/capi/__init__.py +++ b/pypy/module/cppyy/capi/__init__.py @@ -243,7 +243,7 @@ _c_base_offset = rffi.llexternal( "cppyy_base_offset", - [C_TYPE, C_TYPE, C_OBJECT, rffi.INT], rffi.LONG, + [C_TYPE, C_TYPE, C_OBJECT, rffi.INT], rffi.SIZE_T, threadsafe=threadsafe, compilation_info=backend.eci, elidable_function=True) diff --git a/pypy/module/cppyy/include/capi.h b/pypy/module/cppyy/include/capi.h --- a/pypy/module/cppyy/include/capi.h +++ b/pypy/module/cppyy/include/capi.h @@ -61,7 +61,7 @@ int cppyy_is_subtype(cppyy_type_t derived, cppyy_type_t base); /* calculate offsets between declared and actual type, up-cast: direction > 0; down-cast: direction < 0 */ - long cppyy_base_offset(cppyy_type_t derived, cppyy_type_t base, cppyy_object_t address, int direction); + size_t cppyy_base_offset(cppyy_type_t derived, cppyy_type_t base, cppyy_object_t address, int direction); /* method/function reflection information --------------------------------- */ int cppyy_num_methods(cppyy_scope_t scope); 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 @@ -449,7 +449,7 @@ for f in overload.functions: if 0 < f.signature().find(sig): return W_CPPOverload(self.space, self, [f]) - raise OperationError(space.w_TypeError, space.wrap("no overload matches signature")) + raise OperationError(self.space.w_TypeError, self.space.wrap("no overload matches signature")) def missing_attribute_error(self, name): return OperationError( @@ -616,6 +616,7 @@ get_datamember_names = interp2app(W_ComplexCPPClass.get_datamember_names, unwrap_spec=['self']), get_datamember = interp2app(W_ComplexCPPClass.get_datamember, unwrap_spec=['self', str]), is_namespace = interp2app(W_ComplexCPPClass.is_namespace, unwrap_spec=['self']), + dispatch = interp2app(W_CPPClass.dispatch, unwrap_spec=['self', str, str]), ) W_ComplexCPPClass.typedef.acceptable_as_base_class = False diff --git a/pypy/module/cppyy/src/cintcwrapper.cxx b/pypy/module/cppyy/src/cintcwrapper.cxx --- a/pypy/module/cppyy/src/cintcwrapper.cxx +++ b/pypy/module/cppyy/src/cintcwrapper.cxx @@ -467,7 +467,7 @@ return derived_type->GetBaseClass(base_type) != 0; } -long cppyy_base_offset(cppyy_type_t derived_handle, cppyy_type_t base_handle, +size_t cppyy_base_offset(cppyy_type_t derived_handle, cppyy_type_t base_handle, cppyy_object_t address, int /* direction */) { // WARNING: CINT can not handle actual dynamic casts! TClassRef derived_type = type_from_handle(derived_handle); @@ -494,7 +494,7 @@ } } - return offset; + return (size_t) offset; // may be negative (will roll over) } diff --git a/pypy/module/cppyy/src/reflexcwrapper.cxx b/pypy/module/cppyy/src/reflexcwrapper.cxx --- a/pypy/module/cppyy/src/reflexcwrapper.cxx +++ b/pypy/module/cppyy/src/reflexcwrapper.cxx @@ -277,7 +277,7 @@ return (int)derived_type.HasBase(base_type); } -long cppyy_base_offset(cppyy_type_t derived_handle, cppyy_type_t base_handle, +size_t cppyy_base_offset(cppyy_type_t derived_handle, cppyy_type_t base_handle, cppyy_object_t address, int direction) { Reflex::Type derived_type = type_from_handle(derived_handle); Reflex::Type base_type = type_from_handle(base_handle); @@ -303,8 +303,8 @@ if (ibase->first.ToType() == base_type) { long offset = (long)ibase->first.Offset((void*)address); if (direction < 0) - return -offset; - return offset; + return (size_t) -offset; // note negative; rolls over + return (size_t)offset; } } diff --git a/pypy/module/cppyy/test/test_overloads.py b/pypy/module/cppyy/test/test_overloads.py --- a/pypy/module/cppyy/test/test_overloads.py +++ b/pypy/module/cppyy/test/test_overloads.py @@ -59,6 +59,7 @@ c = c_overload() raises(TypeError, c.__dispatch__, 'get_int', 12) + raises(TypeError, c.__dispatch__, 'get_int', 'does_not_exist') assert c.__dispatch__('get_int', 'a_overload*')(a_overload()) == 42 assert c.__dispatch__('get_int', 'b_overload*')(b_overload()) == 13 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit