Fix parse errors for C++11 type aliasing
Recently introduced by the fix for C++11 type aliasing seg fault - 117f6d00
This commit is contained in:
parent
11d8403c3c
commit
6890dfa881
3 changed files with 37 additions and 5 deletions
|
|
@ -2,9 +2,13 @@
|
||||||
%module cpp11_template_typedefs
|
%module cpp11_template_typedefs
|
||||||
|
|
||||||
%warnfilter(SWIGWARN_CPP11_ALIAS_TEMPLATE) TypedefName;
|
%warnfilter(SWIGWARN_CPP11_ALIAS_TEMPLATE) TypedefName;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_TEMPLATE) TypedefNamePtr;
|
||||||
%warnfilter(SWIGWARN_CPP11_ALIAS_TEMPLATE) MyIntKeyClass;
|
%warnfilter(SWIGWARN_CPP11_ALIAS_TEMPLATE) MyIntKeyClass;
|
||||||
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) PF;
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) PF;
|
||||||
|
|
||||||
|
// This warning should go away when type aliasing is supported
|
||||||
|
#pragma SWIG nowarn=SWIGWARN_PARSE_USING_UNDEF // Nothing known about 'p.SomeType< char *,T2,4 >'.
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
template< typename T1, typename T2, int >
|
template< typename T1, typename T2, int >
|
||||||
class SomeType {
|
class SomeType {
|
||||||
|
|
@ -16,6 +20,8 @@ class SomeType {
|
||||||
// template aliasing
|
// template aliasing
|
||||||
template< typename T2 >
|
template< typename T2 >
|
||||||
using TypedefName = SomeType<char*, T2, 5>;
|
using TypedefName = SomeType<char*, T2, 5>;
|
||||||
|
template< typename T2 >
|
||||||
|
using TypedefNamePtr = SomeType<char*, T2, 4>*;
|
||||||
|
|
||||||
// type aliasing
|
// type aliasing
|
||||||
typedef void (*PFD)(double); // Old style
|
typedef void (*PFD)(double); // Old style
|
||||||
|
|
@ -28,5 +34,8 @@ class MyCPP11Class {
|
||||||
};
|
};
|
||||||
template<typename VAL> using MyIntKeyClass = MyCPP11Class<int,VAL>;
|
template<typename VAL> using MyIntKeyClass = MyCPP11Class<int,VAL>;
|
||||||
MyIntKeyClass<char> intchar;
|
MyIntKeyClass<char> intchar;
|
||||||
|
|
||||||
|
TypedefName<int> alias1(TypedefName<int> a) { return a; }
|
||||||
|
TypedefNamePtr<int> alias1(TypedefNamePtr<int> a = nullptr) { return a; }
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,15 @@
|
||||||
// Type aliasing seg fault : Github issue #424
|
// Type aliasing seg fault : Github issue #424
|
||||||
|
|
||||||
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) Target;
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) Target;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) Int;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntRef;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntPtrRef;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntRValueRef;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) IntArray;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) HalideTargetPtr1;
|
||||||
|
%warnfilter(SWIGWARN_CPP11_ALIAS_DECLARATION) HalideTargetPtr2;
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
|
|
||||||
namespace Halide {
|
namespace Halide {
|
||||||
|
|
||||||
struct Target {
|
struct Target {
|
||||||
|
|
@ -44,3 +50,17 @@ public:
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%template(Halide_Target) Halide::Internal::GeneratorParam<Halide::Target>;
|
%template(Halide_Target) Halide::Internal::GeneratorParam<Halide::Target>;
|
||||||
|
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
using Int = int;
|
||||||
|
using IntRef = int&;
|
||||||
|
using IntPtrRef = int*&;
|
||||||
|
using IntRValueRef = int&&;
|
||||||
|
using IntArray = int[];
|
||||||
|
|
||||||
|
using HalideTargetPtr1 = Halide::Target*;
|
||||||
|
namespace Halide {
|
||||||
|
using HalideTargetPtr2 = Target*;
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
|
||||||
|
|
@ -2850,9 +2850,10 @@ c_declaration : c_decl {
|
||||||
Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line, "Lambda expressions and closures are not fully supported yet.\n");
|
Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line, "Lambda expressions and closures are not fully supported yet.\n");
|
||||||
SWIG_WARN_NODE_END($$);
|
SWIG_WARN_NODE_END($$);
|
||||||
}
|
}
|
||||||
| USING idcolon EQUAL idcolon {
|
| USING idcolon EQUAL type typemap_parameter_declarator SEMI {
|
||||||
$$ = new_node("using");
|
$$ = new_node("using");
|
||||||
Setattr($$,"name",$2);
|
Setattr($$,"name",$2);
|
||||||
|
SwigType_push($4,$5.type);
|
||||||
Setattr($$,"uname",$4);
|
Setattr($$,"uname",$4);
|
||||||
add_symbols($$);
|
add_symbols($$);
|
||||||
SWIG_WARN_NODE_BEGIN($$);
|
SWIG_WARN_NODE_BEGIN($$);
|
||||||
|
|
@ -2861,15 +2862,17 @@ c_declaration : c_decl {
|
||||||
|
|
||||||
$$ = 0; /* TODO - ignored for now */
|
$$ = 0; /* TODO - ignored for now */
|
||||||
}
|
}
|
||||||
| TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL identifier {
|
| TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL type typemap_parameter_declarator SEMI {
|
||||||
skip_decl();
|
|
||||||
$$ = new_node("using");
|
$$ = new_node("using");
|
||||||
Setattr($$,"uname",$8);
|
|
||||||
Setattr($$,"name",$6);
|
Setattr($$,"name",$6);
|
||||||
|
SwigType_push($8,$9.type);
|
||||||
|
Setattr($$,"uname",$8);
|
||||||
add_symbols($$);
|
add_symbols($$);
|
||||||
SWIG_WARN_NODE_BEGIN($$);
|
SWIG_WARN_NODE_BEGIN($$);
|
||||||
Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line, "The 'using' keyword in template aliasing is not fully supported yet.\n");
|
Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line, "The 'using' keyword in template aliasing is not fully supported yet.\n");
|
||||||
SWIG_WARN_NODE_END($$);
|
SWIG_WARN_NODE_END($$);
|
||||||
|
|
||||||
|
$$ = 0; /* TODO - ignored for now */
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue