Add lambda functions to the symbol tables and add ability to suppress lambda warnings.
This commit is contained in:
parent
d613ef42f2
commit
6399428a62
7 changed files with 64 additions and 7 deletions
|
|
@ -320,7 +320,7 @@ auto sum = [](int x, int y) { return x+y; };
|
||||||
auto sum = [](int x, int y) -> int { return x+y; };
|
auto sum = [](int x, int y) -> int { return x+y; };
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
<p>The lambda functions are removed from the wrapper class for now, because of the lack of support
|
<p>The lambda functions are removed from the wrappers for now, because of the lack of support
|
||||||
for closures (scope of the lambda functions) in the target languages.</p>
|
for closures (scope of the lambda functions) in the target languages.</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,26 @@
|
||||||
*/
|
*/
|
||||||
%module cpp0x_lambda_functions
|
%module cpp0x_lambda_functions
|
||||||
|
|
||||||
#pragma SWIG nowarn=SWIGWARN_LANG_NATIVE_UNIMPL
|
%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;
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
/* Defined lambda function with return value. */
|
/* Defined lambda function with return value. */
|
||||||
|
|
@ -44,6 +63,13 @@ auto lambda16 = [] { return thing; };
|
||||||
auto lambda17 = [] { return thing; }();
|
auto lambda17 = [] { return thing; }();
|
||||||
constexpr auto lambda18 = [] (int x, int y) mutable throw(int) { return x+y; };
|
constexpr auto lambda18 = [] (int x, int y) mutable throw(int) { return x+y; };
|
||||||
|
|
||||||
|
namespace Space1 {
|
||||||
|
constexpr auto lambda19 = [] (int x, int y) mutable throw(int) { return x+y; };
|
||||||
|
namespace Space2 {
|
||||||
|
constexpr auto lambda20 = [] (int x, int y) mutable throw(int) { return x+y; };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int runLambda1() {
|
int runLambda1() {
|
||||||
return lambda1(5,6);
|
return lambda1(5,6);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3165,7 +3165,12 @@ c_declaration : c_decl {
|
||||||
appendChild($$,firstChild($5));
|
appendChild($$,firstChild($5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| cpp_lambda_decl { Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line,"Lambda expressions and closures are not fully supported yet.\n"); $$ = $1; }
|
| cpp_lambda_decl {
|
||||||
|
$$ = $1;
|
||||||
|
SWIG_WARN_NODE_BEGIN($$);
|
||||||
|
Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line, "Lambda expressions and closures are not fully supported yet.\n");
|
||||||
|
SWIG_WARN_NODE_END($$);
|
||||||
|
}
|
||||||
| USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_DECLARATION, cparse_file, cparse_line,"The 'using' keyword in type aliasing is not fully supported yet.\n"); $$ = 0; }
|
| USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_DECLARATION, cparse_file, cparse_line,"The 'using' keyword in type aliasing is not fully supported yet.\n"); $$ = 0; }
|
||||||
| TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line,"The 'using' keyword in template aliasing is not fully supported yet.\n"); $$ = 0; }
|
| TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line,"The 'using' keyword in template aliasing is not fully supported yet.\n"); $$ = 0; }
|
||||||
;
|
;
|
||||||
|
|
@ -3366,13 +3371,19 @@ cpp_alternate_rettype : primitive_type { $$ = $1; }
|
||||||
auto six = [](int x, int y) { return x+y; }(4, 2);
|
auto six = [](int x, int y) { return x+y; }(4, 2);
|
||||||
------------------------------------------------------------ */
|
------------------------------------------------------------ */
|
||||||
cpp_lambda_decl : storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const lambda_body lambda_tail {
|
cpp_lambda_decl : storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const lambda_body lambda_tail {
|
||||||
$$ = 0;
|
$$ = new_node("lambda");
|
||||||
|
Setattr($$,"name",$3);
|
||||||
|
add_symbols($$);
|
||||||
}
|
}
|
||||||
| storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const ARROW type lambda_body lambda_tail {
|
| storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const ARROW type lambda_body lambda_tail {
|
||||||
$$ = 0;
|
$$ = new_node("lambda");
|
||||||
|
Setattr($$,"name",$3);
|
||||||
|
add_symbols($$);
|
||||||
}
|
}
|
||||||
| storage_class AUTO idcolon EQUAL lambda_introducer lambda_body lambda_tail {
|
| storage_class AUTO idcolon EQUAL lambda_introducer lambda_body lambda_tail {
|
||||||
$$ = 0;
|
$$ = new_node("lambda");
|
||||||
|
Setattr($$,"name",$3);
|
||||||
|
add_symbols($$);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,12 @@ public:
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual int lambdaDeclaration(Node *n) {
|
||||||
|
show_attributes(n);
|
||||||
|
emit_children(n);
|
||||||
|
return SWIG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
virtual int enumDeclaration(Node *n) {
|
virtual int enumDeclaration(Node *n) {
|
||||||
show_attributes(n);
|
show_attributes(n);
|
||||||
emit_children(n);
|
emit_children(n);
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,8 @@ int Dispatcher::emit_one(Node *n) {
|
||||||
ret = namespaceDeclaration(n);
|
ret = namespaceDeclaration(n);
|
||||||
} else if (strcmp(tag, "template") == 0) {
|
} else if (strcmp(tag, "template") == 0) {
|
||||||
ret = templateDeclaration(n);
|
ret = templateDeclaration(n);
|
||||||
|
} else if (strcmp(tag, "lambda") == 0) {
|
||||||
|
ret = lambdaDeclaration(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===============================================================
|
/* ===============================================================
|
||||||
|
|
@ -285,6 +287,9 @@ int Dispatcher::classDeclaration(Node *n) {
|
||||||
int Dispatcher::templateDeclaration(Node *n) {
|
int Dispatcher::templateDeclaration(Node *n) {
|
||||||
return defaultHandler(n);
|
return defaultHandler(n);
|
||||||
}
|
}
|
||||||
|
int Dispatcher::lambdaDeclaration(Node *n) {
|
||||||
|
return defaultHandler(n);
|
||||||
|
}
|
||||||
int Dispatcher::classforwardDeclaration(Node *n) {
|
int Dispatcher::classforwardDeclaration(Node *n) {
|
||||||
return defaultHandler(n);
|
return defaultHandler(n);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ public:
|
||||||
virtual int usingDeclaration(Node *n);
|
virtual int usingDeclaration(Node *n);
|
||||||
virtual int namespaceDeclaration(Node *n);
|
virtual int namespaceDeclaration(Node *n);
|
||||||
virtual int templateDeclaration(Node *n);
|
virtual int templateDeclaration(Node *n);
|
||||||
|
virtual int lambdaDeclaration(Node *n);
|
||||||
|
|
||||||
enum AccessMode { PUBLIC, PRIVATE, PROTECTED };
|
enum AccessMode { PUBLIC, PRIVATE, PROTECTED };
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -524,7 +524,7 @@ class TypePass:private Dispatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------
|
/* ------------------------------------------------------------
|
||||||
* namespaceDeclaration()
|
* templateDeclaration()
|
||||||
* ------------------------------------------------------------ */
|
* ------------------------------------------------------------ */
|
||||||
|
|
||||||
virtual int templateDeclaration(Node *n) {
|
virtual int templateDeclaration(Node *n) {
|
||||||
|
|
@ -543,6 +543,14 @@ class TypePass:private Dispatcher {
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------
|
||||||
|
* lambdaDeclaration()
|
||||||
|
* ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
virtual int lambdaDeclaration(Node *) {
|
||||||
|
return SWIG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------
|
/* ------------------------------------------------------------
|
||||||
* classforwardDeclaration()
|
* classforwardDeclaration()
|
||||||
* ------------------------------------------------------------ */
|
* ------------------------------------------------------------ */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue