Skip to content

Commit

Permalink
add KAGUYA_CLASS_MAX_BASE_CLASSES
Browse files Browse the repository at this point in the history
  • Loading branch information
satoren committed Aug 8, 2016
1 parent 0fbe349 commit d10e7ba
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 6 deletions.
3 changes: 3 additions & 0 deletions include/kaguya/config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ extern "C" {
///! this define used C++03 only.
#define KAGUYA_FUNCTION_MAX_TUPLE_SIZE 9
#endif
#ifndef KAGUYA_CLASS_MAX_BASE_CLASSES
#define KAGUYA_CLASS_MAX_BASE_CLASSES 9
#endif
#ifndef KAGUYA_FUNCTION_MAX_OVERLOADS
///! this define used C++03 only.
#define KAGUYA_FUNCTION_MAX_OVERLOADS 9
Expand Down
2 changes: 1 addition & 1 deletion include/kaguya/deprecated_metatable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ namespace kaguya
set_multiple_base(state, metatable, metabases);\
}\

KAGUYA_PP_REPEAT_DEF(KAGUYA_FUNCTION_MAX_TUPLE_SIZE, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
KAGUYA_PP_REPEAT_DEF(KAGUYA_CLASS_MAX_BASE_CLASSES, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
#undef KAGUYA_TEMPLATE_PARAMETER
#undef KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF
#undef KAGUYA_GET_BASE_METATABLE
Expand Down
12 changes: 7 additions & 5 deletions include/kaguya/metatable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@

namespace kaguya
{
template<class A1, class A2 = void
, class A3 = void, class A4 = void, class A5 = void
, class A6 = void, class A7 = void, class A8 = void,
class A9 = void>struct MultipleBase {

#define KAGUYA_PP_STRUCT_TDEF_REP(N) KAGUYA_PP_CAT(class A,N) = void
#define KAGUYA_PP_STRUCT_TEMPLATE_DEF_REPEAT(N) KAGUYA_PP_REPEAT_ARG(N,KAGUYA_PP_STRUCT_TDEF_REP)

template<KAGUYA_PP_STRUCT_TEMPLATE_DEF_REPEAT(KAGUYA_CLASS_MAX_BASE_CLASSES)>
struct MultipleBase {
};
}

Expand Down Expand Up @@ -565,7 +567,7 @@ namespace kaguya
set_multiple_base(state, metatable, metabases);\
}\

KAGUYA_PP_REPEAT_DEF(KAGUYA_FUNCTION_MAX_TUPLE_SIZE, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
KAGUYA_PP_REPEAT_DEF(KAGUYA_CLASS_MAX_BASE_CLASSES, KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF)
#undef KAGUYA_MULTIPLE_INHERITANCE_SETBASE_DEF
#undef KAGUYA_GET_BASE_METATABLE
#endif
Expand Down
32 changes: 32 additions & 0 deletions test/test_20_max_arg_20.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#define KAGUYA_FUNCTION_MAX_ARGS 20
#define KAGUYA_FUNCTION_MAX_OVERLOADS 25
#include "kaguya/another_binding_api.hpp"
#include "test_util.hpp"

Expand All @@ -7,6 +8,7 @@ using namespace kaguya_test_util;

using namespace kaguya;


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)
{
TEST_EQUAL(a1, 1);
Expand Down Expand Up @@ -53,4 +55,34 @@ KAGUYA_TEST_FUNCTION_DEF(defaultarguments)(kaguya::State& state)
state.dostring("defargfn(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)");
state.dostring("defargfn(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)");
}


KAGUYA_TEST_FUNCTION_DEF(many_overloads)(kaguya::State& state)
{
state["defargfn"] = kaguya::UserdataMetatable<TestClass>()
.setConstructors < TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass()
, TestClass() > ();
}

KAGUYA_TEST_GROUP_END(test_20_max_arg_20)

0 comments on commit d10e7ba

Please sign in to comment.