Added constexpr keywords and CONSTEXPR terminal to Swig parser.

Added cpp0x_constexpr.i testcase.
Fixed compilation bug of cpp0x_template_double_brackets.i testcase.
Removed obsolete cpp0x_template_double_brackets_broken.



git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-matevz@11322 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Matevz Jekovec 2009-06-26 21:48:48 +00:00
commit d8012716ed
6 changed files with 22 additions and 37 deletions

View file

@ -93,6 +93,7 @@ C_TEST_BROKEN += \
# C++ test cases. (Can be run individually using make testcase.cpptest.) # C++ test cases. (Can be run individually using make testcase.cpptest.)
CPP_TEST_CASES += \ CPP_TEST_CASES += \
$(CPP0X_TEST_CASES) \
abstract_access \ abstract_access \
abstract_inherit \ abstract_inherit \
abstract_inherit_ok \ abstract_inherit_ok \
@ -395,16 +396,15 @@ CPP_TEST_CASES += \
virtual_destructor \ virtual_destructor \
virtual_poly \ virtual_poly \
voidtest \ voidtest \
wrapmacro \ wrapmacro
$(CPP0X_TEST_CASES)
# C++0x test cases. # C++0x test cases.
CPP0X_TEST_CASES = \ CPP0X_TEST_CASES = \
cpp0x_template_double_brackets cpp0x_template_double_brackets
# cpp0x_constexpr # not supported by any compilers yet
# Broken C++0x test cases. # Broken C++0x test cases.
CPP0X_TEST_BROKEN = \ CPP0X_TEST_BROKEN =
cpp0x_template_double_brackets_broken
# #
# Put all the heavy STD/STL cases here, where they can be skipped if needed # Put all the heavy STD/STL cases here, where they can be skipped if needed
@ -497,7 +497,7 @@ ALL_CLEAN = $(CPP_TEST_CASES:=.clean) \
####################################################################### #######################################################################
# The following applies for all module languages # The following applies for all module languages
####################################################################### #######################################################################
all: $(BROKEN_TEST_CASES) $(NOT_BROKEN_TEST_CASES) all: $(NOT_BROKEN_TEST_CASES) $(BROKEN_TEST_CASES)
check: $(NOT_BROKEN_TEST_CASES) check: $(NOT_BROKEN_TEST_CASES)

View file

@ -0,0 +1,8 @@
%module foo
%inline %{
class TestClass {
constexpr int func() { return 10; }
};
%}

View file

@ -1,9 +1,8 @@
%module foo %module foo
%inline %{
#include <map> #include <map>
std::map<int,std::map<int, double>> m; std::map<int,std::map<int, double>> m;
std::map<int,std::map<int, double> > n; std::map< int,std::map<int, double> > n;
std::map< std::map<(6>>1), double>, double> o;
//std::map< std::map<6>>1, double>, double> p; // fails as it should
class ABC { class ABC {
public: public:
@ -18,9 +17,10 @@ public:
int a; int a;
template<typename U> template<typename U>
int operator>>(ABC &, U); U operator>>(ABC &);
template<typename U> template<typename U>
int operator<<(ABC &, U); U operator<<(ABC &);
}; };
%}

View file

@ -1,26 +0,0 @@
%module foo
#include <map>
std::map<int,std::map<int, double>> m;
std::map<int,std::map<int, double> > n;
std::map< std::map<(6>>1), double>, double> o;
std::map< std::map<6>>1, double>, double> p; // fails as it should
class ABC {
public:
int a;
int operator>>(ABC &);
int operator<<(ABC &);
};
template<class T>
class ABC2 {
public:
int a;
template<typename U>
int operator>>(ABC &, U);
template<typename U>
int operator<<(ABC &, U);
};

View file

@ -630,6 +630,8 @@ int yylex(void) {
return (PROTECTED); return (PROTECTED);
if (strcmp(yytext, "friend") == 0) if (strcmp(yytext, "friend") == 0)
return (FRIEND); return (FRIEND);
if (strcmp(yytext, "constexpr") == 0)
return (CONSTEXPR);
if (strcmp(yytext, "virtual") == 0) if (strcmp(yytext, "virtual") == 0)
return (VIRTUAL); return (VIRTUAL);
if (strcmp(yytext, "operator") == 0) { if (strcmp(yytext, "operator") == 0) {

View file

@ -1492,7 +1492,7 @@ static void tag_nodes(Node *n, const_String_or_char_ptr attrname, DOH *value) {
%token ILLEGAL CONSTANT %token ILLEGAL CONSTANT
%token NAME RENAME NAMEWARN EXTEND PRAGMA FEATURE VARARGS %token NAME RENAME NAMEWARN EXTEND PRAGMA FEATURE VARARGS
%token ENUM %token ENUM
%token CLASS TYPENAME PRIVATE PUBLIC PROTECTED COLON STATIC VIRTUAL FRIEND THROW CATCH EXPLICIT %token CLASS TYPENAME PRIVATE PUBLIC PROTECTED COLON STATIC VIRTUAL FRIEND THROW CATCH EXPLICIT CONSTEXPR
%token USING %token USING
%token <node> NAMESPACE %token <node> NAMESPACE
%token NATIVE INLINE %token NATIVE INLINE
@ -4490,6 +4490,7 @@ storage_class : EXTERN { $$ = "extern"; }
| VIRTUAL { $$ = "virtual"; } | VIRTUAL { $$ = "virtual"; }
| FRIEND { $$ = "friend"; } | FRIEND { $$ = "friend"; }
| EXPLICIT { $$ = "explicit"; } | EXPLICIT { $$ = "explicit"; }
| CONSTEXPR { $$ = "constexpr"; }
| empty { $$ = 0; } | empty { $$ = 0; }
; ;