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:
parent
4db087d81f
commit
e68d8024f5
2 changed files with 32 additions and 2 deletions
|
|
@ -19,7 +19,23 @@ auto lambda2 = [](int x, int y) { return x+y; };
|
||||||
auto lambda3 = [&](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; };
|
auto lambda4 = [=](int x, int y) { return x+y; };
|
||||||
int thing = 0;
|
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;};
|
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() {
|
int runLambda1() {
|
||||||
return lambda1(5,6);
|
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; })());
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3295,8 +3295,9 @@ cpp_alternate_rettype : primitive_type { $$ = $1; }
|
||||||
OR
|
OR
|
||||||
auto myFunc = [](int x, int y) { return x+y; }
|
auto myFunc = [](int x, int y) { return x+y; }
|
||||||
*/
|
*/
|
||||||
c_lambda_decl : c_lambda_decl_front LPAREN parms RPAREN LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; }
|
c_lambda_decl : c_lambda_decl_front LPAREN parms RPAREN cpp_const LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; }
|
||||||
| c_lambda_decl_front LPAREN parms RPAREN ARROW type LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; }
|
| c_lambda_decl_front LPAREN parms RPAREN cpp_const ARROW type LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; }
|
||||||
|
;
|
||||||
|
|
||||||
c_lambda_decl_front : storage_class AUTO idcolon EQUAL LBRACKET { skip_balanced('[',']'); $$ = 0; }
|
c_lambda_decl_front : storage_class AUTO idcolon EQUAL LBRACKET { skip_balanced('[',']'); $$ = 0; }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue