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:
William S Fulton 2024-05-26 16:22:10 +01:00
parent 5035473e9b
commit 59827e7191
15 changed files with 806 additions and 28 deletions

View File

@ -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

View File

@ -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

View File

@ -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 \

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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) {}
};
}
%}

View File

@ -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'.

View File

@ -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:

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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)

View File

@ -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();

View File

@ -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) {}
};
}
%}

View File

@ -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

View File

@ -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