mirror of https://github.com/swig/swig
134 lines
3.5 KiB
OpenEdge ABL
134 lines
3.5 KiB
OpenEdge ABL
// Tests %extend with default arguments as well as %extend with default arguments with overloading
|
|
|
|
%module extend_default
|
|
|
|
%warnfilter(SWIGWARN_PARSE_REDEFINED) Override::over;
|
|
%warnfilter(SWIGWARN_PARSE_REDEFINED) Override::overload;
|
|
%warnfilter(SWIGWARN_PARSE_REDEFINED) Override::ride;
|
|
|
|
// %extend before the class definition
|
|
%extend Before {
|
|
Before(int i = -1, double d = -1.0) {
|
|
Before *self = new Before();
|
|
self->i = i;
|
|
self->d = d;
|
|
return self;
|
|
}
|
|
static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; }
|
|
double AddedMethod(int i = -1, double d = -1.0) { return i+d; }
|
|
}
|
|
|
|
%inline %{
|
|
struct Before {
|
|
double d;
|
|
int i;
|
|
};
|
|
%}
|
|
|
|
// %extend after the class definition
|
|
%inline %{
|
|
struct After {
|
|
double d;
|
|
int i;
|
|
};
|
|
%}
|
|
|
|
%extend After {
|
|
After(int i = -1, double d = -1.0) {
|
|
After *self = new After();
|
|
self->i = i;
|
|
self->d = d;
|
|
return self;
|
|
}
|
|
static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; }
|
|
double AddedMethod(int i = -1, double d = -1.0) { return i+d; }
|
|
}
|
|
|
|
|
|
// %extend before the class definition - with overloading and default args
|
|
%extend OverBefore {
|
|
OverBefore(int i = -1, double d = -1.0) {
|
|
OverBefore *self = new OverBefore("boo");
|
|
self->i = i;
|
|
self->d = d;
|
|
return self;
|
|
}
|
|
static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; }
|
|
double AddedMethod(int i = -1, double d = -1.0) { return i+d; }
|
|
}
|
|
|
|
%inline %{
|
|
struct OverBefore {
|
|
OverBefore(const char *str, int ii = -2, double dd = -2.0) : d(dd), i(ii) { str=0; }
|
|
static double AddedStaticMethod(const char*, int ii = -1, double dd = -1) { return ii+dd; }
|
|
double AddedMethod(const char*, int ii = -1, double dd = -1.0) { return ii+dd; }
|
|
double d;
|
|
int i;
|
|
};
|
|
%}
|
|
|
|
// %extend after the class definition - with overloading and default args
|
|
%extend OverAfter {
|
|
OverAfter(int i = -1, double d = -1.0) {
|
|
OverAfter *self = new OverAfter("boo");
|
|
self->i = i;
|
|
self->d = d;
|
|
return self;
|
|
}
|
|
static double AddedStaticMethod(int i = -1, double d = -1) { return i+d; }
|
|
double AddedMethod(int i = -1, double d = -1.0) { return i+d; }
|
|
}
|
|
|
|
%inline %{
|
|
struct OverAfter {
|
|
OverAfter(const char *str, int ii = -2, double dd = -2.0) : d(dd), i(ii) { str=0; }
|
|
static double AddedStaticMethod(const char*, int ii = -1, double dd = -1) { return ii+dd; }
|
|
double AddedMethod(const char*, int ii = -1, double dd = -1.0) { return ii+dd; }
|
|
double d;
|
|
int i;
|
|
};
|
|
%}
|
|
|
|
|
|
// %extend overrides the class definition
|
|
%extend Override {
|
|
int over(int a) { return a*a; } // SWIG should give a warning then choose this one over the real one
|
|
int overload(int a) { return a*a; } // Similarly, but this one generated uncompilable code in SWIG-1.3.22
|
|
}
|
|
%inline %{
|
|
struct Override {
|
|
int over(int a = -1) { return a; }
|
|
int ride(int a = -1) { return a; }
|
|
int overload(int a) { return a; }
|
|
int overload() { return -10; }
|
|
};
|
|
%}
|
|
%extend Override {
|
|
int ride(int a) { return a+a; } // SWIG should give a warning then ignore this one
|
|
}
|
|
|
|
|
|
// %extend in class hierarchy
|
|
%extend Base {
|
|
virtual int * virtualmethod(int a = 0) { return 0; }
|
|
int * nonvirtual(int a = 0) { return 0; }
|
|
static int * static_method(int a = 0) { return 0; }
|
|
}
|
|
%extend Derived {
|
|
int * virtualmethod(int a = 0) { return 0; }
|
|
int * nonvirtual(int a = 0) { return 0; }
|
|
static int * static_method(int a = 0) { return 0; }
|
|
int * realvirtual(int a = 0) { return 0; }
|
|
}
|
|
|
|
|
|
%inline %{
|
|
struct Base {
|
|
virtual ~Base() {}
|
|
virtual int * realvirtual(int a = 0) { return 0; }
|
|
};
|
|
struct Derived : Base {
|
|
};
|
|
%}
|
|
|