Lambda expressions: parse exception specification in lambda functions. Fix lambda testcase for gcc-4.7.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-matevz@13854 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2012-10-01 18:53:12 +00:00
commit e68d8024f5
2 changed files with 32 additions and 2 deletions

View file

@ -19,7 +19,23 @@ auto lambda2 = [](int x, int y) { return x+y; };
auto lambda3 = [&](int x, int y) { return x+y; };
auto lambda4 = [=](int x, int y) { return x+y; };
int thing = 0;
#ifdef SWIG
// Not strictly correct as captured variables should have non-automatic storage duration, ie shouldn't capture globals. gcc-4.7 warns about this, but we check that SWIG can parse this anyway.
auto lambda5 = [=,&thing]() { return thing;};
#else
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) throw() -> int { return x+y; };
auto lambda9 = [] (int x, int y) mutable throw() -> int { return x+y; };
auto lambda10 = [] (int x, int y) throw(int) { return x+y; };
auto lambda11 = [] (int x, int y) mutable throw(int) { return x+y; };
int runLambda1() {
return lambda1(5,6);
@ -49,3 +65,16 @@ int runLambdaInline() {
}
%}
%{
// TODO
struct LambdaStruct {
static constexpr auto lambda_struct1 = [=]() { return thing;};
};
auto lambda100 = [] { return thing;};
int lambda101 = [] (int a, int b) { return a + b; }(1, 2);
int lambda102 = [] (int a, int b) mutable { return a + b; }(1, 2);
auto lambda103 = [] () throw () { /* does not throw */ };
auto lambda104 = [] () mutable throw () { /* does not throw */ };
void lambda_init(int = ([=]{ return 0; })());
%}