aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2013-12-13 08:11:17 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2013-12-13 08:11:17 +0000
commit0f4ceaf5923fd9a30eb9201048cd285a9bba8084 (patch)
tree7fb4c9fcf4be2e96f512d1ab79efeb2eeca5c38d
parent2121e1217eae19a0a3e852fc52c89f55faf7e20a (diff)
downloadswig-0f4ceaf5923fd9a30eb9201048cd285a9bba8084.tar.gz
Deprecation of the 'nestedworkaround' feature
Also add in macros for the flatnested feature which can be used in place of the nestedworkaround feature
-rw-r--r--Doc/Manual/SWIGPlus.html26
-rw-r--r--Doc/Manual/Warnings.html1
-rw-r--r--Lib/swig.swg9
-rw-r--r--Source/CParse/parser.y4
-rw-r--r--Source/Include/swigwarn.h1
5 files changed, 34 insertions, 7 deletions
diff --git a/Doc/Manual/SWIGPlus.html b/Doc/Manual/SWIGPlus.html
index 2ec98f33a..20c03cc71 100644
--- a/Doc/Manual/SWIGPlus.html
+++ b/Doc/Manual/SWIGPlus.html
@@ -4992,11 +4992,27 @@ class Bar {
<p>
<b>Compatibility Note:</b>
-In SWIG 2.0 and earlier, nested classes were treated as opaque pointers.
-Also there was a workaround, implementing approximately the same behaviour as the
-%feature ("flatnested") with an additional help from the user:
-nested class had to be manually redeclared in the global scope, typedef name and %feature nestedworkaround
-added for the inner class.
+Prior to SWIG-3.0.0, there was limited nested class support. Nested classes were treated as opaque pointers.
+However, there was a workaround for nested class support in these older versions requiring the user to replicate
+the nested class in the global scope, adding in a typedef for the nested class in the global scope and
+using the "nestedworkaround" feature on the nested class. This resulted in approximately the
+same behaviour as the "flatnested" feature. With proper nested class support now available in SWIG-3.0.0, this
+feature has been deprecated and no longer works requiring code changes. If you see the following warning:
+</p>
+
+<div class="shell">
+<pre>
+example.i:8: Warning 126: The nestedworkaround feature is deprecated
+</pre>
+</div>
+
+<p>
+consider using the "flatnested" feature discussed above which generates a non-nested proxy class, like the
+"nestedworkaround" feature did. Alternatively, use the default nested class code generation, which may generate an
+equivalent to a nested proxy class in the target language, depending on the target language support.
+</p>
+
+<p>
SWIG-1.3.40 and earlier versions did not have the <tt>nestedworkaround</tt> feature
and the generated code resulting from parsing nested classes did not always compile.
Nested class warnings could also not be suppressed using %warnfilter.
diff --git a/Doc/Manual/Warnings.html b/Doc/Manual/Warnings.html
index e0debe41c..b4d27872c 100644
--- a/Doc/Manual/Warnings.html
+++ b/Doc/Manual/Warnings.html
@@ -382,6 +382,7 @@ example.i(4) : Syntax error in input.
<li>119. Deprecated <tt>%typemap(ignore)</tt>.
<li>120. Deprecated command line option (-runtime, -noruntime).
<li>121. Deprecated <tt>%name</tt> directive.
+<li>126. The 'nestedworkaround' feature is deprecated.
</ul>
<H3><a name="Warnings_nn11"></a>14.9.2 Preprocessor (200-299)</H3>
diff --git a/Lib/swig.swg b/Lib/swig.swg
index a63169b3e..33e920c82 100644
--- a/Lib/swig.swg
+++ b/Lib/swig.swg
@@ -9,7 +9,7 @@
* User Directives
* ----------------------------------------------------------------------------- */
-/* Deprecated SWIG directives */
+/* Deprecated SWIG-1.1 directives */
#define %disabledoc %warn "104:%disabledoc is deprecated"
#define %enabledoc %warn "105:%enabledoc is deprecated"
@@ -136,11 +136,16 @@
#define %nocallback %feature("callback","0")
#define %clearcallback %feature("callback","")
-/* the %nestedworkaround directive */
+/* the %nestedworkaround directive (deprecated) */
#define %nestedworkaround %feature("nestedworkaround")
#define %nonestedworkaround %feature("nestedworkaround","0")
#define %clearnestedworkaround %feature("nestedworkaround","")
+/* the %flatnested directive */
+#define %flatnested %feature("flatnested")
+#define %noflatnested %feature("flatnested","0")
+#define %clearflatnested %feature("flatnested","")
+
/* the %fastdispatch directive */
#define %fastdispatch %feature("fastdispatch")
#define %nofastdispatch %feature("fastdispatch","0")
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
index 9b1cec387..93ee9e3e1 100644
--- a/Source/CParse/parser.y
+++ b/Source/CParse/parser.y
@@ -1080,6 +1080,10 @@ static void single_new_feature(const char *featurename, String *val, Hash *featu
/* Printf(stdout, "single_new_feature: [%s] [%s] [%s] [%s] [%s] [%s]\n", featurename, val, declaratorid, t, ParmList_str_defaultargs(declaratorparms), qualifier); */
+ /* Warn about deprecated features */
+ if (strcmp(featurename, "nestedworkaround") == 0)
+ Swig_warning(WARN_DEPRECATED_NESTED_WORKAROUND, cparse_file, cparse_line, "The 'nestedworkaround' feature is deprecated.\n");
+
fname = NewStringf("feature:%s",featurename);
if (declaratorid) {
fixname = feature_identifier_fix(declaratorid);
diff --git a/Source/Include/swigwarn.h b/Source/Include/swigwarn.h
index 7b535f748..ea1cf7fe4 100644
--- a/Source/Include/swigwarn.h
+++ b/Source/Include/swigwarn.h
@@ -52,6 +52,7 @@
#define WARN_DEPRECATED_NODEFAULT 123
#define WARN_DEPRECATED_TYPEMAP_LANG 124
#define WARN_DEPRECATED_INPUT_FILE 125
+#define WARN_DEPRECATED_NESTED_WORKAROUND 126
/* -- Preprocessor -- */