mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
Add presentation from Lua Workshop 2016
Have proper detection for numbers (even if it comes at a higher cost)
This commit is contained in:
parent
f3fbd24226
commit
940f44db55
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -66,6 +66,7 @@ lua53.dll
|
||||||
main.exe
|
main.exe
|
||||||
main.o
|
main.o
|
||||||
lua-5.3.3/
|
lua-5.3.3/
|
||||||
*.pdf
|
|
||||||
main.lua
|
main.lua
|
||||||
LuaJIT-2.1.0/
|
LuaJIT-2.1.0/
|
||||||
|
lua-5.3.3-cxx/
|
||||||
|
lua-5.3.3.vcxproj-cxx.filters
|
||||||
|
|
Binary file not shown.
|
@ -20,8 +20,8 @@
|
||||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// This file was generated with a script.
|
// This file was generated with a script.
|
||||||
// Generated 2016-10-11 10:53:03.759428 UTC
|
// Generated 2016-10-15 21:59:41.897573 UTC
|
||||||
// This header was generated with sol v2.14.10 (revision 866a297)
|
// This header was generated with sol v2.14.10 (revision f3fbd24)
|
||||||
// https://github.com/ThePhD/sol2
|
// https://github.com/ThePhD/sol2
|
||||||
|
|
||||||
#ifndef SOL_SINGLE_INCLUDE_HPP
|
#ifndef SOL_SINGLE_INCLUDE_HPP
|
||||||
|
@ -4696,6 +4696,34 @@ namespace sol {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct checker<T, type::number, std::enable_if_t<std::is_integral<T>::value>> {
|
||||||
|
template <typename Handler>
|
||||||
|
static bool check(lua_State* L, int index, Handler&& handler, record& tracking) {
|
||||||
|
tracking.use(1);
|
||||||
|
bool success = lua_isinteger(L, index) == 1;
|
||||||
|
if (!success) {
|
||||||
|
// expected type, actual type
|
||||||
|
handler(L, index, type::number, type_of(L, index));
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct checker<T, type::number, std::enable_if_t<std::is_floating_point<T>::value>> {
|
||||||
|
template <typename Handler>
|
||||||
|
static bool check(lua_State* L, int index, Handler&& handler, record& tracking) {
|
||||||
|
tracking.use(1);
|
||||||
|
bool success = lua_isnumber(L, index) == 1;
|
||||||
|
if (!success) {
|
||||||
|
// expected type, actual type
|
||||||
|
handler(L, index, type::number, type_of(L, index));
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <type expected, typename C>
|
template <type expected, typename C>
|
||||||
struct checker<nil_t, expected, C> {
|
struct checker<nil_t, expected, C> {
|
||||||
template <typename Handler>
|
template <typename Handler>
|
||||||
|
|
|
@ -77,6 +77,34 @@ namespace sol {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct checker<T, type::number, std::enable_if_t<std::is_integral<T>::value>> {
|
||||||
|
template <typename Handler>
|
||||||
|
static bool check(lua_State* L, int index, Handler&& handler, record& tracking) {
|
||||||
|
tracking.use(1);
|
||||||
|
bool success = lua_isinteger(L, index) == 1;
|
||||||
|
if (!success) {
|
||||||
|
// expected type, actual type
|
||||||
|
handler(L, index, type::number, type_of(L, index));
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct checker<T, type::number, std::enable_if_t<std::is_floating_point<T>::value>> {
|
||||||
|
template <typename Handler>
|
||||||
|
static bool check(lua_State* L, int index, Handler&& handler, record& tracking) {
|
||||||
|
tracking.use(1);
|
||||||
|
bool success = lua_isnumber(L, index) == 1;
|
||||||
|
if (!success) {
|
||||||
|
// expected type, actual type
|
||||||
|
handler(L, index, type::number, type_of(L, index));
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <type expected, typename C>
|
template <type expected, typename C>
|
||||||
struct checker<nil_t, expected, C> {
|
struct checker<nil_t, expected, C> {
|
||||||
template <typename Handler>
|
template <typename Handler>
|
||||||
|
|
23
tests.cpp
23
tests.cpp
|
@ -678,3 +678,26 @@ TEST_CASE("compilation/const-regression", "make sure constness in tables is resp
|
||||||
State* s = state.state_.registry()["state"];
|
State* s = state.state_.registry()["state"];
|
||||||
REQUIRE(s == &state);
|
REQUIRE(s == &state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("numbers/integers", "make sure integers are detectable on most platforms") {
|
||||||
|
sol::state lua;
|
||||||
|
|
||||||
|
lua["a"] = 50; // int
|
||||||
|
lua["b"] = 50.5; // double
|
||||||
|
|
||||||
|
sol::object a = lua["a"];
|
||||||
|
sol::object b = lua["b"];
|
||||||
|
|
||||||
|
bool a_is_int = a.is<int>();
|
||||||
|
bool a_is_double = a.is<double>();
|
||||||
|
|
||||||
|
bool b_is_int = b.is<int>();
|
||||||
|
bool b_is_double = b.is<double>();
|
||||||
|
|
||||||
|
REQUIRE(a_is_int);
|
||||||
|
REQUIRE(a_is_double);
|
||||||
|
|
||||||
|
// TODO: will this fail on certain lower Lua versions?
|
||||||
|
REQUIRE_FALSE(a_is_int);
|
||||||
|
REQUIRE(a_is_double);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user