aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/typemap_out_optimal.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/typemap_out_optimal.i')
-rw-r--r--Examples/test-suite/typemap_out_optimal.i31
1 files changed, 16 insertions, 15 deletions
diff --git a/Examples/test-suite/typemap_out_optimal.i b/Examples/test-suite/typemap_out_optimal.i
index d707ed2d5..46809d117 100644
--- a/Examples/test-suite/typemap_out_optimal.i
+++ b/Examples/test-suite/typemap_out_optimal.i
@@ -4,39 +4,40 @@
// Just the following languages tested
#if defined (SWIGCSHARP) || defined (SWIGD)
%typemap(out, optimal="1") SWIGTYPE %{
- $result = new $1_ltype((const $1_ltype &)$1);
+ $result = new $1_ltype($1);
%}
#elif defined (SWIGJAVA)
%typemap(out, optimal="1") SWIGTYPE %{
- *($&1_ltype*)&$result = new $1_ltype((const $1_ltype &)$1);
+ *($&1_ltype*)&$result = new $1_ltype($1);
%}
#elif defined (SWIGUTL)
%typemap(out,noblock="1", optimal="1") SWIGTYPE {
- %set_output(SWIG_NewPointerObj(%new_copy($1, $ltype), $&descriptor, SWIG_POINTER_OWN | %newpointer_flags));
+ %set_output(SWIG_NewPointerObj(new $1_ltype($1), $&descriptor, SWIG_POINTER_OWN | %newpointer_flags));
}
#endif
%ignore XX::operator=;
-#ifdef SWIGD
-%rename(trace) XX::debug;
-#endif
-
%inline %{
#include <iostream>
using namespace std;
struct XX {
- XX() { if (debug) cout << "XX()" << endl; }
- XX(int i) { if (debug) cout << "XX(" << i << ")" << endl; }
- XX(const XX &other) { if (debug) cout << "XX(const XX &)" << endl; }
- XX& operator =(const XX &other) { if (debug) cout << "operator=(const XX &)" << endl; return *this; }
- ~XX() { if (debug) cout << "~XX()" << endl; }
- static XX create() {
+ XX() { if (trace) cout << "XX()" << endl; }
+ XX(int i) { if (trace) cout << "XX(" << i << ")" << endl; }
+ XX(const XX &other) { if (trace) cout << "XX(const XX &)" << endl; }
+ XX& operator =(const XX &other) { if (trace) cout << "operator=(const XX &)" << endl; return *this; }
+ ~XX() { if (trace) cout << "~XX()" << endl; }
+
+// Note: best observed RVO for C#, Java and Python with g++-6 to g++-10 (just one constructor and one destructor call)
+ static XX create() {
return XX(123);
}
- static bool debug;
+ static const XX createConst() {
+ return XX(456);
+ }
+ static bool trace;
};
-bool XX::debug = true;
+bool XX::trace = true;
%}