Skip to content

Commit d10e7ba

Browse files
committed
add KAGUYA_CLASS_MAX_BASE_CLASSES
1 parent 0fbe349 commit d10e7ba

File tree

4 files changed

+43
-6
lines changed

4 files changed

+43
-6
lines changed

include/kaguya/config.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ extern "C" {
6666
///! this define used C++03 only.
6767
#define KAGUYA_FUNCTION_MAX_TUPLE_SIZE 9
6868
#endif
69+
#ifndef KAGUYA_CLASS_MAX_BASE_CLASSES
70+
#define KAGUYA_CLASS_MAX_BASE_CLASSES 9
71+
#endif
6972
#ifndef KAGUYA_FUNCTION_MAX_OVERLOADS
7073
///! this define used C++03 only.
7174
#define KAGUYA_FUNCTION_MAX_OVERLOADS 9

include/kaguya/deprecated_metatable.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ namespace kaguya
305305
set_multiple_base(state, metatable, metabases);\
306306
}\
307307

308-
KAGUYA_PP_REPEAT_DEF(KAGUYA_FUNCTION_MAX_TUPLE_SIZE, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
308+
KAGUYA_PP_REPEAT_DEF(KAGUYA_CLASS_MAX_BASE_CLASSES, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
309309
#undef KAGUYA_TEMPLATE_PARAMETER
310310
#undef KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF
311311
#undef KAGUYA_GET_BASE_METATABLE

include/kaguya/metatable.hpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121

2222
namespace kaguya
2323
{
24-
template<class A1, class A2 = void
25-
, class A3 = void, class A4 = void, class A5 = void
26-
, class A6 = void, class A7 = void, class A8 = void,
27-
class A9 = void>struct MultipleBase {
24+
25+
#define KAGUYA_PP_STRUCT_TDEF_REP(N) KAGUYA_PP_CAT(class A,N) = void
26+
#define KAGUYA_PP_STRUCT_TEMPLATE_DEF_REPEAT(N) KAGUYA_PP_REPEAT_ARG(N,KAGUYA_PP_STRUCT_TDEF_REP)
27+
28+
template<KAGUYA_PP_STRUCT_TEMPLATE_DEF_REPEAT(KAGUYA_CLASS_MAX_BASE_CLASSES)>
29+
struct MultipleBase {
2830
};
2931
}
3032

@@ -565,7 +567,7 @@ namespace kaguya
565567
set_multiple_base(state, metatable, metabases);\
566568
}\
567569

568-
KAGUYA_PP_REPEAT_DEF(KAGUYA_FUNCTION_MAX_TUPLE_SIZE, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
570+
KAGUYA_PP_REPEAT_DEF(KAGUYA_CLASS_MAX_BASE_CLASSES, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
569571
#undef KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF
570572
#undef KAGUYA_GET_BASE_METATABLE
571573
#endif

test/test_20_max_arg_20.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#define KAGUYA_FUNCTION_MAX_ARGS 20
2+
#define KAGUYA_FUNCTION_MAX_OVERLOADS 25
23
#include "kaguya/another_binding_api.hpp"
34
#include "test_util.hpp"
45

@@ -7,6 +8,7 @@ using namespace kaguya_test_util;
78

89
using namespace kaguya;
910

11+
1012
void defargfn(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10=10,int a11=11,int a12=12,int a13=13,int a14=14,int a15=15,int a16=16,int a17=17,int a18=18,int a19 = 19,int a20 = 20)
1113
{
1214
TEST_EQUAL(a1, 1);
@@ -53,4 +55,34 @@ KAGUYA_TEST_FUNCTION_DEF(defaultarguments)(kaguya::State& state)
5355
state.dostring("defargfn(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)");
5456
state.dostring("defargfn(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)");
5557
}
58+
59+
60+
KAGUYA_TEST_FUNCTION_DEF(many_overloads)(kaguya::State& state)
61+
{
62+
state["defargfn"] = kaguya::UserdataMetatable<TestClass>()
63+
.setConstructors < TestClass()
64+
, TestClass()
65+
, TestClass()
66+
, TestClass()
67+
, TestClass()
68+
, TestClass()
69+
, TestClass()
70+
, TestClass()
71+
, TestClass()
72+
, TestClass()
73+
, TestClass()
74+
, TestClass()
75+
, TestClass()
76+
, TestClass()
77+
, TestClass()
78+
, TestClass()
79+
, TestClass()
80+
, TestClass()
81+
, TestClass()
82+
, TestClass()
83+
, TestClass()
84+
, TestClass()
85+
, TestClass() > ();
86+
}
87+
5688
KAGUYA_TEST_GROUP_END(test_20_max_arg_20)

0 commit comments

Comments
 (0)