commit
8c5c14b9ad
36 changed files with 240 additions and 228 deletions
|
|
@ -16,6 +16,9 @@ Version 4.1.0 (in progress)
|
||||||
2022-07-26: olly
|
2022-07-26: olly
|
||||||
Fix incorrect operator precedence in preprocessor expressions.
|
Fix incorrect operator precedence in preprocessor expressions.
|
||||||
|
|
||||||
|
2022-07-25: olly
|
||||||
|
Support for C++14 binary integer literals in preprocessor expressions.
|
||||||
|
|
||||||
2022-07-20: wsfulton
|
2022-07-20: wsfulton
|
||||||
[C#, Java] Ensure the order of interfaces generated in proxy interfaces for the
|
[C#, Java] Ensure the order of interfaces generated in proxy interfaces for the
|
||||||
%interface family of macros is the same as that parsed from the bases in C++.
|
%interface family of macros is the same as that parsed from the bases in C++.
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ CFFI = @CFFIBIN@
|
||||||
SCRIPTSUFFIX = _runme.lisp
|
SCRIPTSUFFIX = _runme.lisp
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,10 @@ CPP_TEST_BROKEN += \
|
||||||
template_default_pointer \
|
template_default_pointer \
|
||||||
template_private_assignment \
|
template_private_assignment \
|
||||||
template_expr \
|
template_expr \
|
||||||
$(CPP11_TEST_BROKEN)
|
$(CPP11_TEST_BROKEN) \
|
||||||
|
$(CPP14_TEST_BROKEN) \
|
||||||
|
$(CPP17_TEST_BROKEN) \
|
||||||
|
$(CPP20_TEST_BROKEN)
|
||||||
|
|
||||||
|
|
||||||
# Broken C test cases. (Can be run individually using: make testcase.ctest)
|
# Broken C test cases. (Can be run individually using: make testcase.ctest)
|
||||||
|
|
@ -165,11 +168,6 @@ CPP_TEST_CASES += \
|
||||||
cpp_parameters \
|
cpp_parameters \
|
||||||
cpp_static \
|
cpp_static \
|
||||||
cpp_typedef \
|
cpp_typedef \
|
||||||
cpp14_binary_integer_literals \
|
|
||||||
cpp17_hex_floating_literals \
|
|
||||||
cpp17_nested_namespaces \
|
|
||||||
cpp17_nspace_nested_namespaces \
|
|
||||||
cpp17_u8_char_literals \
|
|
||||||
curiously_recurring_template_pattern \
|
curiously_recurring_template_pattern \
|
||||||
default_args \
|
default_args \
|
||||||
default_arg_expressions \
|
default_arg_expressions \
|
||||||
|
|
@ -632,6 +630,29 @@ CPP11_TEST_BROKEN = \
|
||||||
# cpp11_variadic_templates \ # Broken for some languages (such as Java)
|
# cpp11_variadic_templates \ # Broken for some languages (such as Java)
|
||||||
# cpp11_reference_wrapper \ # No typemaps
|
# cpp11_reference_wrapper \ # No typemaps
|
||||||
|
|
||||||
|
# C++14 test cases.
|
||||||
|
CPP14_TEST_CASES += \
|
||||||
|
cpp14_binary_integer_literals \
|
||||||
|
|
||||||
|
# Broken C++14 test cases.
|
||||||
|
CPP14_TEST_BROKEN = \
|
||||||
|
|
||||||
|
# C++17 test cases.
|
||||||
|
CPP17_TEST_CASES += \
|
||||||
|
cpp17_hex_floating_literals \
|
||||||
|
cpp17_nested_namespaces \
|
||||||
|
cpp17_nspace_nested_namespaces \
|
||||||
|
cpp17_u8_char_literals \
|
||||||
|
|
||||||
|
# Broken C++17 test cases.
|
||||||
|
CPP17_TEST_BROKEN = \
|
||||||
|
|
||||||
|
# C++20 test cases.
|
||||||
|
CPP20_TEST_CASES += \
|
||||||
|
|
||||||
|
# Broken C++20 test cases.
|
||||||
|
CPP20_TEST_BROKEN = \
|
||||||
|
|
||||||
# Doxygen support test cases: can only be used with languages supporting
|
# Doxygen support test cases: can only be used with languages supporting
|
||||||
# Doxygen comment translation (currently Python and Java) and only if not
|
# Doxygen comment translation (currently Python and Java) and only if not
|
||||||
# disabled by configure via SKIP_DOXYGEN_TEST_CASES.
|
# disabled by configure via SKIP_DOXYGEN_TEST_CASES.
|
||||||
|
|
@ -699,6 +720,18 @@ ifeq (1,$(HAVE_CXX11))
|
||||||
CPP_TEST_CASES += $(CPP11_TEST_CASES)
|
CPP_TEST_CASES += $(CPP11_TEST_CASES)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq (1,$(HAVE_CXX14))
|
||||||
|
CPP_TEST_CASES += $(CPP14_TEST_CASES)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (1,$(HAVE_CXX17))
|
||||||
|
CPP_TEST_CASES += $(CPP17_TEST_CASES)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (1,$(HAVE_CXX20))
|
||||||
|
CPP_TEST_CASES += $(CPP20_TEST_CASES)
|
||||||
|
endif
|
||||||
|
|
||||||
# C test cases. (Can be run individually using: make testcase.ctest)
|
# C test cases. (Can be run individually using: make testcase.ctest)
|
||||||
C_TEST_CASES += \
|
C_TEST_CASES += \
|
||||||
arrays \
|
arrays \
|
||||||
|
|
@ -784,6 +817,9 @@ command_line_define.ctest: SWIGOPT += -DFOO
|
||||||
C_TEST_CASES := $(filter-out $(FAILING_C_TESTS),$(C_TEST_CASES))
|
C_TEST_CASES := $(filter-out $(FAILING_C_TESTS),$(C_TEST_CASES))
|
||||||
CPP_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP_TEST_CASES))
|
CPP_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP_TEST_CASES))
|
||||||
CPP11_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP11_TEST_CASES))
|
CPP11_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP11_TEST_CASES))
|
||||||
|
CPP14_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP14_TEST_CASES))
|
||||||
|
CPP17_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP17_TEST_CASES))
|
||||||
|
CPP20_TEST_CASES := $(filter-out $(FAILING_CPP_TESTS),$(CPP20_TEST_CASES))
|
||||||
MULTI_CPP_TEST_CASES := $(filter-out $(FAILING_MULTI_CPP_TESTS),$(MULTI_CPP_TEST_CASES))
|
MULTI_CPP_TEST_CASES := $(filter-out $(FAILING_MULTI_CPP_TESTS),$(MULTI_CPP_TEST_CASES))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -797,6 +833,9 @@ BROKEN_TEST_CASES = $(CPP_TEST_BROKEN:=.cpptest) \
|
||||||
|
|
||||||
ALL_CLEAN = $(CPP_TEST_CASES:=.clean) \
|
ALL_CLEAN = $(CPP_TEST_CASES:=.clean) \
|
||||||
$(CPP11_TEST_CASES:=.clean) \
|
$(CPP11_TEST_CASES:=.clean) \
|
||||||
|
$(CPP14_TEST_CASES:=.clean) \
|
||||||
|
$(CPP17_TEST_CASES:=.clean) \
|
||||||
|
$(CPP20_TEST_CASES:=.clean) \
|
||||||
$(C_TEST_CASES:=.clean) \
|
$(C_TEST_CASES:=.clean) \
|
||||||
$(MULTI_CPP_TEST_CASES:=.clean) \
|
$(MULTI_CPP_TEST_CASES:=.clean) \
|
||||||
$(CPP_TEST_BROKEN:=.clean) \
|
$(CPP_TEST_BROKEN:=.clean) \
|
||||||
|
|
@ -825,6 +864,12 @@ check-cpp: $(CPP_TEST_CASES:=.cpptest)
|
||||||
|
|
||||||
check-cpp11: $(CPP11_TEST_CASES:=.cpptest)
|
check-cpp11: $(CPP11_TEST_CASES:=.cpptest)
|
||||||
|
|
||||||
|
check-cpp14: $(CPP14_TEST_CASES:=.cpptest)
|
||||||
|
|
||||||
|
check-cpp17: $(CPP17_TEST_CASES:=.cpptest)
|
||||||
|
|
||||||
|
check-cpp20: $(CPP20_TEST_CASES:=.cpptest)
|
||||||
|
|
||||||
check-multicpp: $(MULTI_CPP_TEST_CASES:=.multicpptest)
|
check-multicpp: $(MULTI_CPP_TEST_CASES:=.multicpptest)
|
||||||
|
|
||||||
ifdef HAS_DOXYGEN
|
ifdef HAS_DOXYGEN
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
/* This module tests whether SWIG correctly parses:
|
/* This module tests whether SWIG correctly parses:
|
||||||
- ordinary strings (char_t)
|
- ordinary strings (char)
|
||||||
- L wide strings (wchar_t)
|
- L wide strings (wchar_t)
|
||||||
- u8 unicode8 strings (char_t)
|
- u8 unicode8 strings (char / char8_t since C++20)
|
||||||
- u unicode16 strings (char16_t)
|
- u unicode16 strings (char16_t)
|
||||||
- U unicode32 strings (char32_t)
|
- U unicode32 strings (char32_t)
|
||||||
|
|
||||||
|
|
@ -49,7 +49,8 @@ struct URStruct {
|
||||||
|
|
||||||
// New string literals
|
// New string literals
|
||||||
wstring aa = L"Wide string";
|
wstring aa = L"Wide string";
|
||||||
const char *bb = u8"UTF-8 string";
|
// u8"" is const char8_t[N] in C++20; const char[N] from C++11 until then.
|
||||||
|
const char *bb = reinterpret_cast<const char*>(u8"UTF-8 string");
|
||||||
const char16_t *cc = u"UTF-16 string";
|
const char16_t *cc = u"UTF-16 string";
|
||||||
const char32_t *dd = U"UTF-32 string";
|
const char32_t *dd = U"UTF-32 string";
|
||||||
// New char literals
|
// New char literals
|
||||||
|
|
@ -62,7 +63,7 @@ char32_t char32_t_char = U'b';
|
||||||
const char *xx = ")I'm an \"ascii\" \\ string.";
|
const char *xx = ")I'm an \"ascii\" \\ string.";
|
||||||
const char *ee = R"XXX()I'm an "ascii" \ string.)XXX";
|
const char *ee = R"XXX()I'm an "ascii" \ string.)XXX";
|
||||||
wstring ff = LR"XXX(I'm a "raw wide" \ string.)XXX";
|
wstring ff = LR"XXX(I'm a "raw wide" \ string.)XXX";
|
||||||
const char *gg = u8R"XXX(I'm a "raw UTF-8" \ string.)XXX";
|
const char *gg = reinterpret_cast<const char*>(u8R"XXX(I'm a "raw UTF-8" \ string.)XXX");
|
||||||
const char16_t *hh = uR"XXX(I'm a "raw UTF-16" \ string.)XXX";
|
const char16_t *hh = uR"XXX(I'm a "raw UTF-16" \ string.)XXX";
|
||||||
const char32_t *ii = UR"XXX(I'm a "raw UTF-32" \ string.)XXX";
|
const char32_t *ii = UR"XXX(I'm a "raw UTF-32" \ string.)XXX";
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -55,10 +55,10 @@ std::result_of< fn_ptr(double) >::type test_result_alternative1(double(*fun)(dou
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
void cpp_testing() {
|
void cpp_testing() {
|
||||||
std::cout << "result: " << test_result_impl(square, 3) << std::endl;
|
std::cout << "result: " << test_result_impl(square, 3.0) << std::endl;
|
||||||
std::cout << "result: " << test_result_impl<double(*)(double), double>(square, 4) << std::endl;
|
std::cout << "result: " << test_result_impl<double(*)(double), double>(square, 4.0) << std::endl;
|
||||||
std::cout << "result: " << test_result_impl< fn_ptr, double >(square, 5) << std::endl;
|
std::cout << "result: " << test_result_impl< fn_ptr, double >(square, 5.0) << std::endl;
|
||||||
std::cout << "result: " << test_result_alternative1(square, 6) << std::endl;
|
std::cout << "result: " << test_result_alternative1(square, 6.0) << std::endl;
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,9 @@ OutputType operator "" _mySuffixFloat(long double) { return OutputType(30); }
|
||||||
|
|
||||||
// Cooked string literals
|
// Cooked string literals
|
||||||
OutputType operator "" _mySuffix1(const char * string_values, size_t num_chars) { return OutputType(100); }
|
OutputType operator "" _mySuffix1(const char * string_values, size_t num_chars) { return OutputType(100); }
|
||||||
|
#ifdef __cpp_lib_char8_t // For C++20
|
||||||
|
OutputType operator "" _mySuffix1(const char8_t * string_values, size_t num_chars) { return OutputType(100); }
|
||||||
|
#endif
|
||||||
OutputType operator "" _mySuffix2(const wchar_t * string_values, size_t num_chars) { return OutputType(200); }
|
OutputType operator "" _mySuffix2(const wchar_t * string_values, size_t num_chars) { return OutputType(200); }
|
||||||
OutputType operator "" _mySuffix3(const char16_t * string_values, size_t num_chars) { return OutputType(300); }
|
OutputType operator "" _mySuffix3(const char16_t * string_values, size_t num_chars) { return OutputType(300); }
|
||||||
OutputType operator "" _mySuffix4(const char32_t * string_values, size_t num_chars) { return OutputType(400); }
|
OutputType operator "" _mySuffix4(const char32_t * string_values, size_t num_chars) { return OutputType(400); }
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,17 @@
|
||||||
%module cpp14_binary_integer_literals
|
%module cpp14_binary_integer_literals
|
||||||
|
|
||||||
// Tests are designed so that code compiles with C++98 compilers
|
#if 0b100 < 4
|
||||||
|
# error binary constant in preprocessor expression failed
|
||||||
%{
|
|
||||||
#if __cplusplus >= 201402L
|
|
||||||
#define CPP14 1
|
|
||||||
#endif
|
#endif
|
||||||
%}
|
|
||||||
|
|
||||||
|
%inline %{
|
||||||
int b1 = 0b1;
|
int b1 = 0b1;
|
||||||
int b2 = 0b10;
|
int b2 = 0b10;
|
||||||
long b3 = 0b11l;
|
long b3 = 0b11l;
|
||||||
unsigned long b4 = 0b100ul;
|
unsigned long b4 = 0b100ul;
|
||||||
unsigned long b5 = 0B101UL;
|
unsigned long b5 = 0B101UL;
|
||||||
|
#define b6 0b110
|
||||||
%{
|
const int b7 = 0b111;
|
||||||
#if defined(CPP14)
|
|
||||||
int b1 = 0b1;
|
|
||||||
int b2 = 0b10;
|
|
||||||
long b3 = 0b11l;
|
|
||||||
unsigned long b4 = 0b100ul;
|
|
||||||
unsigned long b5 = 0B101UL;
|
|
||||||
#else
|
|
||||||
int b1 = 1;
|
|
||||||
int b2 = 2;
|
|
||||||
long b3 = 3;
|
|
||||||
unsigned long b4 = 4;
|
|
||||||
unsigned long b5 = 5;
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
%constant int b8 = 0b1000;
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,6 @@
|
||||||
%module cpp17_hex_floating_literals
|
%module cpp17_hex_floating_literals
|
||||||
|
|
||||||
// Tests are designed so that code compiles with C++98 compilers
|
%inline %{
|
||||||
|
|
||||||
%{
|
|
||||||
#if __cplusplus >= 201703L
|
|
||||||
#define CPP17 1
|
|
||||||
#endif
|
|
||||||
%}
|
|
||||||
|
|
||||||
double f1 = 0x.0p1;
|
double f1 = 0x.0p1;
|
||||||
double f2 = 0x0.p1;
|
double f2 = 0x0.p1;
|
||||||
double f3 = 0x0.0p-1;
|
double f3 = 0x0.0p-1;
|
||||||
|
|
@ -17,27 +10,4 @@ double f6 = 0x0.10P+10;
|
||||||
double f7 = 0xb2F.p2;
|
double f7 = 0xb2F.p2;
|
||||||
float f8 = 0x1234AP1F;
|
float f8 = 0x1234AP1F;
|
||||||
float f9 = 0x45A1.D1A2p+10f;
|
float f9 = 0x45A1.D1A2p+10f;
|
||||||
|
|
||||||
%{
|
|
||||||
#if defined(CPP17)
|
|
||||||
double f1 = 0x.0p1;
|
|
||||||
double f2 = 0x0.p1;
|
|
||||||
double f3 = 0x0.0p-1;
|
|
||||||
double f4 = 0xf.p-1;
|
|
||||||
double f5 = 0xA.0p1;
|
|
||||||
double f6 = 0x0.10P+10;
|
|
||||||
double f7 = 0xb2F.p2;
|
|
||||||
float f8 = 0x1234AP1F;
|
|
||||||
float f9 = 0x45A1.D1A2p+10f;
|
|
||||||
#else
|
|
||||||
double f1 = 0.;
|
|
||||||
double f2 = 0.;
|
|
||||||
double f3 = 0.;
|
|
||||||
double f4 = 7.5;
|
|
||||||
double f5 = 20.;
|
|
||||||
double f6 = 64.;
|
|
||||||
double f7 = 11452.;
|
|
||||||
float f8 = 149140.f;
|
|
||||||
float f9 = 18253638.f;
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,5 @@
|
||||||
%module cpp17_nested_namespaces
|
%module cpp17_nested_namespaces
|
||||||
// Tests c++17 style nested namespaces
|
// Tests c++17 style nested namespaces
|
||||||
// Tests are designed so that code compiles with C++98 compilers
|
|
||||||
|
|
||||||
#define CPP17 1
|
|
||||||
%{
|
|
||||||
#if __cplusplus >= 201703L
|
|
||||||
#define CPP17 1
|
|
||||||
#endif
|
|
||||||
%}
|
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
// Tests with namespaces already defined using C++98 style (non-nested) namespaces
|
// Tests with namespaces already defined using C++98 style (non-nested) namespaces
|
||||||
|
|
@ -21,20 +13,10 @@ namespace A1 {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A1::B1 {
|
namespace A1::B1 {
|
||||||
#else
|
|
||||||
namespace A1 {
|
|
||||||
namespace B1 {
|
|
||||||
#endif
|
|
||||||
A1Struct createA1Struct() { return ::A1::A1Struct(); }
|
A1Struct createA1Struct() { return ::A1::A1Struct(); }
|
||||||
B1Struct createB1Struct() { return ::A1::B1::B1Struct(); }
|
B1Struct createB1Struct() { return ::A1::B1::B1Struct(); }
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace A1 {
|
namespace A1 {
|
||||||
namespace B1 {
|
namespace B1 {
|
||||||
|
|
@ -46,154 +28,54 @@ namespace A1 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A1::B1::C1 {
|
namespace A1::B1::C1 {
|
||||||
#else
|
|
||||||
namespace A1 {
|
|
||||||
namespace B1 {
|
|
||||||
namespace C1 {
|
|
||||||
#endif
|
|
||||||
C1Struct createC1Struct() { return ::A1::B1::C1::C1Struct(); }
|
C1Struct createC1Struct() { return ::A1::B1::C1::C1Struct(); }
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
// Tests with namespaces already defined using C++17 style (nested) namespaces
|
// Tests with namespaces already defined using C++17 style (nested) namespaces
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A2::B2 {
|
namespace A2::B2 {
|
||||||
#else
|
|
||||||
namespace A2 {
|
|
||||||
namespace B2 {
|
|
||||||
#endif
|
|
||||||
struct B2Struct {
|
struct B2Struct {
|
||||||
void B2Method() {}
|
void B2Method() {}
|
||||||
};
|
};
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A2::B2 {
|
namespace A2::B2 {
|
||||||
#else
|
|
||||||
namespace A2 {
|
|
||||||
namespace B2 {
|
|
||||||
#endif
|
|
||||||
B2Struct createB2Struct() { return ::A2::B2::B2Struct(); }
|
B2Struct createB2Struct() { return ::A2::B2::B2Struct(); }
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A2::B2::C2 {
|
namespace A2::B2::C2 {
|
||||||
#else
|
|
||||||
namespace A2 {
|
|
||||||
namespace B2 {
|
|
||||||
namespace C2 {
|
|
||||||
#endif
|
|
||||||
struct C2Struct {
|
struct C2Struct {
|
||||||
void C2Method() {}
|
void C2Method() {}
|
||||||
};
|
};
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A2::B2::C2 {
|
namespace A2::B2::C2 {
|
||||||
#else
|
|
||||||
namespace A2 {
|
|
||||||
namespace B2 {
|
|
||||||
namespace C2 {
|
|
||||||
#endif
|
|
||||||
C2Struct createC2Struct() { return ::A2::B2::C2::C2Struct(); }
|
C2Struct createC2Struct() { return ::A2::B2::C2::C2Struct(); }
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
// Tests with namespaces already defined using C++17 style (nested) namespaces to 3 levels
|
// Tests with namespaces already defined using C++17 style (nested) namespaces to 3 levels
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A3::B3::C3 {
|
namespace A3::B3::C3 {
|
||||||
#else
|
|
||||||
namespace A3 {
|
|
||||||
namespace B3 {
|
|
||||||
namespace C3 {
|
|
||||||
#endif
|
|
||||||
struct C3Struct {
|
struct C3Struct {
|
||||||
void C3Method() {}
|
void C3Method() {}
|
||||||
};
|
};
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A3::B3::C3 {
|
namespace A3::B3::C3 {
|
||||||
#else
|
|
||||||
namespace A3 {
|
|
||||||
namespace B3 {
|
|
||||||
namespace C3 {
|
|
||||||
#endif
|
|
||||||
C3Struct createC3Struct() { return ::A3::B3::C3::C3Struct(); }
|
C3Struct createC3Struct() { return ::A3::B3::C3::C3Struct(); }
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A3::B3 {
|
namespace A3::B3 {
|
||||||
#else
|
|
||||||
namespace A3 {
|
|
||||||
namespace B3 {
|
|
||||||
#endif
|
|
||||||
struct B3Struct {
|
struct B3Struct {
|
||||||
void B3Method() {}
|
void B3Method() {}
|
||||||
};
|
};
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CPP17)
|
|
||||||
namespace A3::B3 {
|
namespace A3::B3 {
|
||||||
#else
|
|
||||||
namespace A3 {
|
|
||||||
namespace B3 {
|
|
||||||
#endif
|
|
||||||
B3Struct createB3Struct() { return ::A3::B3::B3Struct(); }
|
B3Struct createB3Struct() { return ::A3::B3::B3Struct(); }
|
||||||
#if !defined(CPP17)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,9 @@
|
||||||
%module cpp17_u8_char_literals
|
%module cpp17_u8_char_literals
|
||||||
|
|
||||||
// Tests are designed so that code compiles with C++98 compilers
|
// UTF-8 character literals are type `char` in C++17 but `char8_t` in C++20,
|
||||||
|
// but the latter can be assigned to `char`.
|
||||||
%{
|
%inline %{
|
||||||
#if __cplusplus >= 201703L
|
|
||||||
#define CPP17 1
|
|
||||||
#endif
|
|
||||||
%}
|
|
||||||
|
|
||||||
// UTF-8 character literals will (apparently) have type char8_t in C++20.
|
|
||||||
char a = u8'a';
|
char a = u8'a';
|
||||||
char u = u8'u';
|
char u = u8'u';
|
||||||
char u8 = u8'8';
|
char u8 = u8'8';
|
||||||
|
|
||||||
%{
|
|
||||||
#if defined(CPP17)
|
|
||||||
char a = u8'a';
|
|
||||||
char u = u8'u';
|
|
||||||
char u8 = u8'8';
|
|
||||||
#else
|
|
||||||
char a = 'a';
|
|
||||||
char u = 'u';
|
|
||||||
char u8 = '8';
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ public:
|
||||||
// Test that the correct types are used for typedef struct declarations
|
// Test that the correct types are used for typedef struct declarations
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int something;
|
int something;
|
||||||
void m() {}
|
|
||||||
} UnnamedStruct;
|
} UnnamedStruct;
|
||||||
|
|
||||||
typedef struct NamedStruct {
|
typedef struct NamedStruct {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@ CSHARPCILINTERPRETER_FLAGS = @CSHARPCILINTERPRETER_FLAGS@
|
||||||
CSHARPCONVERTPATH = @top_srcdir@/@CSHARPCONVERTPATH@
|
CSHARPCONVERTPATH = @top_srcdir@/@CSHARPCONVERTPATH@
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = ../@top_srcdir@
|
top_srcdir = ../@top_srcdir@
|
||||||
top_builddir = ../@top_builddir@
|
top_builddir = ../@top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,9 @@
|
||||||
LANGUAGE = d
|
LANGUAGE = d
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = ../@top_srcdir@
|
top_srcdir = ../@top_srcdir@
|
||||||
top_builddir = ../@top_builddir@
|
top_builddir = ../@top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,9 @@ LANGUAGE = errors
|
||||||
ERROR_EXT = newerr
|
ERROR_EXT = newerr
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,9 @@ SCRIPTSUFFIX = _runme.go
|
||||||
SO = @SO@
|
SO = @SO@
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@ VARIANT =
|
||||||
SCRIPTSUFFIX = _runme.scm
|
SCRIPTSUFFIX = _runme.scm
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@ SCRIPTSUFFIX = _runme.java
|
||||||
SKIP_DOXYGEN_TEST_CASES = @JAVA_SKIP_DOXYGEN_TEST_CASES@
|
SKIP_DOXYGEN_TEST_CASES = @JAVA_SKIP_DOXYGEN_TEST_CASES@
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = ../@top_srcdir@
|
top_srcdir = ../@top_srcdir@
|
||||||
top_builddir = ../@top_builddir@
|
top_builddir = ../@top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ OBJEXT = @OBJEXT@
|
||||||
SO = @SO@
|
SO = @SO@
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ LUA = @LUABIN@
|
||||||
SCRIPTSUFFIX = _runme.lua
|
SCRIPTSUFFIX = _runme.lua
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ MZSCHEME = mzscheme
|
||||||
SCRIPTSUFFIX = _runme.scm
|
SCRIPTSUFFIX = _runme.scm
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -133,8 +133,13 @@ struct Outer {
|
||||||
Integer x;
|
Integer x;
|
||||||
} InnerClass4Typedef;
|
} InnerClass4Typedef;
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef SWIG
|
||||||
int Outer::foo(){ return 1; } // should correctly ignore qualification here (#508)
|
// SWIG should ignore the redundant qualification here (#508)...
|
||||||
|
int Outer::foo(){ return 1; }
|
||||||
|
#else
|
||||||
|
// ..but that redundant qualification is actually invalid and many compilers
|
||||||
|
// now reject it with an error, so feed a valid version to the compiler.
|
||||||
|
int foo(){ return 1; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ VARIANT = _static
|
||||||
SCRIPTSUFFIX = _runme.ml
|
SCRIPTSUFFIX = _runme.ml
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ SCRIPTSUFFIX = _runme.m
|
||||||
PCHSUPPORT = @PCHSUPPORT@
|
PCHSUPPORT = @PCHSUPPORT@
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ SCRIPTSUFFIX = _runme.pl
|
||||||
TEST_RUNNER = $(srcdir)/run-perl-test.pl
|
TEST_RUNNER = $(srcdir)/run-perl-test.pl
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ LANGUAGE = php
|
||||||
SCRIPTSUFFIX = _runme.php
|
SCRIPTSUFFIX = _runme.php
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,9 @@ PYCODESTYLE = @PYCODESTYLE@
|
||||||
PYCODESTYLE_FLAGS = --ignore=E252,E30,E402,E501,E731,E741,W291,W391
|
PYCODESTYLE_FLAGS = --ignore=E252,E30,E402,E501,E731,E741,W291,W391
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -14,3 +14,12 @@ if cvar.b4 != 4:
|
||||||
|
|
||||||
if cvar.b5 != 5:
|
if cvar.b5 != 5:
|
||||||
raise RuntimeError
|
raise RuntimeError
|
||||||
|
|
||||||
|
if b6 != 6:
|
||||||
|
raise RuntimeError
|
||||||
|
|
||||||
|
if b7 != 7:
|
||||||
|
raise RuntimeError
|
||||||
|
|
||||||
|
if b8 != 8:
|
||||||
|
raise RuntimeError
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@ R_OPT = --quiet --no-save --no-restore
|
||||||
RUNR = R CMD BATCH $(R_OPT) '--args $(SCRIPTDIR)'
|
RUNR = R CMD BATCH $(R_OPT) '--args $(SCRIPTDIR)'
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ RUBY = @RUBY@
|
||||||
SCRIPTSUFFIX = _runme.rb
|
SCRIPTSUFFIX = _runme.rb
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ SCILAB_OPT = @SCILABOPT@
|
||||||
SCRIPTSUFFIX = _runme.sci
|
SCRIPTSUFFIX = _runme.sci
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = ../@top_srcdir@
|
top_srcdir = ../@top_srcdir@
|
||||||
top_builddir = ../@top_builddir@
|
top_builddir = ../@top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ TCLSH = tclsh
|
||||||
SCRIPTSUFFIX = _runme.tcl
|
SCRIPTSUFFIX = _runme.tcl
|
||||||
|
|
||||||
HAVE_CXX11 = @HAVE_CXX11@
|
HAVE_CXX11 = @HAVE_CXX11@
|
||||||
|
HAVE_CXX14 = @HAVE_CXX14@
|
||||||
|
HAVE_CXX17 = @HAVE_CXX17@
|
||||||
|
HAVE_CXX20 = @HAVE_CXX20@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,13 @@ template<class T>
|
||||||
class Foo {
|
class Foo {
|
||||||
T y;
|
T y;
|
||||||
public:
|
public:
|
||||||
|
#ifdef SWIG
|
||||||
Foo<T>(T x) : y(x) { }
|
Foo<T>(T x) : y(x) { }
|
||||||
|
#else
|
||||||
|
// Modern compilers reject this, so feed the compiler the corrected
|
||||||
|
// version.
|
||||||
|
Foo(T x) : y(x) { }
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ class C;
|
||||||
%{
|
%{
|
||||||
template<typename T> class TemplateClass {
|
template<typename T> class TemplateClass {
|
||||||
public:
|
public:
|
||||||
TemplateClass<T>(T a) {}
|
TemplateClass(T a) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct B
|
struct B
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,12 @@ int Preprocessor_expr(DOH *s, int *error) {
|
||||||
if ((token == SWIG_TOKEN_INT) || (token == SWIG_TOKEN_UINT) || (token == SWIG_TOKEN_LONG) || (token == SWIG_TOKEN_ULONG)) {
|
if ((token == SWIG_TOKEN_INT) || (token == SWIG_TOKEN_UINT) || (token == SWIG_TOKEN_LONG) || (token == SWIG_TOKEN_ULONG)) {
|
||||||
/* A number. Reduce EXPR_TOP to an EXPR_VALUE */
|
/* A number. Reduce EXPR_TOP to an EXPR_VALUE */
|
||||||
char *c = Char(Scanner_text(scan));
|
char *c = Char(Scanner_text(scan));
|
||||||
|
if (c[0] == '0' && (c[1] == 'b' || c[1] == 'B')) {
|
||||||
|
// strtol() doesn't handle binary constants.
|
||||||
|
stack[sp].value = (long) strtol(c + 2, 0, 2);
|
||||||
|
} else {
|
||||||
stack[sp].value = (long) strtol(c, 0, 0);
|
stack[sp].value = (long) strtol(c, 0, 0);
|
||||||
|
}
|
||||||
stack[sp].svalue = 0;
|
stack[sp].svalue = 0;
|
||||||
stack[sp].op = EXPR_VALUE;
|
stack[sp].op = EXPR_VALUE;
|
||||||
} else if ((token == SWIG_TOKEN_MINUS) || (token == SWIG_TOKEN_PLUS) || (token == SWIG_TOKEN_LNOT) || (token == SWIG_TOKEN_NOT)) {
|
} else if ((token == SWIG_TOKEN_MINUS) || (token == SWIG_TOKEN_PLUS) || (token == SWIG_TOKEN_LNOT) || (token == SWIG_TOKEN_NOT)) {
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@
|
||||||
#
|
#
|
||||||
# Check for baseline language coverage in the compiler for the specified
|
# Check for baseline language coverage in the compiler for the specified
|
||||||
# version of the C++ standard. If necessary, add switches to CXX and
|
# version of the C++ standard. If necessary, add switches to CXX and
|
||||||
# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard)
|
# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for
|
||||||
# or '14' (for the C++14 standard).
|
# the respective C++ standard version.
|
||||||
#
|
#
|
||||||
# The second argument, if specified, indicates whether you insist on an
|
# The second argument, if specified, indicates whether you insist on an
|
||||||
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
||||||
|
|
@ -36,13 +36,14 @@
|
||||||
# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
|
# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
|
||||||
# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
|
# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
|
||||||
# Copyright (c) 2020 Jason Merrill <jason@redhat.com>
|
# Copyright (c) 2020 Jason Merrill <jason@redhat.com>
|
||||||
|
# Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
|
||||||
#
|
#
|
||||||
# Copying and distribution of this file, with or without modification, are
|
# Copying and distribution of this file, with or without modification, are
|
||||||
# permitted in any medium without royalty provided the copyright notice
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
# and this notice are preserved. This file is offered as-is, without any
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
# warranty.
|
# warranty.
|
||||||
|
|
||||||
#serial 12
|
#serial 14
|
||||||
|
|
||||||
dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
|
dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
|
||||||
dnl (serial version number 13).
|
dnl (serial version number 13).
|
||||||
|
|
@ -51,6 +52,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
|
||||||
m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
|
m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
|
||||||
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
|
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
|
||||||
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
|
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
|
||||||
|
[$1], [20], [ax_cxx_compile_alternatives="20"],
|
||||||
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
|
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
|
||||||
m4_if([$2], [], [],
|
m4_if([$2], [], [],
|
||||||
[$2], [ext], [],
|
[$2], [ext], [],
|
||||||
|
|
@ -151,7 +153,6 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl Test body for checking C++14 support
|
dnl Test body for checking C++14 support
|
||||||
|
|
||||||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
||||||
|
|
@ -159,12 +160,24 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl Test body for checking C++17 support
|
||||||
|
|
||||||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl Test body for checking C++20 support
|
||||||
|
|
||||||
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl Tests for new features in C++11
|
dnl Tests for new features in C++11
|
||||||
|
|
||||||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
|
||||||
|
|
@ -960,3 +973,33 @@ namespace cxx17
|
||||||
#endif // __cplusplus < 201703L
|
#endif // __cplusplus < 201703L
|
||||||
|
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Tests for new features in C++20
|
||||||
|
|
||||||
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
|
||||||
|
#error "This is not a C++ compiler"
|
||||||
|
|
||||||
|
#elif __cplusplus < 202002L
|
||||||
|
|
||||||
|
#error "This is not a C++20 compiler"
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <version>
|
||||||
|
|
||||||
|
namespace cxx20
|
||||||
|
{
|
||||||
|
|
||||||
|
// As C++20 supports feature test macros in the standard, there is no
|
||||||
|
// immediate need to actually test for feature availability on the
|
||||||
|
// Autoconf side.
|
||||||
|
|
||||||
|
} // namespace cxx20
|
||||||
|
|
||||||
|
#endif // __cplusplus < 202002L
|
||||||
|
|
||||||
|
]])
|
||||||
|
|
|
||||||
15
configure.ac
15
configure.ac
|
|
@ -304,6 +304,17 @@ if test x"$enable_cpp11_testing" = xyes; then
|
||||||
CXX_SAVED=$CXX
|
CXX_SAVED=$CXX
|
||||||
CXXCPP_SAVED=$CXXCPP
|
CXXCPP_SAVED=$CXXCPP
|
||||||
|
|
||||||
|
# Test for c++20
|
||||||
|
CXXCPP=" "
|
||||||
|
AX_CXX_COMPILE_STDCXX(20, [noext], [optional])
|
||||||
|
AC_MSG_CHECKING([whether C++11 to C++20 testing is enabled])
|
||||||
|
if test "$HAVE_CXX20" = "1"; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
PLATCXXFLAGS="$CXXCPP $PLATCXXFLAGS"
|
||||||
|
HAVE_CXX17="1"
|
||||||
|
HAVE_CXX14="1"
|
||||||
|
HAVE_CXX11="1"
|
||||||
|
else
|
||||||
# Test for c++17
|
# Test for c++17
|
||||||
CXXCPP=" "
|
CXXCPP=" "
|
||||||
AX_CXX_COMPILE_STDCXX(17, [noext], [optional])
|
AX_CXX_COMPILE_STDCXX(17, [noext], [optional])
|
||||||
|
|
@ -341,11 +352,15 @@ if test x"$enable_cpp11_testing" = xyes; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
CXX=$CXX_SAVED
|
CXX=$CXX_SAVED
|
||||||
CXXCPP=$CXXCPP_SAVED
|
CXXCPP=$CXXCPP_SAVED
|
||||||
fi
|
fi
|
||||||
AC_SUBST(HAVE_CXX11)
|
AC_SUBST(HAVE_CXX11)
|
||||||
|
AC_SUBST(HAVE_CXX14)
|
||||||
|
AC_SUBST(HAVE_CXX17)
|
||||||
|
AC_SUBST(HAVE_CXX20)
|
||||||
|
|
||||||
# On darwin 10.7,10.8,10.9 using clang++, need to ensure using
|
# On darwin 10.7,10.8,10.9 using clang++, need to ensure using
|
||||||
# libc++ for tests and examples to run under mono. May affect
|
# libc++ for tests and examples to run under mono. May affect
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue