update swig on windows
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
/* This testcase checks whether SWIG correctly parses the lambda expressions
|
||||
and closure syntax introduced in C++11.
|
||||
SWIG supports only lambda syntax and doesn't produce any wrapper code for
|
||||
this.
|
||||
*/
|
||||
%module cpp11_lambda_functions
|
||||
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda1;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda2;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda3;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda4;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda5;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda6;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda7;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda8;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda9;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda10;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda11;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda12;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda13;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda14;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda15;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda16;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda17;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) lambda18;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) Space1::lambda19;
|
||||
%warnfilter(SWIGWARN_CPP11_LAMBDA) Space1::Space2::lambda20;
|
||||
|
||||
// throw is invalid in C++17 and later, only SWIG to use it
|
||||
#define TESTCASE_THROW0() throw()
|
||||
#define TESTCASE_THROW1(T1) throw(T1)
|
||||
%{
|
||||
#define TESTCASE_THROW0()
|
||||
#define TESTCASE_THROW1(T1)
|
||||
%}
|
||||
|
||||
%inline %{
|
||||
/* Defined lambda function with return value. */
|
||||
auto lambda1 = [](int x, int y) -> int { return x+y; };
|
||||
|
||||
/* Defined lambda function without return value.
|
||||
Return value is calculated by compiler, if the function contains a
|
||||
single statement "return expr;". */
|
||||
auto lambda2 = [](int x, int y) { return x+y; };
|
||||
|
||||
int thing = 0;
|
||||
#ifdef SWIG
|
||||
// This is not strictly legal: non-local lambda expression cannot have a capture-default
|
||||
// gcc-4.7 warns about this and gcc-9 gives an error, but we check that SWIG can parse this anyway.
|
||||
auto lambda3 = [&](int x, int y) { return x+y; };
|
||||
auto lambda4 = [=](int x, int y) { return x+y; };
|
||||
auto lambda5 = [=,&thing]() { return thing; };
|
||||
#else
|
||||
auto lambda3 = [](int x, int y) { return x+y; };
|
||||
auto lambda4 = [](int x, int y) { return x+y; };
|
||||
auto lambda5 = []() { return thing; };
|
||||
#endif
|
||||
|
||||
void fn() {
|
||||
int stuff = 0;
|
||||
auto lambdaxxxx = [=,&stuff]() { return thing; };
|
||||
}
|
||||
auto lambda6 = [] (int a, int b) mutable { return a + b; };
|
||||
auto lambda7 = [] (int x, int y) -> int { return x+y; };
|
||||
auto lambda8 = [] (int x, int y) TESTCASE_THROW0() -> int { return x+y; };
|
||||
auto lambda9 = [] (int x, int y) mutable TESTCASE_THROW0() -> int { return x+y; };
|
||||
auto lambda10 = [] (int x, int y) TESTCASE_THROW1(int) { return x+y; };
|
||||
auto lambda11 = [] (int x, int y) mutable TESTCASE_THROW1(int) { return x+y; };
|
||||
auto lambda12 = [] (int a, int b) { return a + b; }(1, 2);
|
||||
auto lambda13 = [] (int a, int b) mutable { return a + b; }(1, 2);
|
||||
auto lambda14 = [] () TESTCASE_THROW0() {};
|
||||
auto lambda15 = [] () mutable TESTCASE_THROW0() {};
|
||||
auto lambda16 = [] { return thing; };
|
||||
auto lambda17 = [] { return thing; }();
|
||||
#if defined(SWIG) || (defined(__cplusplus) && __cplusplus >= 201703L)
|
||||
#define CONSTEXPR constexpr
|
||||
#else
|
||||
#define CONSTEXPR
|
||||
#endif
|
||||
CONSTEXPR auto lambda18 = [] (int x, int y) mutable TESTCASE_THROW1(int) { return x+y; };
|
||||
|
||||
namespace Space1 {
|
||||
CONSTEXPR auto lambda19 = [] (int x, int y) mutable TESTCASE_THROW1(int) { return x+y; };
|
||||
namespace Space2 {
|
||||
CONSTEXPR auto lambda20 = [] (int x, int y) mutable TESTCASE_THROW1(int) { return x+y; };
|
||||
}
|
||||
}
|
||||
|
||||
int runLambda1() {
|
||||
return lambda1(5,6);
|
||||
}
|
||||
|
||||
int runLambda2() {
|
||||
return lambda2(5,6);
|
||||
}
|
||||
|
||||
int runLambda3() {
|
||||
return lambda3(5,6);
|
||||
}
|
||||
|
||||
int runLambda4() {
|
||||
return lambda4(5,6);
|
||||
}
|
||||
|
||||
int runLambda5() {
|
||||
thing++;
|
||||
return lambda5();
|
||||
}
|
||||
|
||||
/* Inline defined lambda function. */
|
||||
int runLambdaInline() {
|
||||
auto myLambda = [](int x, int y) { return x+y; };
|
||||
return myLambda(5,6);
|
||||
}
|
||||
%}
|
||||
|
||||
%{
|
||||
// TODO
|
||||
int(*lambda101notauto)(int, int) = [] (int a, int b) { return a + b; };
|
||||
int lambda102 = [] (int a, int b) mutable { return a + b; }(1, 2);
|
||||
void lambda_init(int = ([]{ return 0; })());
|
||||
%}
|
||||
|
||||
Reference in New Issue
Block a user