mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
Making sure everything is fixed on all compilers + g++ too now
This commit is contained in:
parent
220ff5a475
commit
89bf8d5cbb
|
@ -50,7 +50,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
basic_table_iterator () : idx(-1), keyidx(-1) {
|
basic_table_iterator () : keyidx(-1), idx(-1) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ namespace sol {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t I = 0, typename F, typename... Args>
|
template <std::size_t I = 0, typename F, typename... Args>
|
||||||
int make_regs(regs_t& l, int index, sol::call_construction&, F&, Args&&... args) {
|
int make_regs(regs_t& l, int index, sol::call_construction, F&&, Args&&... args) {
|
||||||
callconstructfunc = call<I + 1>;
|
callconstructfunc = call<I + 1>;
|
||||||
secondarymeta = true;
|
secondarymeta = true;
|
||||||
int endindex = make_regs<I + 2>(l, index + 1, std::forward<Args>(args)...);
|
int endindex = make_regs<I + 2>(l, index + 1, std::forward<Args>(args)...);
|
||||||
|
@ -154,7 +154,7 @@ namespace sol {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t I = 0, typename... Bases, typename... Args>
|
template <std::size_t I = 0, typename... Bases, typename... Args>
|
||||||
int make_regs(regs_t& l, int index, base_classes_tag&, bases<Bases...>&, Args&&... args) {
|
int make_regs(regs_t& l, int index, base_classes_tag, bases<Bases...>, Args&&... args) {
|
||||||
int endindex = make_regs<I + 2>(l, index + 1, std::forward<Args>(args)...);
|
int endindex = make_regs<I + 2>(l, index + 1, std::forward<Args>(args)...);
|
||||||
if (sizeof...(Bases) < 1)
|
if (sizeof...(Bases) < 1)
|
||||||
return endindex;
|
return endindex;
|
||||||
|
@ -174,7 +174,7 @@ namespace sol {
|
||||||
#endif // No Runtime Type Information vs. Throw-Style Inheritance
|
#endif // No Runtime Type Information vs. Throw-Style Inheritance
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t I = 0, typename N, typename F, typename... Args>
|
template <std::size_t I = 0, typename N, typename F, typename... Args, typename = std::enable_if_t<!meta::any_same<meta::unqualified_t<N>, base_classes_tag, call_construction>::value>>
|
||||||
int make_regs(regs_t& l, int index, N&& n, F&&, Args&&... args) {
|
int make_regs(regs_t& l, int index, N&& n, F&&, Args&&... args) {
|
||||||
string_detail::string_shim shimname = usertype_detail::make_shim(n);
|
string_detail::string_shim shimname = usertype_detail::make_shim(n);
|
||||||
// Returnable scope
|
// Returnable scope
|
||||||
|
|
|
@ -28,3 +28,20 @@ TEST_CASE("issues/stack-overflow", "make sure various operations repeated don't
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST_CASE("issues/stack-overflow-2", "make sure basic iterators clean up properly when they're not iterated through (e.g., with empty())") {
|
||||||
|
sol::state lua;
|
||||||
|
sol::table t = lua.create_table_with(1, "wut");
|
||||||
|
int MAX = 50000;
|
||||||
|
auto fx = [&]() {
|
||||||
|
int a = 50;
|
||||||
|
for (int i = 0; i < MAX; ++i) {
|
||||||
|
if (t.empty()) {
|
||||||
|
a += 4;
|
||||||
|
}
|
||||||
|
a += 2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
REQUIRE_NOTHROW(fx());
|
||||||
|
}
|
||||||
|
|
|
@ -915,7 +915,9 @@ TEST_CASE("usertype/coverage", "try all the things") {
|
||||||
lua.new_usertype<ext_getset>("ext_getset",
|
lua.new_usertype<ext_getset>("ext_getset",
|
||||||
sol::call_constructor, sol::constructors<sol::types<>, sol::types<int>>(),
|
sol::call_constructor, sol::constructors<sol::types<>, sol::types<int>>(),
|
||||||
sol::meta_function::garbage_collect, sol::destructor(des<ext_getset>),
|
sol::meta_function::garbage_collect, sol::destructor(des<ext_getset>),
|
||||||
"x", sol::overload(&ext_getset::x, &ext_getset::x2, [](ext_getset& m, std::string x, int y) { return m.meow + 50 + y + x.length(); }),
|
"x", sol::overload(&ext_getset::x, &ext_getset::x2, [](ext_getset& m, std::string x, int y) {
|
||||||
|
return m.meow + 50 + y + x.length();
|
||||||
|
}),
|
||||||
"bark", &ext_getset::bark,
|
"bark", &ext_getset::bark,
|
||||||
"meow", &ext_getset::meow,
|
"meow", &ext_getset::meow,
|
||||||
"readonlybark", sol::readonly(&ext_getset::bark),
|
"readonlybark", sol::readonly(&ext_getset::bark),
|
||||||
|
@ -935,7 +937,7 @@ print(w)
|
||||||
)");
|
)");
|
||||||
|
|
||||||
int w = lua["w"];
|
int w = lua["w"];
|
||||||
REQUIRE(w == 27);
|
REQUIRE(w == (56 + 50 + 14 + 14));
|
||||||
|
|
||||||
lua.script(R"(
|
lua.script(R"(
|
||||||
e:set(500)
|
e:set(500)
|
||||||
|
@ -977,8 +979,8 @@ print(d)
|
||||||
|
|
||||||
int c = lua["c"];
|
int c = lua["c"];
|
||||||
int d = lua["d"];
|
int d = lua["d"];
|
||||||
REQUIRE(a == 5001);
|
REQUIRE(c == 9700);
|
||||||
REQUIRE(b == 9700);
|
REQUIRE(d == 56);
|
||||||
|
|
||||||
lua.script(R"(
|
lua.script(R"(
|
||||||
e.writeonlypropbark = 500
|
e.writeonlypropbark = 500
|
||||||
|
|
Loading…
Reference in New Issue
Block a user