blob: 41e88f8ae14aac06e4846b33c4a325d285506163 [file]
%module python_annotations_c
// Tests the C/C++ annotations that were automatically added by using -py3 before swig-4.1.0
// In swig-4.1.0 and later, the feature below is needed as the -py3 option was dropped
%feature("python:annotations", "c") mymethod;
%feature("python:annotations", "c") makeT<short>;
%feature("python:annotations", "c") global_ints;
%feature("python:annotations", "c") suppressed_none;
%feature("python:annotations", "c") suppressed_one;
%feature("python:annotations", "c") global_overloaded;
%feature("python:annotations", "c") global_overloaded_differ;
%inline %{
namespace Space {
template<class T>
struct Template {
void mymethod(int, Template* tt) {}
};
}
template<typename T>
Space::Template<T> makeT(int x) {
return Space::Template<T>();
}
int *global_ints(int &ri, Space::Template<short> t) { return &ri; }
int *global_overloaded(int &ri) { return &ri; }
int *global_overloaded() { return NULL; }
/* Overloads returning different types have no one C/C++ type to annotate them with. */
int global_overloaded_differ(int x) { return x; }
double global_overloaded_differ(double x, double y) { return x + y; }
int *no_annotations(int &ri, const char *c) { return NULL; }
%}
%template(TemplateShort) Space::Template<short>;
%template(MakeShort) makeT<short>;
/* An out typemap declaring numoutputs=0 leaves nothing to return, which is annotated the way a
void function is rather than with the suppressed C return type. */
%typemap(out, numoutputs=0) MyErr ""
%typemap(ret) MyErr %{
if ($1 != 0) {
PyErr_Format(PyExc_RuntimeError, "error code %d", (int)$1);
SWIG_fail;
}
%}
%typemap(in, numinputs=0) short *OutAppend (short temp) { $1 = &temp; }
%typemap(argout) short *OutAppend {
$result = SWIG_AppendOutput($result, PyLong_FromLong(*$1));
}
%inline %{
typedef int MyErr;
MyErr suppressed_none(int code) { return code; }
MyErr suppressed_one(int code, short *OutAppend) { *OutAppend = 42; return code; }
%}
%inline %{
#ifdef SWIGPYTHON_BUILTIN
int is_python_builtin() { return 1; }
#else
int is_python_builtin() { return 0; }
#endif
#if defined SWIGPYTHON_FASTPROXY
int is_python_fastproxy() { return 1; }
#else
int is_python_fastproxy() { return 0; }
#endif
%}