mirror of https://github.com/swig/swig
parent
cd40541bd1
commit
7e8eea4a59
|
@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
|||
Version 4.3.0 (in progress)
|
||||
===========================
|
||||
|
||||
2024-09-11: olly
|
||||
[Perl] #630 Fix wrapping of C++11 enum class when -const command line
|
||||
option is specified.
|
||||
|
||||
2024-09-07: wsfulton
|
||||
#2875 Fix swig-4.1.0 regression using the %interface family of macros
|
||||
for multiple inheritance and common bases.
|
||||
|
|
|
@ -263,3 +263,14 @@ private:
|
|||
Val2 = 1172,
|
||||
};
|
||||
%}
|
||||
|
||||
// Test handling of %rename of enum class and an enumerator.
|
||||
%rename(Enum18) QEnum18;
|
||||
%rename(Val1) QVal1;
|
||||
%inline %{
|
||||
enum class QEnum18
|
||||
{
|
||||
QVal1 = 1181,
|
||||
Val2 = 1182,
|
||||
};
|
||||
%}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
%module cpp11_strongly_typed_enumerations_perl_const
|
||||
|
||||
%include "cpp11_strongly_typed_enumerations.i"
|
|
@ -23,6 +23,9 @@ CPP_TEST_CASES += \
|
|||
memberin1 \
|
||||
director_nestedmodule \
|
||||
|
||||
CPP11_TEST_CASES += \
|
||||
cpp11_strongly_typed_enumerations_perl_const
|
||||
|
||||
C_TEST_CASES += \
|
||||
li_cstring \
|
||||
li_cdata_carrays \
|
||||
|
@ -34,7 +37,7 @@ include $(srcdir)/../common.mk
|
|||
# none!
|
||||
|
||||
# Custom tests - tests with additional commandline options
|
||||
# none!
|
||||
cpp11_strongly_typed_enumerations_perl_const.cpptest: SWIGOPT += -const
|
||||
|
||||
# Rules for the different types of tests
|
||||
%.cpptest:
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 4;
|
||||
BEGIN { use_ok('cpp11_strongly_typed_enumerations_perl_const') }
|
||||
require_ok('cpp11_strongly_typed_enumerations_perl_const');
|
||||
|
||||
is(cpp11_strongly_typed_enumerations_perl_const::Enum18::Val1, 1181);
|
||||
is(cpp11_strongly_typed_enumerations_perl_const::Enum18::Val2, 1182);
|
|
@ -1,6 +1,6 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 78;
|
||||
use Test::More tests => 80;
|
||||
BEGIN { use_ok('cpp11_strongly_typed_enumerations') }
|
||||
require_ok('cpp11_strongly_typed_enumerations');
|
||||
|
||||
|
@ -166,3 +166,5 @@ enumCheck(cpp11_strongly_typed_enumerations::globalTest1($cpp11_strongly_typed_e
|
|||
enumCheck(cpp11_strongly_typed_enumerations::globalTest2($cpp11_strongly_typed_enumerations::Class1::Enum12_Val5c), 1121);
|
||||
#enumCheck(cpp11_strongly_typed_enumerations::globalTest3($cpp11_strongly_typed_enumerations::Class1::Struct1::Enum12_Val5f), 3121);
|
||||
|
||||
$val = enumCheck($cpp11_strongly_typed_enumerations::Enum18_Val1, 1181);
|
||||
$val = enumCheck($cpp11_strongly_typed_enumerations::Enum18_Val2, 1182);
|
||||
|
|
|
@ -107,7 +107,7 @@ static String *pcode = 0; /* Perl code associated with each class */
|
|||
static int member_func = 0; /* Set to 1 when wrapping a member function */
|
||||
static String *func_stubs = 0; /* Function stubs */
|
||||
static String *const_stubs = 0; /* Constant stubs */
|
||||
static int num_consts = 0; /* Number of constants */
|
||||
static Node *const_stubs_enum_class = 0; /* Node for enum class if we're currently generating one */
|
||||
static String *var_stubs = 0; /* Variable stubs */
|
||||
static String *exported = 0; /* Exported symbols */
|
||||
static String *pragma_include = 0;
|
||||
|
@ -585,10 +585,9 @@ public:
|
|||
/* Emit package code for different classes */
|
||||
Printf(f_pm, "%s", pm);
|
||||
|
||||
if (num_consts > 0) {
|
||||
if (Len(const_stubs) > 0) {
|
||||
/* Emit constant stubs */
|
||||
Printf(f_pm, "\n# ------- CONSTANT STUBS -------\n\n");
|
||||
Printf(f_pm, "package %s;\n\n", namespace_module);
|
||||
Printf(f_pm, "%s", const_stubs);
|
||||
}
|
||||
|
||||
|
@ -1120,8 +1119,22 @@ public:
|
|||
"tie %__", iname, "_hash,\"", is_shadow(type), "\", $",
|
||||
cmodule, "::", iname, ";\n", "$", iname, "= \\%__", iname, "_hash;\n", "bless $", iname, ", ", is_shadow(type), ";\n", NIL);
|
||||
} else if (do_constants) {
|
||||
Printv(const_stubs, "sub ", name, " () { $", cmodule, "::", name, " }\n", NIL);
|
||||
num_consts++;
|
||||
char *dcolon = Strstr(name, "::");
|
||||
if (!dcolon) {
|
||||
if (Len(const_stubs) == 0 || const_stubs_enum_class != NULL) {
|
||||
Printf(const_stubs, "package %s;\n", namespace_module);
|
||||
const_stubs_enum_class = NULL;
|
||||
}
|
||||
Printv(const_stubs, "sub ", iname, " () { $", cmodule, "::", iname, " }\n", NIL);
|
||||
} else {
|
||||
// C++11 strongly-typed enum.
|
||||
Node *parent = Getattr(n, "parentNode");
|
||||
if (const_stubs_enum_class != parent) {
|
||||
Printf(const_stubs, "package %s::%s;\n", namespace_module, Getattr(parent, "sym:name"));
|
||||
const_stubs_enum_class = parent;
|
||||
}
|
||||
Printv(const_stubs, "sub ", Getattr(n, "enumvalueDeclaration:sym:name"), " () { $", cmodule, "::", iname, " }\n", NIL);
|
||||
}
|
||||
} else {
|
||||
Printv(var_stubs, "*", iname, " = *", cmodule, "::", iname, ";\n", NIL);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue