| %module cpp11_final_class |
| |
| %warnfilter(SWIGWARN_PARSE_KEYWORD) final; // 'final' is a java keyword, renaming to '_final' |
| %warnfilter(SWIGWARN_PARSE_KEYWORD) override; // 'override' is a C# keyword, renaming to '_override' |
| |
| %ignore Space1::final::operator=; |
| #if defined(SWIGPHP) |
| %rename(Space1_final) Space1::final::final; |
| #endif |
| #if defined(SWIGOCAML) |
| %rename(finale) BrokenSpace::FinalEnum1::final; |
| #endif |
| |
| %inline %{ |
| struct FinalBase { |
| virtual ~FinalBase() {} |
| }; |
| |
| struct FinalClass1 final : FinalBase { |
| void method1() {} |
| }; |
| |
| class FinalClass2 final : public FinalBase { |
| public: |
| void method2() {} |
| }; |
| |
| struct FinalClass3 final { |
| void method3() {} |
| }; |
| |
| struct FinalClass4 { |
| void method4() {} |
| } final; |
| |
| struct override final { |
| void omethod() {} |
| }; |
| %} |
| |
| %rename(Space1_final) Space1::final; |
| |
| %inline %{ |
| namespace Space1 { |
| struct final final { |
| void finalmethod() {} |
| final() {} |
| final(const final &other) = default; |
| final& operator=(const final &other) = default; |
| }; |
| struct FinalClass5 final { |
| void method5() {} |
| final final_member_var; |
| final get_final_member() { return final_member_var; } |
| Space1::final get_final_member2() { return final_member_var; } |
| }; |
| struct FinalClass6 { |
| void method6() {} |
| virtual void final() final {} |
| virtual ~FinalClass6() = default; |
| }; |
| typedef final Space1_final_typedef1; |
| typedef struct final Space1_final_typedef2; |
| } |
| typedef Space1::final Space1_final_typedef3; |
| typedef struct Space1::final Space1_final_typedef4; |
| %} |
| |
| %inline %{ |
| namespace Space2 { |
| class Y { |
| public: |
| Y(int i=0) {} |
| }; |
| |
| struct FinalVar1 { |
| class Y notfinal; |
| // class Y final; // SWIG (C++ only) fails to parse (same for struct and union) |
| }; |
| struct FinalVar2 { |
| class Y notfinal = {}; |
| // class Y final = {}; // SWIG (C++ only) fails to parse (same for struct and union) |
| }; |
| struct FinalVar3 { |
| class Y notfinal = Y(); |
| // class Y final = Y(); // SWIG (C++ only) fails to parse (same for struct and union) |
| }; |
| struct FinalVar4 { |
| class Y* final; |
| FinalVar4() : final() {} |
| }; |
| struct FinalVar5 { |
| Y final; |
| }; |
| struct FinalVar6 { |
| Y final = {}; |
| }; |
| struct FinalVar7 { |
| Y final = Y(); |
| }; |
| struct FinalVar8 { |
| Y final{}; |
| }; |
| struct FinalVar9 { |
| Y final{9}; |
| }; |
| struct FinalVar10 { |
| void b10(Y final) {} |
| }; |
| } |
| %} |
| |
| // Unfortunately the use of final in BrokenSpace does not work with Visual C++ |
| // so we limit testing to parsing these by SWIG and then ignoring it all. |
| %ignore BrokenSpace::FinalVar11; |
| %ignore BrokenSpace::FinalEnum1; |
| %ignore BrokenSpace::FinalEnum2; |
| |
| namespace BrokenSpace { |
| using Space2::Y; |
| struct FinalVar11 { |
| void a11(class Y final) {} |
| }; |
| struct FinalEnum1 { |
| enum Enum1 { one, two, final }; |
| void enum_in(Enum1 e) {} |
| }; |
| struct FinalEnum2 { |
| enum Enum2 { one, two, three, four }; |
| enum Enum2 final; |
| }; |
| } |
| |
| %rename(Space3_final) Space3::final; |
| %inline %{ |
| namespace Space3 { |
| typedef struct final { |
| void fmethod() {} |
| } final; |
| } |
| %} |