This is done in preparation for adding namespace support to the Ruby part of SWIG. Some existing test cases were reorganized or duplicated for flat/nonflat nesting. For some a Ruby test script was added. Finally the ruby/Makefile.in was improved so that for test cases without an explicit test script, the generated wrapper library will be loaded by the Ruby interpreter to ensure loading works fine.
94 lines
2.5 KiB
OpenEdge ABL
94 lines
2.5 KiB
OpenEdge ABL
%module(ruby_minherit="1") multiple_inheritance_interfaces
|
|
|
|
%warnfilter(SWIGWARN_D_MULTIPLE_INHERITANCE,
|
|
SWIGWARN_PHP_MULTIPLE_INHERITANCE); /* languages not supporting multiple inheritance */
|
|
|
|
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
|
%include "swiginterface.i"
|
|
%interface_custom("A", "IA", IA)
|
|
%interface_custom("B", "IB", IB)
|
|
%interface_custom("%(strip:[I])s", "I%s", IC) // same as %interface_custom("C", "IC", IC)
|
|
#endif
|
|
|
|
%inline %{
|
|
struct IA {
|
|
virtual void ia() {};
|
|
virtual void ia(const char *s, bool b = true) {}
|
|
virtual void ia(int i) {}
|
|
virtual ~IA() {}
|
|
};
|
|
struct IB { virtual ~IB() {} virtual void ib() {} };
|
|
struct IC : IA, IB {};
|
|
struct D : IC {};
|
|
struct E : D {};
|
|
%}
|
|
|
|
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
|
%interface_custom("J", "IJ", IJ)
|
|
%interface_custom("K", "IK", IK)
|
|
%interface_custom("L", "IL", IL)
|
|
#endif
|
|
%inline %{
|
|
struct IJ { virtual ~IJ() {}; virtual void ij() {} };
|
|
struct IK : IJ {};
|
|
struct IL : IK {};
|
|
struct M : IL {};
|
|
%}
|
|
|
|
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
|
%interface_custom("Q", "IQ", IQ)
|
|
#endif
|
|
%inline %{
|
|
struct P { virtual ~P() {} virtual void p() {} };
|
|
struct IQ { virtual ~IQ() {} virtual void iq() {} };
|
|
struct R : IQ, P {};
|
|
struct S : P, IQ {};
|
|
struct T : IQ {};
|
|
struct U : R {};
|
|
struct V : S {};
|
|
struct W : T {};
|
|
%}
|
|
|
|
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
|
%interface_impl(BaseOverloaded);
|
|
#endif
|
|
%inline %{
|
|
struct BaseOverloaded {
|
|
typedef P PTypedef;
|
|
virtual ~BaseOverloaded() {}
|
|
virtual void identical_overload(int i, const PTypedef &pp = PTypedef()) {}
|
|
};
|
|
|
|
struct DerivedOverloaded : public BaseOverloaded {
|
|
virtual void identical_overload(int i, const PTypedef &p = PTypedef()) {}
|
|
};
|
|
%}
|
|
|
|
|
|
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
|
%interface(Space::X)
|
|
#endif
|
|
|
|
// Test the csinterfacemodifiers and javainterfacemodifiers typemaps.
|
|
#if defined(SWIGCSHARP)
|
|
/* change access from default "public class" to "internal class" */
|
|
%typemap(csclassmodifiers) InternalAccess "internal class"
|
|
/* The following modifiers are also needed with the above access modifier change */
|
|
%typemap(csclassmodifiers) Space::X "internal class"
|
|
%typemap(csinterfacemodifiers) Space::X "internal interface"
|
|
#elif defined(SWIGJAVA)
|
|
%typemap(javaclassmodifiers) InternalAccess "final /*notpublic*/ class"
|
|
%typemap(javaclassmodifiers) Space::X "final class"
|
|
%typemap(javainterfacemodifiers) Space::X "/*notpublic*/ interface"
|
|
#endif
|
|
|
|
%inline %{
|
|
struct InternalAccess {};
|
|
namespace Space {
|
|
class X {
|
|
public:
|
|
virtual void x(const InternalAccess& date) const = 0;
|
|
virtual ~X() {}
|
|
};
|
|
}
|
|
%}
|