Add support for const references to pointers
They're used in some unit tests and we can support them by handling them just as pointers in C++ wrappers (this was already the case for C wrappers).
This commit is contained in:
parent
3d0fe23e29
commit
1fd4c647b8
3 changed files with 11 additions and 4 deletions
|
|
@ -107,14 +107,11 @@ cpp11_default_delete.cpptest: SWIG_NOCXX = -nocxx # Assignment operator and r-va
|
||||||
cpp11_explicit_conversion_operators.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type.
|
cpp11_explicit_conversion_operators.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type.
|
||||||
cpp11_noexcept.cpptest: SWIG_NOCXX = -nocxx # Assignment operator.
|
cpp11_noexcept.cpptest: SWIG_NOCXX = -nocxx # Assignment operator.
|
||||||
default_constructor.cpptest: SWIG_NOCXX = -nocxx # Something weird with OSRSpatialReferenceShadow.
|
default_constructor.cpptest: SWIG_NOCXX = -nocxx # Something weird with OSRSpatialReferenceShadow.
|
||||||
director_classes.cpptest: SWIG_NOCXX = -nocxx # Ref to pointer
|
|
||||||
director_conversion_operators.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type.
|
director_conversion_operators.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type.
|
||||||
director_frob.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type.
|
director_frob.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type.
|
||||||
extend_template_method.cpptest: SWIG_NOCXX = -nocxx # Wrong form of template function name.
|
extend_template_method.cpptest: SWIG_NOCXX = -nocxx # Wrong form of template function name.
|
||||||
features.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type not handled specially.
|
features.cpptest: SWIG_NOCXX = -nocxx # Conversion operator return type not handled specially.
|
||||||
global_namespace.cpptest: SWIG_NOCXX = -nocxx # Const const reference type.
|
global_namespace.cpptest: SWIG_NOCXX = -nocxx # Const const reference type.
|
||||||
li_boost_shared_ptr_director.cpptest: SWIG_NOCXX = -nocxx # Ref to pointer
|
|
||||||
li_std_vector_ptr.cpptest: SWIG_NOCXX = -nocxx # Ref to pointer
|
|
||||||
member_template.cpptest: SWIG_NOCXX = -nocxx # Wrong form of template function name.
|
member_template.cpptest: SWIG_NOCXX = -nocxx # Wrong form of template function name.
|
||||||
multiple_inheritance_abstract.cpptest: SWIG_NOCXX = -nocxx # Multiple inheritance not supported.
|
multiple_inheritance_abstract.cpptest: SWIG_NOCXX = -nocxx # Multiple inheritance not supported.
|
||||||
multiple_inheritance_interfaces.cpptest: SWIG_NOCXX = -nocxx
|
multiple_inheritance_interfaces.cpptest: SWIG_NOCXX = -nocxx
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ same_macro_all_primitive_types_but_void(cref_as_value,ctype);
|
||||||
// objects
|
// objects
|
||||||
%typemap(ctype) SWIGTYPE "$&resolved_type*"
|
%typemap(ctype) SWIGTYPE "$&resolved_type*"
|
||||||
%typemap(ctype) SWIGTYPE * "$resolved_type*"
|
%typemap(ctype) SWIGTYPE * "$resolved_type*"
|
||||||
|
%typemap(ctype) SWIGTYPE * const & "$resolved_type*"
|
||||||
%typemap(ctype) SWIGTYPE & "$*resolved_type*"
|
%typemap(ctype) SWIGTYPE & "$*resolved_type*"
|
||||||
%typemap(ctype) SWIGTYPE [ANY] "$resolved_type*"
|
%typemap(ctype) SWIGTYPE [ANY] "$resolved_type*"
|
||||||
%typemap(ctype) SWIGTYPE * [ANY] "$resolved_type**"
|
%typemap(ctype) SWIGTYPE * [ANY] "$resolved_type**"
|
||||||
|
|
|
||||||
|
|
@ -719,7 +719,16 @@ private:
|
||||||
} else {
|
} else {
|
||||||
String* classname;
|
String* classname;
|
||||||
if (Node* const class_node = Language::instance()->classLookup(type)) {
|
if (Node* const class_node = Language::instance()->classLookup(type)) {
|
||||||
typestr = SwigType_str(resolved_type, 0);
|
// Special case: if this is a pointer passed by (const) reference, we return just the pointer directly because we don't have any pointer-valued variable
|
||||||
|
// to give out a reference to.
|
||||||
|
if (typeKind == Type_Ptr && strncmp(Char(resolved_type), "r.q(const).", 11) == 0) {
|
||||||
|
scoped_dohptr deref_type(Copy(resolved_type));
|
||||||
|
Delslice(deref_type, 0, 11);
|
||||||
|
typestr = SwigType_str(deref_type, 0);
|
||||||
|
} else {
|
||||||
|
typestr = SwigType_str(resolved_type, 0);
|
||||||
|
}
|
||||||
|
|
||||||
classname = Getattr(class_node, "sym:name");
|
classname = Getattr(class_node, "sym:name");
|
||||||
|
|
||||||
// We don't use namespaces, but the type may contain them, so get rid of them by replacing the base type name, which is fully qualified, with just the
|
// We don't use namespaces, but the type may contain them, so get rid of them by replacing the base type name, which is fully qualified, with just the
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue