mirror of https://github.com/swig/swig
195 lines
5.2 KiB
OpenEdge ABL
195 lines
5.2 KiB
OpenEdge ABL
%module(docstring="hello.") autodoc
|
|
|
|
%warnfilter(SWIGWARN_PARSE_KEYWORD) inout;
|
|
|
|
%feature("autodoc");
|
|
|
|
// special typemap and its docs
|
|
%typemap(in) (int c, int d) "$1 = 0; $2 = 0;"
|
|
%typemap(doc,name="hello",type="Tuple") (int c, int d) "hello: int tuple[2]"
|
|
|
|
// testing for different documentation levels
|
|
%feature("autodoc","0") A::func0; // names
|
|
%feature("autodoc","1") A::func1; // names + types
|
|
%feature("autodoc","2") A::func2; // extended
|
|
%feature("autodoc","3") A::func3; // extended + types
|
|
|
|
%feature("autodoc","0") A::func0default; // names
|
|
%feature("autodoc","1") A::func1default; // names + types
|
|
%feature("autodoc","2") A::func2default; // extended
|
|
%feature("autodoc","3") A::func3default; // extended + types
|
|
|
|
%feature("autodoc","0") A::func0static; // names
|
|
%feature("autodoc","1") A::func1static; // names + types
|
|
%feature("autodoc","2") A::func2static; // extended
|
|
%feature("autodoc","3") A::func3static; // extended + types
|
|
|
|
%feature("autodoc","0") A::variable_a; // names
|
|
%feature("autodoc","1") A::variable_b; // names + types
|
|
%feature("autodoc","2") A::variable_c; // extended
|
|
%feature("autodoc","3") A::variable_d; // extended + types
|
|
|
|
%feature("autodoc","just a string.") A::funk; // names
|
|
|
|
%inline {
|
|
|
|
enum Hola {
|
|
hi, hello
|
|
};
|
|
|
|
struct A {
|
|
A(int a, short b, Hola h) {}
|
|
int funk(int a) { return a; }
|
|
|
|
int func0(short, int c, int d) { return c; }
|
|
int func1(short, int c, int d) { return c; }
|
|
int func2(short, int c, int d) { return c; }
|
|
int func3(short, int c, int d) { return c; }
|
|
|
|
int func0default(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
int func1default(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
int func2default(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
int func3default(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
|
|
static int func0static(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
static int func1static(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
static int func2static(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
static int func3static(A *e, short, int c, int d, double f = 2) { return 0; }
|
|
|
|
int variable_a;
|
|
int variable_b;
|
|
int variable_c;
|
|
int variable_d;
|
|
};
|
|
}
|
|
|
|
|
|
// deleting typemaps and docs
|
|
%typemap(in) (int c, int d) ;
|
|
%typemap(doc) (int c, int d);
|
|
|
|
// docs for some parameters
|
|
%typemap(doc) int a "a: special comment for parameter a"
|
|
%typemap(doc) int b "b: another special comment for parameter b"
|
|
|
|
%feature("autodoc","0") C::C(int a, int b, Hola h); // names
|
|
%feature("autodoc","1") D::D(int a, int b, Hola h); // names + types
|
|
%feature("autodoc","2") E::E(int a, int b, Hola h); // extended
|
|
%feature("autodoc","3") F::F(int a, int b, Hola h); // extended + types
|
|
%feature("autodoc","0") C::~C(); // names
|
|
%feature("autodoc","1") D::~D(); // names + types
|
|
%feature("autodoc","2") E::~E(); // extended
|
|
%feature("autodoc","3") F::~F(); // extended + types
|
|
|
|
%inline {
|
|
|
|
struct B {
|
|
B(int a, int b, Hola h) {}
|
|
int funk(int c, int d) { return c; }
|
|
};
|
|
|
|
struct C {
|
|
C(int a, int b, Hola h) {}
|
|
};
|
|
struct D {
|
|
D(int a, int b, Hola h) {}
|
|
};
|
|
struct E {
|
|
E(int a, int b, Hola h) {}
|
|
};
|
|
struct F {
|
|
F(int a, int b, Hola h) {}
|
|
};
|
|
|
|
int funk(A *e, short, int c, int d) { return c; }
|
|
int funkdefaults(A *e, short, int c, int d, double f = 2) { return c; }
|
|
}
|
|
|
|
%include <typemaps.i>
|
|
%inline %{
|
|
int func_input(int *INPUT) {
|
|
return 1;
|
|
}
|
|
int func_output(int *OUTPUT) {
|
|
*OUTPUT = 2;
|
|
return 1;
|
|
}
|
|
int func_inout(int *INOUT) {
|
|
*INOUT += 1;
|
|
return 1;
|
|
}
|
|
%}
|
|
|
|
%callback("%(uppercase)s_CALLBACK") func_cb;
|
|
|
|
%inline {
|
|
int func_cb(int c, int d) { return c; }
|
|
}
|
|
|
|
// Bug 3310528
|
|
%feature("autodoc","1") banana; // names + types
|
|
%inline %{
|
|
typedef struct tagS {
|
|
int a;
|
|
char b;
|
|
} S;
|
|
|
|
typedef int Integer;
|
|
|
|
void banana(S *a, const struct tagS *b, int c, Integer d) {}
|
|
%}
|
|
|
|
// Check docs for a template type
|
|
%inline %{
|
|
template<typename X> struct T {
|
|
T inout(T t) { return t; }
|
|
};
|
|
%}
|
|
%template(TInteger) T<int>;
|
|
|
|
%inline %{
|
|
#ifdef SWIGPYTHON_BUILTIN
|
|
bool is_python_builtin() { return true; }
|
|
#else
|
|
bool is_python_builtin() { return false; }
|
|
#endif
|
|
%}
|
|
|
|
// Autodoc language keywords
|
|
%feature(autodoc,1) process;
|
|
%feature(autodoc,1) process2;
|
|
%feature("compactdefaultargs") process;
|
|
%feature("compactdefaultargs") process2;
|
|
%inline %{
|
|
int process(int from, int in, int var) { return from; }
|
|
int process2(int from = 0, int _in = 1, int var = 2) { return from; }
|
|
%}
|
|
|
|
%feature(autodoc,1) process3;
|
|
%feature(autodoc,1) process4;
|
|
%feature("kwargs") process3;
|
|
%feature("kwargs") process4;
|
|
%inline %{
|
|
int process3(int from, int _in, int var) { return from; }
|
|
int process4(int from = 0, int _in = 1, int var = 2) { return from; }
|
|
%}
|
|
|
|
// Autodoc for methods with default arguments not directly representable in
|
|
// target language.
|
|
%feature(autodoc,0) process_complex_defval;
|
|
%feature("compactdefaultargs") process_complex_defval;
|
|
%inline %{
|
|
const int PROCESS_DEFAULT_VALUE = 17;
|
|
typedef long int some_type;
|
|
int process_complex_defval(int val = PROCESS_DEFAULT_VALUE, int factor = some_type(-1)) { return val*factor; }
|
|
%}
|
|
|
|
// Test for empty docstring, which should be ignored.
|
|
%feature("docstring") ""
|
|
|
|
%inline %{
|
|
struct a_structure{
|
|
char my_array[1];
|
|
};
|
|
%}
|