From 0145a07cc3673e224d2811fea88f934370bd87fb Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Wed, 18 May 2016 18:07:04 +0300 Subject: [PATCH 1/7] fix for nested ignored types --- Source/Modules/csharp.cxx | 8 ++++++-- Source/Modules/java.cxx | 12 ++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index 12a502586a6..01fd5435bd6 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -188,8 +188,12 @@ class CSHARP:public Language { String *symname = Copy(Getattr(n, "sym:name")); if (symname && !GetFlag(n, "feature:flatnested")) { for (Node *outer_class = Getattr(n, "nested:outer"); outer_class; outer_class = Getattr(outer_class, "nested:outer")) { - Push(symname, "."); - Push(symname, Getattr(outer_class, "sym:name")); + if (String* name = Getattr(outer_class, "sym:name")) { + Push(symname, "."); + Push(symname, name); + } + else + return NULL; } } if (nspace) { diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx index b7a5ebbfe7c..eb809ff59c3 100644 --- a/Source/Modules/java.cxx +++ b/Source/Modules/java.cxx @@ -210,10 +210,14 @@ class JAVA:public Language { String *nspace = Getattr(n, "sym:nspace"); String *symname = Copy(Getattr(n, "sym:name")); if (symname && !GetFlag(n, "feature:flatnested")) { - for (Node *outer_class = Getattr(n, "nested:outer"); outer_class; outer_class = Getattr(outer_class, "nested:outer")) { - Push(symname, jnidescriptor ? "$" : "."); - Push(symname, Getattr(outer_class, "sym:name")); - } + for (Node *outer_class = Getattr(n, "nested:outer"); outer_class; outer_class = Getattr(outer_class, "nested:outer")) { + if (String* name = Getattr(outer_class, "sym:name")) { + Push(symname, jnidescriptor ? "$" : "."); + Push(symname, name); + } + else + return NULL; + } } if (nspace) { if (package && !jnidescriptor) From f9ad86b0c3bb63113d704b5ce189377b0092b6c1 Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Tue, 24 May 2016 22:38:50 +0300 Subject: [PATCH 2/7] test for #662 --- Examples/test-suite/common.mk | 1 + Examples/test-suite/nested_ignore.i | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 Examples/test-suite/nested_ignore.i diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 62e1d554c55..d81b62e5ac1 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -307,6 +307,7 @@ CPP_TEST_CASES += \ nested_class \ nested_directors \ nested_comment \ + nested_ignore \ nested_scope \ nested_template_base \ nested_workaround \ diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i new file mode 100644 index 00000000000..a256ff0a8f6 --- /dev/null +++ b/Examples/test-suite/nested_ignore.i @@ -0,0 +1,21 @@ +%module A + +%rename($ignore) B::C; + +namespace B { + class C { + public: + struct D { + }; + }; + + class E { + public: + typedef C::D D; + }; + + struct F + { + const E::D func(); + }; +} \ No newline at end of file From 4b3694bf15bb7d607c303278e46cfb580a946362 Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Sat, 28 May 2016 15:32:31 +0300 Subject: [PATCH 3/7] fixed test-suite/nested_ignore.i --- Examples/test-suite/nested_ignore.i | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i index a256ff0a8f6..1e155b1c43a 100644 --- a/Examples/test-suite/nested_ignore.i +++ b/Examples/test-suite/nested_ignore.i @@ -1,7 +1,9 @@ %module A +%warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) B::C::D; %rename($ignore) B::C; +%inline %{ namespace B { class C { public: @@ -18,4 +20,5 @@ namespace B { { const E::D func(); }; -} \ No newline at end of file +} +%} From 1f1286ab75785fec4e025b417299787e96cbc5b6 Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Sat, 28 May 2016 16:01:09 +0300 Subject: [PATCH 4/7] func() renamed to foo() for 'go' --- Examples/test-suite/nested_ignore.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i index 1e155b1c43a..e02c9e0c749 100644 --- a/Examples/test-suite/nested_ignore.i +++ b/Examples/test-suite/nested_ignore.i @@ -18,7 +18,7 @@ namespace B { struct F { - const E::D func(); + const E::D foo(); }; } %} From 1050f14558d8d05b1c2f45101befd10b819f0575 Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Sat, 28 May 2016 22:45:06 +0300 Subject: [PATCH 5/7] added foo() definition to satisfy some test linking fails --- Examples/test-suite/nested_ignore.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i index e02c9e0c749..c4c42c8c819 100644 --- a/Examples/test-suite/nested_ignore.i +++ b/Examples/test-suite/nested_ignore.i @@ -18,7 +18,7 @@ namespace B { struct F { - const E::D foo(); + const E::D foo(){}; }; } %} From e2d4542350eb67c1df9393eaee6babd1bfc46a12 Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Sun, 29 May 2016 01:32:10 +0300 Subject: [PATCH 6/7] function body fixed --- Examples/test-suite/nested_ignore.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i index c4c42c8c819..9eac228f977 100644 --- a/Examples/test-suite/nested_ignore.i +++ b/Examples/test-suite/nested_ignore.i @@ -18,7 +18,7 @@ namespace B { struct F { - const E::D foo(){}; + const E::D foo(){ return E::D(); } }; } %} From 4aa86c66472904ec4ed7d983283d1f17951bcff5 Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Wed, 8 Jun 2016 14:19:29 +0300 Subject: [PATCH 7/7] renamed test module, in accordance with other tests --- Examples/test-suite/nested_ignore.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i index 9eac228f977..e271eca7dd1 100644 --- a/Examples/test-suite/nested_ignore.i +++ b/Examples/test-suite/nested_ignore.i @@ -1,4 +1,4 @@ -%module A +%module nested_ignore %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) B::C::D; %rename($ignore) B::C;