mirror of https://github.com/swig/swig
Fix %nspace and %nspacemove for nested classes and enums in a class
For example: %nspace Space::OuterClass80; namespace Space { struct OuterClass80 { struct InnerClass80 { struct BottomClass80 {}; }; enum InnerEnum80 { ie80a, ie80b }; }; } Previously the following were additionally required for some languages: %nspace Space::OuterClass80::InnerClass80; %nspace Space::OuterClass80::InnerClass80::Bottom80; Now the appropriate nspace setting is taken from the outer class. A new warning has also been introduced to check and correct conflicting nspace usage, for example if the following is additionally added: %nspacemove(AnotherSpace) Space::OuterClass80::InnerClass80; The following warning appears as an inner class can't be moved outside of the outer class: Warning 406: Ignoring nspace setting (AnotherSpace) for 'Space::OuterClass80::InnerClass80', Warning 406: as it conflicts with the nspace setting (Space) for outer class 'Space::OuterClass80'. This really helps with %nspacemove as now one can simply move an outer class to another namespace, like this: %nspacemove(AnotherSpace) Space::OuterClass80; and all the nested classes will automatically also be moved into the appropriate namespace.
This commit is contained in:
parent
5035473e9b
commit
59827e7191
|
@ -7,6 +7,38 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
|||
Version 4.3.0 (in progress)
|
||||
===========================
|
||||
|
||||
2024-05-26: wsfulton
|
||||
[C#, D, Java, Javascript, Lua] Fix %nspace and %nspacemove for nested
|
||||
classes and enums in a class. For example:
|
||||
|
||||
%nspace Space::OuterClass80;
|
||||
namespace Space {
|
||||
struct OuterClass80 {
|
||||
struct InnerClass80 {
|
||||
struct BottomClass80 {};
|
||||
};
|
||||
enum InnerEnum80 { ie80a, ie80b };
|
||||
};
|
||||
}
|
||||
|
||||
Previously the following were additionally required for some languages:
|
||||
|
||||
%nspace Space::OuterClass80::InnerClass80;
|
||||
%nspace Space::OuterClass80::InnerClass80::Bottom80;
|
||||
|
||||
Now the appropriate nspace setting is taken from the outer class.
|
||||
|
||||
A new warning has also been introduced to check and correct conflicting
|
||||
nspace usage, for example if the following is additionally added:
|
||||
|
||||
%nspacemove(AnotherSpace) Space::OuterClass80::InnerClass80;
|
||||
|
||||
The following warning appears as an inner class can't be moved outside
|
||||
of the outer class:
|
||||
|
||||
Warning 406: Ignoring nspace setting (AnotherSpace) for 'Space::OuterClass80::InnerClass80',
|
||||
Warning 406: as it conflicts with the nspace setting (Space) for outer class 'Space::OuterClass80'.
|
||||
|
||||
2024-05-26: wsfulton
|
||||
[C#, D, Java, Javascript, Lua] #2782 Enhance the nspace feature with
|
||||
%nspacemove for moving a class or enum into a differently named target
|
||||
|
|
|
@ -478,6 +478,7 @@ example.i(4) : Syntax error in input(1).
|
|||
<li>403. Class 'name' might be abstract.
|
||||
<li>404. Duplicate template instantiation of '<em>type</em>' with name '<em>name</em>' ignored, previous instantiation of '<em>type</em>' with name '<em>name</em>'.
|
||||
<li>405. Method with rvalue ref-qualifier <em>name</em> ignored.
|
||||
<li>406. Ignoring nspace setting (<em>setting</em>) for '<em>type</em>', as it conflicts with the nspace setting (<em>setting</em>) for outer class '<em>type</em>'
|
||||
<li>450. Reserved
|
||||
<li>451. Setting const char * variable may leak memory.
|
||||
<li>452. Reserved
|
||||
|
|
|
@ -335,9 +335,6 @@ CPP_TEST_CASES += \
|
|||
namespace_typemap \
|
||||
namespace_union \
|
||||
namespace_virtual_method \
|
||||
nspace \
|
||||
nspace_extend \
|
||||
nspacemove \
|
||||
native_directive \
|
||||
naturalvar \
|
||||
naturalvar_more \
|
||||
|
@ -353,6 +350,10 @@ CPP_TEST_CASES += \
|
|||
nested_workaround \
|
||||
newobject1 \
|
||||
newobject3 \
|
||||
nspace \
|
||||
nspace_extend \
|
||||
nspacemove \
|
||||
nspacemove_nested \
|
||||
null_pointer \
|
||||
numeric_bounds_checking \
|
||||
operator_overload \
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
|
||||
public class runme
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
// outer classes
|
||||
nspacemove_nestedNamespace.Space.OuterClass1 oc1 = new nspacemove_nestedNamespace.Space.OuterClass1();
|
||||
nspacemove_nestedNamespace.Space.OuterClass2 oc2 = new nspacemove_nestedNamespace.Space.OuterClass2();
|
||||
nspacemove_nestedNamespace.NewSpace3.OuterClass3 oc3 = new nspacemove_nestedNamespace.NewSpace3.OuterClass3();
|
||||
nspacemove_nestedNamespace.NewSpace4.OuterClass4 oc4 = new nspacemove_nestedNamespace.NewSpace4.OuterClass4();
|
||||
nspacemove_nestedNamespace.OuterClass5 oc5 = new nspacemove_nestedNamespace.OuterClass5();
|
||||
nspacemove_nestedNamespace.OuterClass6 oc6 = new nspacemove_nestedNamespace.OuterClass6();
|
||||
nspacemove_nestedNamespace.OuterClass7 oc7 = new nspacemove_nestedNamespace.OuterClass7();
|
||||
|
||||
nspacemove_nestedNamespace.Space.OuterClass10 oc10 = new nspacemove_nestedNamespace.Space.OuterClass10();
|
||||
nspacemove_nestedNamespace.Space.OuterClass20 oc20 = new nspacemove_nestedNamespace.Space.OuterClass20();
|
||||
nspacemove_nestedNamespace.NewOkay30.OuterClass30 oc30 = new nspacemove_nestedNamespace.NewOkay30.OuterClass30();
|
||||
nspacemove_nestedNamespace.NewOkay40.OuterClass40 oc40 = new nspacemove_nestedNamespace.NewOkay40.OuterClass40();
|
||||
nspacemove_nestedNamespace.NewOkay50.OuterClass50 oc50 = new nspacemove_nestedNamespace.NewOkay50.OuterClass50();
|
||||
nspacemove_nestedNamespace.OuterClass60 oc60 = new nspacemove_nestedNamespace.OuterClass60();
|
||||
nspacemove_nestedNamespace.OuterClass70 oc70 = new nspacemove_nestedNamespace.OuterClass70();
|
||||
nspacemove_nestedNamespace.Space.OuterClass80 oc80 = new nspacemove_nestedNamespace.Space.OuterClass80();
|
||||
|
||||
// inner classes
|
||||
nspacemove_nestedNamespace.Space.OuterClass1.InnerClass1 ic1 = new nspacemove_nestedNamespace.Space.OuterClass1.InnerClass1();
|
||||
nspacemove_nestedNamespace.Space.OuterClass2.InnerClass2 ic2 = new nspacemove_nestedNamespace.Space.OuterClass2.InnerClass2();
|
||||
nspacemove_nestedNamespace.NewSpace3.OuterClass3.InnerClass3 ic3 = new nspacemove_nestedNamespace.NewSpace3.OuterClass3.InnerClass3();
|
||||
nspacemove_nestedNamespace.NewSpace4.OuterClass4.InnerClass4 ic4 = new nspacemove_nestedNamespace.NewSpace4.OuterClass4.InnerClass4();
|
||||
nspacemove_nestedNamespace.OuterClass5.InnerClass5 ic5 = new nspacemove_nestedNamespace.OuterClass5.InnerClass5();
|
||||
nspacemove_nestedNamespace.OuterClass6.InnerClass6 ic6 = new nspacemove_nestedNamespace.OuterClass6.InnerClass6();
|
||||
nspacemove_nestedNamespace.OuterClass7.InnerClass7 ic7 = new nspacemove_nestedNamespace.OuterClass7.InnerClass7();
|
||||
|
||||
nspacemove_nestedNamespace.Space.OuterClass10.InnerClass10 ic10 = new nspacemove_nestedNamespace.Space.OuterClass10.InnerClass10();
|
||||
nspacemove_nestedNamespace.Space.OuterClass20.InnerClass20 ic20 = new nspacemove_nestedNamespace.Space.OuterClass20.InnerClass20();
|
||||
nspacemove_nestedNamespace.NewOkay30.OuterClass30.InnerClass30 ic30 = new nspacemove_nestedNamespace.NewOkay30.OuterClass30.InnerClass30();
|
||||
nspacemove_nestedNamespace.NewOkay40.OuterClass40.InnerClass40 ic40 = new nspacemove_nestedNamespace.NewOkay40.OuterClass40.InnerClass40();
|
||||
nspacemove_nestedNamespace.NewOkay50.OuterClass50.InnerClass50 ic50 = new nspacemove_nestedNamespace.NewOkay50.OuterClass50.InnerClass50();
|
||||
nspacemove_nestedNamespace.OuterClass60.InnerClass60 ic60 = new nspacemove_nestedNamespace.OuterClass60.InnerClass60();
|
||||
nspacemove_nestedNamespace.OuterClass70.InnerClass70 ic70 = new nspacemove_nestedNamespace.OuterClass70.InnerClass70();
|
||||
nspacemove_nestedNamespace.Space.OuterClass80.InnerClass80 ic80 = new nspacemove_nestedNamespace.Space.OuterClass80.InnerClass80();
|
||||
|
||||
// inner enums
|
||||
oc1.take(nspacemove_nestedNamespace.Space.OuterClass1.InnerEnum1.ie1a, ic1);
|
||||
oc2.take(nspacemove_nestedNamespace.Space.OuterClass2.InnerEnum2.ie2a, ic2);
|
||||
oc3.take(nspacemove_nestedNamespace.NewSpace3.OuterClass3.InnerEnum3.ie3a, ic3);
|
||||
oc4.take(nspacemove_nestedNamespace.NewSpace4.OuterClass4.InnerEnum4.ie4a, ic4);
|
||||
oc5.take(nspacemove_nestedNamespace.OuterClass5.InnerEnum5.ie5a, ic5);
|
||||
oc6.take(nspacemove_nestedNamespace.OuterClass6.InnerEnum6.ie6a, ic6);
|
||||
oc7.take(nspacemove_nestedNamespace.OuterClass7.InnerEnum7.ie7a, ic7);
|
||||
|
||||
oc10.take(nspacemove_nestedNamespace.Space.OuterClass10.InnerEnum10.ie10a, ic10);
|
||||
oc20.take(nspacemove_nestedNamespace.Space.OuterClass20.InnerEnum20.ie20a, ic20);
|
||||
oc30.take(nspacemove_nestedNamespace.NewOkay30.OuterClass30.InnerEnum30.ie30a, ic30);
|
||||
oc40.take(nspacemove_nestedNamespace.NewOkay40.OuterClass40.InnerEnum40.ie40a, ic40);
|
||||
oc50.take(nspacemove_nestedNamespace.NewOkay50.OuterClass50.InnerEnum50.ie50a, ic50);
|
||||
oc60.take(nspacemove_nestedNamespace.OuterClass60.InnerEnum60.ie60a, ic60);
|
||||
oc70.take(nspacemove_nestedNamespace.OuterClass70.InnerEnum70.ie70a, ic70);
|
||||
oc80.take(nspacemove_nestedNamespace.Space.OuterClass80.InnerEnum80.ie80a, ic80);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
module nspacemove_nested_runme;
|
||||
|
||||
import std.exception;
|
||||
import nspacemove_nested.nspacemove_nested;
|
||||
static import nspacemove_nested.Space.OuterClass1;
|
||||
static import nspacemove_nested.Space.OuterClass2;
|
||||
static import nspacemove_nested.NewSpace3.OuterClass3;
|
||||
static import nspacemove_nested.NewSpace4.OuterClass4;
|
||||
static import nspacemove_nested.OuterClass5;
|
||||
static import nspacemove_nested.OuterClass6;
|
||||
static import nspacemove_nested.OuterClass7;
|
||||
static import nspacemove_nested.Space.OuterClass10;
|
||||
static import nspacemove_nested.Space.OuterClass20;
|
||||
static import nspacemove_nested.NewOkay30.OuterClass30;
|
||||
static import nspacemove_nested.NewOkay40.OuterClass40;
|
||||
static import nspacemove_nested.NewOkay50.OuterClass50;
|
||||
static import nspacemove_nested.OuterClass60;
|
||||
static import nspacemove_nested.OuterClass70;
|
||||
static import nspacemove_nested.Space.OuterClass80;
|
||||
|
||||
void main() {
|
||||
// outer classes
|
||||
auto oc1 = new nspacemove_nested.Space.OuterClass1.OuterClass1();
|
||||
auto oc2 = new nspacemove_nested.Space.OuterClass2.OuterClass2();
|
||||
auto oc3 = new nspacemove_nested.NewSpace3.OuterClass3.OuterClass3();
|
||||
auto oc4 = new nspacemove_nested.NewSpace4.OuterClass4.OuterClass4();
|
||||
auto oc5 = new nspacemove_nested.OuterClass5.OuterClass5();
|
||||
auto oc6 = new nspacemove_nested.OuterClass6.OuterClass6();
|
||||
auto oc7 = new nspacemove_nested.OuterClass7.OuterClass7();
|
||||
|
||||
auto oc10 = new nspacemove_nested.Space.OuterClass10.OuterClass10();
|
||||
auto oc20 = new nspacemove_nested.Space.OuterClass20.OuterClass20();
|
||||
auto oc30 = new nspacemove_nested.NewOkay30.OuterClass30.OuterClass30();
|
||||
auto oc40 = new nspacemove_nested.NewOkay40.OuterClass40.OuterClass40();
|
||||
auto oc50 = new nspacemove_nested.NewOkay50.OuterClass50.OuterClass50();
|
||||
auto oc60 = new nspacemove_nested.OuterClass60.OuterClass60();
|
||||
auto oc70 = new nspacemove_nested.OuterClass70.OuterClass70();
|
||||
auto oc80 = new nspacemove_nested.Space.OuterClass80.OuterClass80();
|
||||
|
||||
// inner classes
|
||||
auto ic1 = new nspacemove_nested.Space.InnerClass1.InnerClass1();
|
||||
auto ic2 = new nspacemove_nested.Space.InnerClass2.InnerClass2();
|
||||
auto ic3 = new nspacemove_nested.NewSpace3.InnerClass3.InnerClass3();
|
||||
auto ic4 = new nspacemove_nested.NewSpace4.InnerClass4.InnerClass4();
|
||||
auto ic5 = new nspacemove_nested.InnerClass5.InnerClass5();
|
||||
auto ic6 = new nspacemove_nested.InnerClass6.InnerClass6();
|
||||
auto ic7 = new nspacemove_nested.InnerClass7.InnerClass7();
|
||||
|
||||
auto ic10 = new nspacemove_nested.Space.InnerClass10.InnerClass10();
|
||||
auto ic20 = new nspacemove_nested.Space.InnerClass20.InnerClass20();
|
||||
auto ic30 = new nspacemove_nested.NewOkay30.InnerClass30.InnerClass30();
|
||||
auto ic40 = new nspacemove_nested.NewOkay40.InnerClass40.InnerClass40();
|
||||
auto ic50 = new nspacemove_nested.NewOkay50.InnerClass50.InnerClass50();
|
||||
auto ic60 = new nspacemove_nested.InnerClass60.InnerClass60();
|
||||
auto ic70 = new nspacemove_nested.InnerClass70.InnerClass70();
|
||||
auto ic80 = new nspacemove_nested.Space.InnerClass80.InnerClass80();
|
||||
|
||||
// inner enums
|
||||
oc1.take(nspacemove_nested.Space.OuterClass1.OuterClass1.InnerEnum1.ie1a, ic1);
|
||||
oc2.take(nspacemove_nested.Space.OuterClass2.OuterClass2.InnerEnum2.ie2a, ic2);
|
||||
oc3.take(nspacemove_nested.NewSpace3.OuterClass3.OuterClass3.InnerEnum3.ie3a, ic3);
|
||||
oc4.take(nspacemove_nested.NewSpace4.OuterClass4.OuterClass4.InnerEnum4.ie4a, ic4);
|
||||
oc5.take(nspacemove_nested.OuterClass5.OuterClass5.InnerEnum5.ie5a, ic5);
|
||||
oc6.take(nspacemove_nested.OuterClass6.OuterClass6.InnerEnum6.ie6a, ic6);
|
||||
oc7.take(nspacemove_nested.OuterClass7.OuterClass7.InnerEnum7.ie7a, ic7);
|
||||
|
||||
oc10.take(nspacemove_nested.Space.OuterClass10.OuterClass10.InnerEnum10.ie10a, ic10);
|
||||
oc20.take(nspacemove_nested.Space.OuterClass20.OuterClass20.InnerEnum20.ie20a, ic20);
|
||||
oc30.take(nspacemove_nested.NewOkay30.OuterClass30.OuterClass30.InnerEnum30.ie30a, ic30);
|
||||
oc40.take(nspacemove_nested.NewOkay40.OuterClass40.OuterClass40.InnerEnum40.ie40a, ic40);
|
||||
oc50.take(nspacemove_nested.NewOkay50.OuterClass50.OuterClass50.InnerEnum50.ie50a, ic50);
|
||||
oc60.take(nspacemove_nested.OuterClass60.OuterClass60.InnerEnum60.ie60a, ic60);
|
||||
oc70.take(nspacemove_nested.OuterClass70.OuterClass70.InnerEnum70.ie70a, ic70);
|
||||
oc80.take(nspacemove_nested.Space.OuterClass80.OuterClass80.InnerEnum80.ie80a, ic80);
|
||||
}
|
|
@ -0,0 +1,166 @@
|
|||
%module xxx
|
||||
|
||||
// Test nspace warnings (based on Examples/test-suite/nspacemove_nested.i)
|
||||
|
||||
%feature("flatnested"); // must have in order to see nspace warnings when using Python as nested classes are otherwise simply ignored in Python
|
||||
|
||||
%nspace Space::OuterClass1;
|
||||
%nspacemove(BadSpace1) Space::OuterClass1::InnerClass1;
|
||||
%nspacemove(BadSpace1) Space::OuterClass1::InnerEnum1;
|
||||
|
||||
%nspace Space::OuterClass2;
|
||||
%nonspace Space::OuterClass2::InnerClass2;
|
||||
%nonspace Space::OuterClass2::InnerEnum2;
|
||||
|
||||
%nspacemove(NewSpace3) Space::OuterClass3;
|
||||
%nspacemove(BadSpace3) Space::OuterClass3::InnerClass3;
|
||||
%nspacemove(BadSpace3) Space::OuterClass3::InnerEnum3;
|
||||
|
||||
%nspacemove(NewSpace4) Space::OuterClass4;
|
||||
%nonspace Space::OuterClass4::InnerClass4;
|
||||
%nonspace Space::OuterClass4::InnerEnum4;
|
||||
|
||||
%nspacemove(NewSpace5) Space::OuterClass5::InnerClass5;
|
||||
%nspacemove(NewSpace5) Space::OuterClass5::InnerEnum5;
|
||||
|
||||
%nonspace Space::OuterClass6;
|
||||
%nspace Space::OuterClass6::InnerClass6;
|
||||
%nspace Space::OuterClass6::InnerEnum6;
|
||||
|
||||
%nonspace Space::OuterClass7;
|
||||
%nspacemove(NewSpace7) Space::OuterClass7::InnerClass7;
|
||||
%nspacemove(NewSpace7) Space::OuterClass7::InnerEnum7;
|
||||
|
||||
%inline %{
|
||||
namespace Space {
|
||||
struct OuterClass1 {
|
||||
struct InnerClass1 {
|
||||
struct BottomClass1 {};
|
||||
};
|
||||
enum InnerEnum1 { ie1a, ie1b };
|
||||
void take(InnerEnum1 e) {}
|
||||
};
|
||||
struct OuterClass2 {
|
||||
struct InnerClass2 {
|
||||
struct BottomClass2 {};
|
||||
};
|
||||
enum InnerEnum2 { ie2a, ie2b };
|
||||
void take(InnerEnum2 e) {}
|
||||
};
|
||||
struct OuterClass3 {
|
||||
struct InnerClass3 {
|
||||
struct BottomClass3 {};
|
||||
};
|
||||
enum InnerEnum3 { ie3a, ie3b };
|
||||
void take(InnerEnum3 e) {}
|
||||
};
|
||||
struct OuterClass4 {
|
||||
struct InnerClass4 {
|
||||
struct BottomClass4 {};
|
||||
};
|
||||
enum InnerEnum4 { ie4a, ie4b };
|
||||
void take(InnerEnum4 e) {}
|
||||
};
|
||||
struct OuterClass5 {
|
||||
struct InnerClass5 {
|
||||
struct BottomClass5 {};
|
||||
};
|
||||
enum InnerEnum5 { ie5a, ie5b };
|
||||
void take(InnerEnum5 e) {}
|
||||
};
|
||||
struct OuterClass6 {
|
||||
struct InnerClass6 {
|
||||
struct BottomClass6 {};
|
||||
};
|
||||
enum InnerEnum6 { ie6a, ie6b };
|
||||
void take(InnerEnum6 e) {}
|
||||
};
|
||||
struct OuterClass7 {
|
||||
struct InnerClass7 {
|
||||
struct BottomClass7 {};
|
||||
};
|
||||
enum InnerEnum7 { ie7a, ie7b };
|
||||
void take(InnerEnum7 e) {}
|
||||
};
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
// These should not warn
|
||||
%nspace Space::OuterClass10;
|
||||
%nspace Space::OuterClass10::InnerClass10;
|
||||
%nspace Space::OuterClass10::InnerEnum10;
|
||||
|
||||
%nspace Space::OuterClass20;
|
||||
%clearnspace Space::OuterClass20::InnerClass20;
|
||||
%clearnspace Space::OuterClass20::InnerEnum20;
|
||||
|
||||
%nspacemove(NewOkay30) Space::OuterClass30;
|
||||
%nspace Space::OuterClass30::InnerClass30;
|
||||
%nspace Space::OuterClass30::InnerEnum40;
|
||||
|
||||
%nspacemove(NewOkay40) Space::OuterClass40;
|
||||
%clearnspace Space::OuterClass40::InnerClass40;
|
||||
%clearnspace Space::OuterClass40::InnerEnum40;
|
||||
|
||||
%nspacemove(NewOkay50) Space::OuterClass50;
|
||||
|
||||
%nonspace Space::OuterClass60;
|
||||
%nonspace Space::OuterClass60::InnerClass60;
|
||||
%nonspace Space::OuterClass60::InnerEnum60;
|
||||
|
||||
%nonspace Space::OuterClass70;
|
||||
|
||||
%inline %{
|
||||
namespace Space {
|
||||
struct OuterClass10 {
|
||||
struct InnerClass10 {
|
||||
struct BottomClass10 {};
|
||||
};
|
||||
enum InnerEnum10 { ie10a, ie10b };
|
||||
void take(InnerEnum10 e) {}
|
||||
};
|
||||
struct OuterClass20 {
|
||||
struct InnerClass20 {
|
||||
struct BottomClass20 {};
|
||||
};
|
||||
enum InnerEnum20 { ie20a, ie20b };
|
||||
void take(InnerEnum20 e) {}
|
||||
};
|
||||
struct OuterClass30 {
|
||||
struct InnerClass30 {
|
||||
struct BottomClass30 {};
|
||||
};
|
||||
enum InnerEnum30 { ie30a, ie30b };
|
||||
void take(InnerEnum30 e) {}
|
||||
};
|
||||
struct OuterClass40 {
|
||||
struct InnerClass40 {
|
||||
struct BottomClass40 {};
|
||||
};
|
||||
enum InnerEnum40 { ie40a, ie40b };
|
||||
void take(InnerEnum40 e) {}
|
||||
};
|
||||
struct OuterClass50 {
|
||||
struct InnerClass50 {
|
||||
struct BottomClass50 {};
|
||||
};
|
||||
enum InnerEnum50 { ie50a, ie50b };
|
||||
void take(InnerEnum50 e) {}
|
||||
};
|
||||
struct OuterClass60 {
|
||||
struct InnerClass60 {
|
||||
struct BottomClass60 {};
|
||||
};
|
||||
enum InnerEnum60 { ie60a, ie60b };
|
||||
void take(InnerEnum60 e) {}
|
||||
};
|
||||
struct OuterClass70 {
|
||||
struct InnerClass70 {
|
||||
struct BottomClass70 {};
|
||||
};
|
||||
enum InnerEnum70 { ie70a, ie70b };
|
||||
void take(InnerEnum70 e) {}
|
||||
};
|
||||
}
|
||||
%}
|
|
@ -0,0 +1,28 @@
|
|||
cpp_nspacemove.i:37: Warning 406: Ignoring nspace setting (BadSpace1) for 'Space::OuterClass1::InnerClass1',
|
||||
cpp_nspacemove.i:36: Warning 406: as it conflicts with the nspace setting (Space) for outer class 'Space::OuterClass1'.
|
||||
cpp_nspacemove.i:40: Warning 406: Ignoring nspace setting (BadSpace1) for 'Space::OuterClass1::InnerEnum1',
|
||||
cpp_nspacemove.i:36: Warning 406: as it conflicts with the nspace setting (Space) for outer class 'Space::OuterClass1'.
|
||||
cpp_nspacemove.i:44: Warning 406: Ignoring nspace setting (0) for 'Space::OuterClass2::InnerClass2',
|
||||
cpp_nspacemove.i:43: Warning 406: as it conflicts with the nspace setting (Space) for outer class 'Space::OuterClass2'.
|
||||
cpp_nspacemove.i:47: Warning 406: Ignoring nspace setting (0) for 'Space::OuterClass2::InnerEnum2',
|
||||
cpp_nspacemove.i:43: Warning 406: as it conflicts with the nspace setting (Space) for outer class 'Space::OuterClass2'.
|
||||
cpp_nspacemove.i:51: Warning 406: Ignoring nspace setting (BadSpace3) for 'Space::OuterClass3::InnerClass3',
|
||||
cpp_nspacemove.i:50: Warning 406: as it conflicts with the nspace setting (NewSpace3) for outer class 'Space::OuterClass3'.
|
||||
cpp_nspacemove.i:54: Warning 406: Ignoring nspace setting (BadSpace3) for 'Space::OuterClass3::InnerEnum3',
|
||||
cpp_nspacemove.i:50: Warning 406: as it conflicts with the nspace setting (NewSpace3) for outer class 'Space::OuterClass3'.
|
||||
cpp_nspacemove.i:58: Warning 406: Ignoring nspace setting (0) for 'Space::OuterClass4::InnerClass4',
|
||||
cpp_nspacemove.i:57: Warning 406: as it conflicts with the nspace setting (NewSpace4) for outer class 'Space::OuterClass4'.
|
||||
cpp_nspacemove.i:61: Warning 406: Ignoring nspace setting (0) for 'Space::OuterClass4::InnerEnum4',
|
||||
cpp_nspacemove.i:57: Warning 406: as it conflicts with the nspace setting (NewSpace4) for outer class 'Space::OuterClass4'.
|
||||
cpp_nspacemove.i:65: Warning 406: Ignoring nspace setting (NewSpace5) for 'Space::OuterClass5::InnerClass5',
|
||||
cpp_nspacemove.i:64: Warning 406: as it conflicts with the nspace setting () for outer class 'Space::OuterClass5'.
|
||||
cpp_nspacemove.i:68: Warning 406: Ignoring nspace setting (NewSpace5) for 'Space::OuterClass5::InnerEnum5',
|
||||
cpp_nspacemove.i:64: Warning 406: as it conflicts with the nspace setting () for outer class 'Space::OuterClass5'.
|
||||
cpp_nspacemove.i:72: Warning 406: Ignoring nspace setting (1) for 'Space::OuterClass6::InnerClass6',
|
||||
cpp_nspacemove.i:71: Warning 406: as it conflicts with the nspace setting () for outer class 'Space::OuterClass6'.
|
||||
cpp_nspacemove.i:75: Warning 406: Ignoring nspace setting (1) for 'Space::OuterClass6::InnerEnum6',
|
||||
cpp_nspacemove.i:71: Warning 406: as it conflicts with the nspace setting () for outer class 'Space::OuterClass6'.
|
||||
cpp_nspacemove.i:79: Warning 406: Ignoring nspace setting (NewSpace7) for 'Space::OuterClass7::InnerClass7',
|
||||
cpp_nspacemove.i:78: Warning 406: as it conflicts with the nspace setting () for outer class 'Space::OuterClass7'.
|
||||
cpp_nspacemove.i:82: Warning 406: Ignoring nspace setting (NewSpace7) for 'Space::OuterClass7::InnerEnum7',
|
||||
cpp_nspacemove.i:78: Warning 406: as it conflicts with the nspace setting () for outer class 'Space::OuterClass7'.
|
|
@ -86,8 +86,9 @@ java_director_exception_feature_nspace.%: JAVA_PACKAGE = $*Package
|
|||
java_nspacewithoutpackage.%: JAVA_PACKAGEOPT =
|
||||
multiple_inheritance_nspace.%: JAVA_PACKAGE = $*Package
|
||||
nspace.%: JAVA_PACKAGE = $*Package
|
||||
nspacemove.%: JAVA_PACKAGE = $*Package
|
||||
nspace_extend.%: JAVA_PACKAGE = $*Package
|
||||
nspacemove.%: JAVA_PACKAGE = $*Package
|
||||
nspacemove_nested.%: JAVA_PACKAGE = $*Package
|
||||
|
||||
# Rules for the different types of tests
|
||||
%.cpptest:
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
public class nspacemove_nested_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("nspacemove_nested");
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String argv[]) {
|
||||
// outer classes
|
||||
nspacemove_nestedPackage.Space.OuterClass1 oc1 = new nspacemove_nestedPackage.Space.OuterClass1();
|
||||
nspacemove_nestedPackage.Space.OuterClass2 oc2 = new nspacemove_nestedPackage.Space.OuterClass2();
|
||||
nspacemove_nestedPackage.NewSpace3.OuterClass3 oc3 = new nspacemove_nestedPackage.NewSpace3.OuterClass3();
|
||||
nspacemove_nestedPackage.NewSpace4.OuterClass4 oc4 = new nspacemove_nestedPackage.NewSpace4.OuterClass4();
|
||||
nspacemove_nestedPackage.OuterClass5 oc5 = new nspacemove_nestedPackage.OuterClass5();
|
||||
nspacemove_nestedPackage.OuterClass6 oc6 = new nspacemove_nestedPackage.OuterClass6();
|
||||
nspacemove_nestedPackage.OuterClass7 oc7 = new nspacemove_nestedPackage.OuterClass7();
|
||||
|
||||
nspacemove_nestedPackage.Space.OuterClass10 oc10 = new nspacemove_nestedPackage.Space.OuterClass10();
|
||||
nspacemove_nestedPackage.Space.OuterClass20 oc20 = new nspacemove_nestedPackage.Space.OuterClass20();
|
||||
nspacemove_nestedPackage.NewOkay30.OuterClass30 oc30 = new nspacemove_nestedPackage.NewOkay30.OuterClass30();
|
||||
nspacemove_nestedPackage.NewOkay40.OuterClass40 oc40 = new nspacemove_nestedPackage.NewOkay40.OuterClass40();
|
||||
nspacemove_nestedPackage.NewOkay50.OuterClass50 oc50 = new nspacemove_nestedPackage.NewOkay50.OuterClass50();
|
||||
nspacemove_nestedPackage.OuterClass60 oc60 = new nspacemove_nestedPackage.OuterClass60();
|
||||
nspacemove_nestedPackage.OuterClass70 oc70 = new nspacemove_nestedPackage.OuterClass70();
|
||||
nspacemove_nestedPackage.Space.OuterClass80 oc80 = new nspacemove_nestedPackage.Space.OuterClass80();
|
||||
|
||||
// inner classes
|
||||
nspacemove_nestedPackage.Space.OuterClass1.InnerClass1 ic1 = new nspacemove_nestedPackage.Space.OuterClass1.InnerClass1();
|
||||
nspacemove_nestedPackage.Space.OuterClass2.InnerClass2 ic2 = new nspacemove_nestedPackage.Space.OuterClass2.InnerClass2();
|
||||
nspacemove_nestedPackage.NewSpace3.OuterClass3.InnerClass3 ic3 = new nspacemove_nestedPackage.NewSpace3.OuterClass3.InnerClass3();
|
||||
nspacemove_nestedPackage.NewSpace4.OuterClass4.InnerClass4 ic4 = new nspacemove_nestedPackage.NewSpace4.OuterClass4.InnerClass4();
|
||||
nspacemove_nestedPackage.OuterClass5.InnerClass5 ic5 = new nspacemove_nestedPackage.OuterClass5.InnerClass5();
|
||||
nspacemove_nestedPackage.OuterClass6.InnerClass6 ic6 = new nspacemove_nestedPackage.OuterClass6.InnerClass6();
|
||||
nspacemove_nestedPackage.OuterClass7.InnerClass7 ic7 = new nspacemove_nestedPackage.OuterClass7.InnerClass7();
|
||||
|
||||
nspacemove_nestedPackage.Space.OuterClass10.InnerClass10 ic10 = new nspacemove_nestedPackage.Space.OuterClass10.InnerClass10();
|
||||
nspacemove_nestedPackage.Space.OuterClass20.InnerClass20 ic20 = new nspacemove_nestedPackage.Space.OuterClass20.InnerClass20();
|
||||
nspacemove_nestedPackage.NewOkay30.OuterClass30.InnerClass30 ic30 = new nspacemove_nestedPackage.NewOkay30.OuterClass30.InnerClass30();
|
||||
nspacemove_nestedPackage.NewOkay40.OuterClass40.InnerClass40 ic40 = new nspacemove_nestedPackage.NewOkay40.OuterClass40.InnerClass40();
|
||||
nspacemove_nestedPackage.NewOkay50.OuterClass50.InnerClass50 ic50 = new nspacemove_nestedPackage.NewOkay50.OuterClass50.InnerClass50();
|
||||
nspacemove_nestedPackage.OuterClass60.InnerClass60 ic60 = new nspacemove_nestedPackage.OuterClass60.InnerClass60();
|
||||
nspacemove_nestedPackage.OuterClass70.InnerClass70 ic70 = new nspacemove_nestedPackage.OuterClass70.InnerClass70();
|
||||
nspacemove_nestedPackage.Space.OuterClass80.InnerClass80 ic80 = new nspacemove_nestedPackage.Space.OuterClass80.InnerClass80();
|
||||
|
||||
// inner enums
|
||||
oc1.take(nspacemove_nestedPackage.Space.OuterClass1.InnerEnum1.ie1a, ic1);
|
||||
oc2.take(nspacemove_nestedPackage.Space.OuterClass2.InnerEnum2.ie2a, ic2);
|
||||
oc3.take(nspacemove_nestedPackage.NewSpace3.OuterClass3.InnerEnum3.ie3a, ic3);
|
||||
oc4.take(nspacemove_nestedPackage.NewSpace4.OuterClass4.InnerEnum4.ie4a, ic4);
|
||||
oc5.take(nspacemove_nestedPackage.OuterClass5.InnerEnum5.ie5a, ic5);
|
||||
oc6.take(nspacemove_nestedPackage.OuterClass6.InnerEnum6.ie6a, ic6);
|
||||
oc7.take(nspacemove_nestedPackage.OuterClass7.InnerEnum7.ie7a, ic7);
|
||||
|
||||
oc10.take(nspacemove_nestedPackage.Space.OuterClass10.InnerEnum10.ie10a, ic10);
|
||||
oc20.take(nspacemove_nestedPackage.Space.OuterClass20.InnerEnum20.ie20a, ic20);
|
||||
oc30.take(nspacemove_nestedPackage.NewOkay30.OuterClass30.InnerEnum30.ie30a, ic30);
|
||||
oc40.take(nspacemove_nestedPackage.NewOkay40.OuterClass40.InnerEnum40.ie40a, ic40);
|
||||
oc50.take(nspacemove_nestedPackage.NewOkay50.OuterClass50.InnerEnum50.ie50a, ic50);
|
||||
oc60.take(nspacemove_nestedPackage.OuterClass60.InnerEnum60.ie60a, ic60);
|
||||
oc70.take(nspacemove_nestedPackage.OuterClass70.InnerEnum70.ie70a, ic70);
|
||||
oc80.take(nspacemove_nestedPackage.Space.OuterClass80.InnerEnum80.ie80a, ic80);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
var nspacemove_nested = require("nspacemove_nested");
|
||||
|
||||
// outer classes
|
||||
oc1 = new nspacemove_nested.Space.OuterClass1()
|
||||
oc2 = new nspacemove_nested.Space.OuterClass2()
|
||||
oc3 = new nspacemove_nested.NewSpace3.OuterClass3()
|
||||
oc4 = new nspacemove_nested.NewSpace4.OuterClass4()
|
||||
oc5 = new nspacemove_nested.OuterClass5()
|
||||
oc6 = new nspacemove_nested.OuterClass6()
|
||||
oc7 = new nspacemove_nested.OuterClass7()
|
||||
|
||||
oc10 = new nspacemove_nested.Space.OuterClass10()
|
||||
oc20 = new nspacemove_nested.Space.OuterClass20()
|
||||
oc30 = new nspacemove_nested.NewOkay30.OuterClass30()
|
||||
oc40 = new nspacemove_nested.NewOkay40.OuterClass40()
|
||||
oc50 = new nspacemove_nested.NewOkay50.OuterClass50()
|
||||
oc60 = new nspacemove_nested.OuterClass60()
|
||||
oc70 = new nspacemove_nested.OuterClass70()
|
||||
oc80 = new nspacemove_nested.Space.OuterClass80()
|
||||
|
||||
// inner classes
|
||||
ic1 = new nspacemove_nested.Space.InnerClass1()
|
||||
ic2 = new nspacemove_nested.Space.InnerClass2()
|
||||
ic3 = new nspacemove_nested.NewSpace3.InnerClass3()
|
||||
ic4 = new nspacemove_nested.NewSpace4.InnerClass4()
|
||||
ic5 = new nspacemove_nested.InnerClass5()
|
||||
ic6 = new nspacemove_nested.InnerClass6()
|
||||
ic7 = new nspacemove_nested.InnerClass7()
|
||||
|
||||
ic10 = new nspacemove_nested.Space.InnerClass10()
|
||||
ic20 = new nspacemove_nested.Space.InnerClass20()
|
||||
ic30 = new nspacemove_nested.NewOkay30.InnerClass30()
|
||||
ic40 = new nspacemove_nested.NewOkay40.InnerClass40()
|
||||
ic50 = new nspacemove_nested.NewOkay50.InnerClass50()
|
||||
ic60 = new nspacemove_nested.InnerClass60()
|
||||
ic70 = new nspacemove_nested.InnerClass70()
|
||||
ic80 = new nspacemove_nested.Space.InnerClass80()
|
||||
|
||||
// inner enums
|
||||
oc1.take(nspacemove_nested.Space.OuterClass1.ie1a, ic1)
|
||||
oc2.take(nspacemove_nested.Space.OuterClass2.ie2a, ic2)
|
||||
oc3.take(nspacemove_nested.NewSpace3.OuterClass3.ie3a, ic3)
|
||||
oc4.take(nspacemove_nested.NewSpace4.OuterClass4.ie4a, ic4)
|
||||
oc5.take(nspacemove_nested.OuterClass5.ie5a, ic5)
|
||||
oc6.take(nspacemove_nested.OuterClass6.ie6a, ic6)
|
||||
oc7.take(nspacemove_nested.OuterClass7.ie7a, ic7)
|
||||
|
||||
oc10.take(nspacemove_nested.Space.OuterClass10.ie10a, ic10)
|
||||
oc20.take(nspacemove_nested.Space.OuterClass20.ie20a, ic20)
|
||||
oc30.take(nspacemove_nested.NewOkay30.OuterClass30.ie30a, ic30)
|
||||
oc40.take(nspacemove_nested.NewOkay40.OuterClass40.ie40a, ic40)
|
||||
oc50.take(nspacemove_nested.NewOkay50.OuterClass50.ie50a, ic50)
|
||||
oc60.take(nspacemove_nested.OuterClass60.ie60a, ic60)
|
||||
oc70.take(nspacemove_nested.OuterClass70.ie70a, ic70)
|
||||
oc80.take(nspacemove_nested.Space.OuterClass80.ie80a, ic80)
|
|
@ -0,0 +1,61 @@
|
|||
require("import") -- the import fn
|
||||
import("nspacemove_nested") -- import lib
|
||||
|
||||
-- catch "undefined" global variables
|
||||
local env = _ENV -- Lua 5.2
|
||||
if not env then env = getfenv () end -- Lua 5.1
|
||||
setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end})
|
||||
|
||||
-- outer classes
|
||||
oc1 = nspacemove_nested.Space.OuterClass1()
|
||||
oc2 = nspacemove_nested.Space.OuterClass2()
|
||||
oc3 = nspacemove_nested.NewSpace3.OuterClass3()
|
||||
oc4 = nspacemove_nested.NewSpace4.OuterClass4()
|
||||
oc5 = nspacemove_nested.OuterClass5()
|
||||
oc6 = nspacemove_nested.OuterClass6()
|
||||
oc7 = nspacemove_nested.OuterClass7()
|
||||
|
||||
oc10 = nspacemove_nested.Space.OuterClass10()
|
||||
oc20 = nspacemove_nested.Space.OuterClass20()
|
||||
oc30 = nspacemove_nested.NewOkay30.OuterClass30()
|
||||
oc40 = nspacemove_nested.NewOkay40.OuterClass40()
|
||||
oc50 = nspacemove_nested.NewOkay50.OuterClass50()
|
||||
oc60 = nspacemove_nested.OuterClass60()
|
||||
oc70 = nspacemove_nested.OuterClass70()
|
||||
oc80 = nspacemove_nested.Space.OuterClass80()
|
||||
|
||||
-- inner classes
|
||||
ic1 = nspacemove_nested.Space.InnerClass1()
|
||||
ic2 = nspacemove_nested.Space.InnerClass2()
|
||||
ic3 = nspacemove_nested.NewSpace3.InnerClass3()
|
||||
ic4 = nspacemove_nested.NewSpace4.InnerClass4()
|
||||
ic5 = nspacemove_nested.InnerClass5()
|
||||
ic6 = nspacemove_nested.InnerClass6()
|
||||
ic7 = nspacemove_nested.InnerClass7()
|
||||
|
||||
ic10 = nspacemove_nested.Space.InnerClass10()
|
||||
ic20 = nspacemove_nested.Space.InnerClass20()
|
||||
ic30 = nspacemove_nested.NewOkay30.InnerClass30()
|
||||
ic40 = nspacemove_nested.NewOkay40.InnerClass40()
|
||||
ic50 = nspacemove_nested.NewOkay50.InnerClass50()
|
||||
ic60 = nspacemove_nested.InnerClass60()
|
||||
ic70 = nspacemove_nested.InnerClass70()
|
||||
ic80 = nspacemove_nested.Space.InnerClass80()
|
||||
|
||||
-- inner enums
|
||||
oc1:take(nspacemove_nested.Space.OuterClass1.ie1a, ic1)
|
||||
oc2:take(nspacemove_nested.Space.OuterClass2.ie2a, ic2)
|
||||
oc3:take(nspacemove_nested.NewSpace3.OuterClass3.ie3a, ic3)
|
||||
oc4:take(nspacemove_nested.NewSpace4.OuterClass4.ie4a, ic4)
|
||||
oc5:take(nspacemove_nested.OuterClass5.ie5a, ic5)
|
||||
oc6:take(nspacemove_nested.OuterClass6.ie6a, ic6)
|
||||
oc7:take(nspacemove_nested.OuterClass7.ie7a, ic7)
|
||||
|
||||
oc10:take(nspacemove_nested.Space.OuterClass10.ie10a, ic10)
|
||||
oc20:take(nspacemove_nested.Space.OuterClass20.ie20a, ic20)
|
||||
oc30:take(nspacemove_nested.NewOkay30.OuterClass30.ie30a, ic30)
|
||||
oc40:take(nspacemove_nested.NewOkay40.OuterClass40.ie40a, ic40)
|
||||
oc50:take(nspacemove_nested.NewOkay50.OuterClass50.ie50a, ic50)
|
||||
oc60:take(nspacemove_nested.OuterClass60.ie60a, ic60)
|
||||
oc70:take(nspacemove_nested.OuterClass70.ie70a, ic70)
|
||||
oc80:take(nspacemove_nested.Space.OuterClass80.ie80a, ic80)
|
|
@ -11,6 +11,7 @@ SWIG_JAVABODY_PROXY(public, public, SWIGTYPE)
|
|||
%nspace;
|
||||
%nonspace Outer::Inner2::NoNSpacePlease;
|
||||
%nonspace Outer::Inner2::NoNSpacePlease::ReallyNoNSpaceEnum;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Outer::Inner2::NoNSpacePlease;
|
||||
|
||||
%copyctor;
|
||||
%ignore Outer::Inner2::Color::Color();
|
||||
|
|
|
@ -0,0 +1,201 @@
|
|||
%module nspacemove_nested
|
||||
|
||||
// Tests nested classes for badly configured %nspace, %nonspace, %nspacemove combinations
|
||||
// Based off Examples/test-suite/errors/swig_nspacemove.i
|
||||
|
||||
#if !defined(SWIGCSHARP) && !defined(SWIGJAVA)
|
||||
%feature ("flatnested");
|
||||
#endif
|
||||
|
||||
// These will warn, hence suppressed in this testcase
|
||||
|
||||
// Note that these could also be suppressed at the outer class level, eg:
|
||||
// %warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass1;
|
||||
// Or even at namespace level:
|
||||
// %warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space;
|
||||
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass1::InnerClass1;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass2::InnerClass2;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass3::InnerClass3;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass4::InnerClass4;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass5::InnerClass5;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass6::InnerClass6;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass7::InnerClass7;
|
||||
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass1::InnerEnum1;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass2::InnerEnum2;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass3::InnerEnum3;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass4::InnerEnum4;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass5::InnerEnum5;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass6::InnerEnum6;
|
||||
%warnfilter(SWIGWARN_TYPE_NSPACE_SETTING) Space::OuterClass7::InnerEnum7;
|
||||
|
||||
%nspace Space::OuterClass1;
|
||||
%nspacemove(BadSpace1) Space::OuterClass1::InnerClass1;
|
||||
%nspacemove(BadSpace1) Space::OuterClass1::InnerEnum1;
|
||||
|
||||
%nspace Space::OuterClass2;
|
||||
%nonspace Space::OuterClass2::InnerClass2;
|
||||
%nonspace Space::OuterClass2::InnerEnum2;
|
||||
|
||||
%nspacemove(NewSpace3) Space::OuterClass3;
|
||||
%nspacemove(BadSpace3) Space::OuterClass3::InnerClass3;
|
||||
%nspacemove(BadSpace3) Space::OuterClass3::InnerEnum3;
|
||||
|
||||
%nspacemove(NewSpace4) Space::OuterClass4;
|
||||
%nonspace Space::OuterClass4::InnerClass4;
|
||||
%nonspace Space::OuterClass4::InnerEnum4;
|
||||
|
||||
%nspacemove(NewSpace5) Space::OuterClass5::InnerClass5;
|
||||
%nspacemove(NewSpace5) Space::OuterClass5::InnerEnum5;
|
||||
|
||||
%nonspace Space::OuterClass6;
|
||||
%nspace Space::OuterClass6::InnerClass6;
|
||||
%nspace Space::OuterClass6::InnerEnum6;
|
||||
|
||||
%nonspace Space::OuterClass7;
|
||||
%nspacemove(NewSpace7) Space::OuterClass7::InnerClass7;
|
||||
%nspacemove(NewSpace7) Space::OuterClass7::InnerEnum7;
|
||||
|
||||
%inline %{
|
||||
namespace Space {
|
||||
struct OuterClass1 {
|
||||
struct InnerClass1 {
|
||||
struct BottomClass1 {};
|
||||
};
|
||||
enum InnerEnum1 { ie1a, ie1b };
|
||||
void take(InnerEnum1 e, InnerClass1 c) {}
|
||||
};
|
||||
struct OuterClass2 {
|
||||
struct InnerClass2 {
|
||||
struct BottomClass2 {};
|
||||
};
|
||||
enum InnerEnum2 { ie2a, ie2b };
|
||||
void take(InnerEnum2 e, InnerClass2 c) {}
|
||||
};
|
||||
struct OuterClass3 {
|
||||
struct InnerClass3 {
|
||||
struct BottomClass3 {};
|
||||
};
|
||||
enum InnerEnum3 { ie3a, ie3b };
|
||||
void take(InnerEnum3 e, InnerClass3 c) {}
|
||||
};
|
||||
struct OuterClass4 {
|
||||
struct InnerClass4 {
|
||||
struct BottomClass4 {};
|
||||
};
|
||||
enum InnerEnum4 { ie4a, ie4b };
|
||||
void take(InnerEnum4 e, InnerClass4 c) {}
|
||||
};
|
||||
struct OuterClass5 {
|
||||
struct InnerClass5 {
|
||||
struct BottomClass5 {};
|
||||
};
|
||||
enum InnerEnum5 { ie5a, ie5b };
|
||||
void take(InnerEnum5 e, InnerClass5 c) {}
|
||||
};
|
||||
struct OuterClass6 {
|
||||
struct InnerClass6 {
|
||||
struct BottomClass6 {};
|
||||
};
|
||||
enum InnerEnum6 { ie6a, ie6b };
|
||||
void take(InnerEnum6 e, InnerClass6 c) {}
|
||||
};
|
||||
struct OuterClass7 {
|
||||
struct InnerClass7 {
|
||||
struct BottomClass7 {};
|
||||
};
|
||||
enum InnerEnum7 { ie7a, ie7b };
|
||||
void take(InnerEnum7 e, InnerClass7 c) {}
|
||||
};
|
||||
}
|
||||
%}
|
||||
|
||||
|
||||
// These should not warn
|
||||
%nspace Space::OuterClass10;
|
||||
%nspace Space::OuterClass10::InnerClass10;
|
||||
%nspace Space::OuterClass10::InnerEnum10;
|
||||
|
||||
%nspace Space::OuterClass20;
|
||||
%clearnspace Space::OuterClass20::InnerClass20;
|
||||
%clearnspace Space::OuterClass20::InnerEnum20;
|
||||
|
||||
%nspacemove(NewOkay30) Space::OuterClass30;
|
||||
%nspace Space::OuterClass30::InnerClass30;
|
||||
%nspace Space::OuterClass30::InnerEnum40;
|
||||
|
||||
%nspacemove(NewOkay40) Space::OuterClass40;
|
||||
%clearnspace Space::OuterClass40::InnerClass40;
|
||||
%clearnspace Space::OuterClass40::InnerEnum40;
|
||||
|
||||
%nspacemove(NewOkay50) Space::OuterClass50;
|
||||
|
||||
%nonspace Space::OuterClass60;
|
||||
%nonspace Space::OuterClass60::InnerClass60;
|
||||
%nonspace Space::OuterClass60::InnerEnum60;
|
||||
|
||||
%nonspace Space::OuterClass70;
|
||||
|
||||
%nspace Space::OuterClass80;
|
||||
|
||||
%inline %{
|
||||
namespace Space {
|
||||
struct OuterClass10 {
|
||||
struct InnerClass10 {
|
||||
struct BottomClass10 {};
|
||||
};
|
||||
enum InnerEnum10 { ie10a, ie10b };
|
||||
void take(InnerEnum10 e, InnerClass10 c) {}
|
||||
};
|
||||
struct OuterClass20 {
|
||||
struct InnerClass20 {
|
||||
struct BottomClass20 {};
|
||||
};
|
||||
enum InnerEnum20 { ie20a, ie20b };
|
||||
void take(InnerEnum20 e, InnerClass20 c) {}
|
||||
};
|
||||
struct OuterClass30 {
|
||||
struct InnerClass30 {
|
||||
struct BottomClass30 {};
|
||||
};
|
||||
enum InnerEnum30 { ie30a, ie30b };
|
||||
void take(InnerEnum30 e, InnerClass30 c) {}
|
||||
};
|
||||
struct OuterClass40 {
|
||||
struct InnerClass40 {
|
||||
struct BottomClass40 {};
|
||||
};
|
||||
enum InnerEnum40 { ie40a, ie40b };
|
||||
void take(InnerEnum40 e, InnerClass40 c) {}
|
||||
};
|
||||
struct OuterClass50 {
|
||||
struct InnerClass50 {
|
||||
struct BottomClass50 {};
|
||||
};
|
||||
enum InnerEnum50 { ie50a, ie50b };
|
||||
void take(InnerEnum50 e, InnerClass50 c) {}
|
||||
};
|
||||
struct OuterClass60 {
|
||||
struct InnerClass60 {
|
||||
struct BottomClass60 {};
|
||||
};
|
||||
enum InnerEnum60 { ie60a, ie60b };
|
||||
void take(InnerEnum60 e, InnerClass60 c) {}
|
||||
};
|
||||
struct OuterClass70 {
|
||||
struct InnerClass70 {
|
||||
struct BottomClass70 {};
|
||||
};
|
||||
enum InnerEnum70 { ie70a, ie70b };
|
||||
void take(InnerEnum70 e, InnerClass70 c) {}
|
||||
};
|
||||
struct OuterClass80 {
|
||||
struct InnerClass80 {
|
||||
struct BottomClass80 {};
|
||||
};
|
||||
enum InnerEnum80 { ie80a, ie80b };
|
||||
void take(InnerEnum80 e, InnerClass80 c) {}
|
||||
};
|
||||
}
|
||||
%}
|
|
@ -163,6 +163,7 @@
|
|||
#define WARN_TYPE_ABSTRACT 403
|
||||
#define WARN_TYPE_REDEFINED 404
|
||||
#define WARN_TYPE_RVALUE_REF_QUALIFIER_IGNORED 405
|
||||
#define WARN_TYPE_NSPACE_SETTING 406
|
||||
|
||||
/* Unused since 4.1.0: #define WARN_TYPEMAP_SOURCETARGET 450 */
|
||||
#define WARN_TYPEMAP_CHARLEAK 451
|
||||
|
|
|
@ -341,6 +341,54 @@ class TypePass:private Dispatcher {
|
|||
Delete(allbases);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
* nspace_setting()
|
||||
*
|
||||
* Configures "sym:nspace" on the node and returns an overridden
|
||||
* nspace value when %nspacemove is used.
|
||||
* outer should point to parent class.
|
||||
* ------------------------------------------------------------ */
|
||||
|
||||
String *nspace_setting(Node *n, Node *outer) {
|
||||
String *nssymname_new = nssymname;
|
||||
String *feature_nspace = GetFlagAttr(n, "feature:nspace");
|
||||
String *nspace = Copy(feature_nspace);
|
||||
Replaceall(nspace, "::", ".");
|
||||
if (outer) {
|
||||
// Nested class or enum in a class
|
||||
String *outer_nspace = Getattr(outer, "sym:nspace");
|
||||
//Printf(stdout, "nspace value %s on %s\n", outer_nspace, Getattr(n, "name"));
|
||||
String *nspace_attribute = Getattr(n, "feature:nspace");;
|
||||
bool warn = false;
|
||||
if (outer_nspace) {
|
||||
if (Equal(nspace_attribute, "0")) {
|
||||
warn = true;
|
||||
} else if (nspace && !(Equal(nspace, "1") || Equal(nspace, outer_nspace))) {
|
||||
warn = true;
|
||||
}
|
||||
} else if (nspace) {
|
||||
warn = true;
|
||||
}
|
||||
if (warn) {
|
||||
Swig_warning(WARN_TYPE_NSPACE_SETTING, Getfile(n), Getline(n), "Ignoring nspace setting (%s) for '%s',\n", nspace_attribute, Swig_name_decl(n));
|
||||
Swig_warning(WARN_TYPE_NSPACE_SETTING, Getfile(outer), Getline(outer), "as it conflicts with the nspace setting (%s) for outer class '%s'.\n", outer_nspace, Swig_name_decl(outer));
|
||||
}
|
||||
Setattr(n, "sym:nspace", outer_nspace);
|
||||
//Printf(stdout, "setting nspace %s on %s to %s\n", outer_nspace, Getattr(n, "name"), outer_nspace);
|
||||
} else {
|
||||
if (nspace) {
|
||||
if (Equal(nspace, "1")) {
|
||||
if (nssymname)
|
||||
Setattr(n, "sym:nspace", nssymname);
|
||||
} else {
|
||||
Setattr(n, "sym:nspace", nspace);
|
||||
nssymname_new = nspace;
|
||||
}
|
||||
}
|
||||
}
|
||||
return nssymname_new;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
* top()
|
||||
* ------------------------------------------------------------ */
|
||||
|
@ -495,18 +543,7 @@ class TypePass:private Dispatcher {
|
|||
}
|
||||
|
||||
String *oldnssymname = nssymname;
|
||||
String *nspace_feature = GetFlagAttr(n, "feature:nspace");
|
||||
String *nspace = Copy(nspace_feature);
|
||||
Replaceall(nspace, "::", ".");
|
||||
if (nspace) {
|
||||
if (Equal(nspace, "1")) {
|
||||
if (nssymname)
|
||||
Setattr(n, "sym:nspace", nssymname);
|
||||
} else {
|
||||
Setattr(n, "sym:nspace", nspace);
|
||||
nssymname = nspace;
|
||||
}
|
||||
}
|
||||
nssymname = nspace_setting(n, Getattr(n, "nested:outer"));
|
||||
|
||||
SwigType_new_scope(scopename);
|
||||
SwigType_attach_symtab(Getattr(n, "symtab"));
|
||||
|
@ -845,18 +882,8 @@ class TypePass:private Dispatcher {
|
|||
Setattr(n, "enumtype", enumtype);
|
||||
|
||||
String *oldnssymname = nssymname;
|
||||
String *nspace_feature = GetFlagAttr(n, "feature:nspace");
|
||||
String *nspace = Copy(nspace_feature);
|
||||
Replaceall(nspace, "::", ".");
|
||||
if (nspace) {
|
||||
if (Equal(nspace, "1")) {
|
||||
if (nssymname)
|
||||
Setattr(n, "sym:nspace", nssymname);
|
||||
} else {
|
||||
Setattr(n, "sym:nspace", nspace);
|
||||
nssymname = nspace;
|
||||
}
|
||||
}
|
||||
Node *parent = parentNode(n);
|
||||
nssymname = nspace_setting(n, parent && Equal(nodeType(parent), "class") ? parent : NULL);
|
||||
|
||||
// This block of code is for dealing with %ignore on an enum item where the target language
|
||||
// attempts to use the C enum value in the target language itself and expects the previous enum value
|
||||
|
|
Loading…
Reference in New Issue