Fix most of the most pressing warnings

- Fixes #1000
- Fixes #1060
- Fixes #1062
- Fixes #1067
This commit is contained in:
ThePhD 2020-11-19 16:42:02 -05:00
parent 62804667ee
commit ef33531df4
No known key found for this signature in database
GPG Key ID: 1509DB1C0F702BFA
12 changed files with 45 additions and 27 deletions

View File

@ -234,7 +234,7 @@ if (LUA_BUILD_LUA_COMPILER)
endif() endif()
set(LUA_VANILLA_GENERATE_LUA_HPP false) set(LUA_VANILLA_GENERATE_LUA_HPP false)
else() else()
MESSAGE(WARNING "Using Lua 5.4.0-work1 file list for ${LUA_VERSION} version") MESSAGE(WARNING "Using Lua 5.4.1 file list for ${LUA_VERSION} version")
set(LUA_VANILLA_LIB_SOURCES lapi.c lauxlib.c lbaselib.c lcode.c lcorolib.c set(LUA_VANILLA_LIB_SOURCES lapi.c lauxlib.c lbaselib.c lcode.c lcorolib.c
lctype.c ldblib.c ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c lctype.c ldblib.c ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c
llex.c lmathlib.c lmem.c loadlib.c lobject.c lopcodes.c loslib.c llex.c lmathlib.c lmem.c loadlib.c lobject.c lopcodes.c loslib.c

View File

@ -100,7 +100,7 @@ transferring functions (dumping bytecode)
You can dump the bytecode of a function, which allows you to transfer it to another state (or save it, or load it). Note that bytecode is *typically specific to the Lua version*! You can dump the bytecode of a function, which allows you to transfer it to another state (or save it, or load it). Note that bytecode is *typically specific to the Lua version*!
.. literalinclude:: ../../../examples/source//dump.cpp .. literalinclude:: ../../../examples/source/dump.cpp
:linenos: :linenos:

View File

@ -78,9 +78,9 @@ function (MAKE_EXAMPLE example_source_file example_suffix target_sol)
if (MSVC) if (MSVC)
target_compile_options(${example_name} target_compile_options(${example_name}
PRIVATE /std:c++latest /EHsc) PRIVATE /std:c++latest /EHsc /W4)
target_compile_definitions(${example_name} target_compile_definitions(${example_name}
PRIVATE UNICODE _UNICODE PRIVATE UNICODE _UNICODE
_CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE ) _CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE )
else() else()
target_compile_options(${example_name} target_compile_options(${example_name}

View File

@ -5,13 +5,13 @@
#include "assert.hpp" #include "assert.hpp"
int main () { int main() {
std::cout << "=== dump (serialize between states) ===" << std::endl; std::cout << "=== dump (serialize between states) ===" << std::endl;
// 2 states, transferring function from 1 to another // 2 states, transferring function from 1 to another
sol::state lua; sol::state lua;
sol::state lua2; sol::state lua2;
// we're not going to run the code on the first // we're not going to run the code on the first
// state, so we only actually need // state, so we only actually need
// the base lib on the second state // the base lib on the second state
@ -24,10 +24,10 @@ int main () {
c_assert(lr.valid()); c_assert(lr.valid());
// turn it into a function, then dump the bytecode // turn it into a function, then dump the bytecode
sol::protected_function target = lr; sol::protected_function target = lr.get<sol::protected_function>();
sol::bytecode target_bc = target.dump(); sol::bytecode target_bc = target.dump();
// reload the byte code // reload the byte code
// in the SECOND state // in the SECOND state
auto result2 = lua2.safe_script(target_bc.as_string_view(), sol::script_pass_on_error); auto result2 = lua2.safe_script(target_bc.as_string_view(), sol::script_pass_on_error);
// check if it was done properly // check if it was done properly

View File

@ -19,7 +19,7 @@ return 24
// Handling code like this can be robust // Handling code like this can be robust
// If you disable exceptions, then obviously you would remove // If you disable exceptions, then obviously you would remove
// the try-catch branches, // the try-catch branches,
// and then rely on the `lua_atpanic` function being called // and then rely on the `lua_atpanic` function being called
// and trapping errors there before exiting the application // and trapping errors there before exiting the application
{ {
// script_default_on_error throws / panics when the code is bad: trap the error // script_default_on_error throws / panics when the code is bad: trap the error
@ -30,7 +30,8 @@ return 24
c_assert(value == 24); c_assert(value == 24);
} }
catch (const sol::error& err) { catch (const sol::error& err) {
std::cout << "Something went horribly wrong: thrown error" << "\n\t" << err.what() << std::endl; std::cout << "Something went horribly wrong: thrown error"
<< "\n\t" << err.what() << std::endl;
} }
} }
@ -45,7 +46,8 @@ return 24
if (!result.valid()) { if (!result.valid()) {
sol::error err = result; sol::error err = result;
sol::call_status status = result.status(); sol::call_status status = result.status();
std::cout << "Something went horribly wrong: " << sol::to_string(status) << " error" << "\n\t" << err.what() << std::endl; std::cout << "Something went horribly wrong: " << sol::to_string(status) << " error"
<< "\n\t" << err.what() << std::endl;
} }
} }
@ -63,19 +65,21 @@ return 24
if (!loaded_chunk.valid()) { if (!loaded_chunk.valid()) {
sol::error err = loaded_chunk; sol::error err = loaded_chunk;
sol::load_status status = loaded_chunk.status(); sol::load_status status = loaded_chunk.status();
std::cout << "Something went horribly wrong loading the code: " << sol::to_string(status) << " error" << "\n\t" << err.what() << std::endl; std::cout << "Something went horribly wrong loading the code: " << sol::to_string(status) << " error"
<< "\n\t" << err.what() << std::endl;
} }
else { else {
// Because the syntax is bad, this will never be reached // Because the syntax is bad, this will never be reached
c_assert(false); c_assert(false);
// If there is a runtime error (lua GC memory error, nil access, etc.) // If there is a runtime error (lua GC memory error, nil access, etc.)
// it will be caught here // it will be caught here
sol::protected_function script_func = loaded_chunk; sol::protected_function script_func = loaded_chunk.get<sol::protected_function>();
sol::protected_function_result result = script_func(); sol::protected_function_result result = script_func();
if (!result.valid()) { if (!result.valid()) {
sol::error err = result; sol::error err = result;
sol::call_status status = result.status(); sol::call_status status = result.status();
std::cout << "Something went horribly wrong running the code: " << sol::to_string(status) << " error" << "\n\t" << err.what() << std::endl; std::cout << "Something went horribly wrong running the code: " << sol::to_string(status) << " error"
<< "\n\t" << err.what() << std::endl;
} }
} }
} }

View File

@ -138,8 +138,8 @@ namespace sol { namespace detail {
{ "operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*" } { "operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*" }
}; };
int level = 0; int level = 0;
std::ptrdiff_t idx = 0; std::size_t idx = 0;
for (idx = static_cast<std::ptrdiff_t>(realname.empty() ? 0 : realname.size() - 1); idx > 0; --idx) { for (idx = static_cast<std::size_t>(realname.empty() ? 0 : realname.size() - 1); idx > 0; --idx) {
if (level == 0 && realname[idx] == ':') { if (level == 0 && realname[idx] == ':') {
break; break;
} }

View File

@ -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 2020-11-19 20:04:06.393002 UTC // Generated 2020-11-19 21:39:27.536445 UTC
// This header was generated with sol v3.2.3 (revision b8aa189e) // This header was generated with sol v3.2.3 (revision 62804667)
// https://github.com/ThePhD/sol2 // https://github.com/ThePhD/sol2
#ifndef SOL_SINGLE_CONFIG_HPP #ifndef SOL_SINGLE_CONFIG_HPP

View File

@ -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 2020-11-19 20:04:06.378005 UTC // Generated 2020-11-19 21:39:27.514445 UTC
// This header was generated with sol v3.2.3 (revision b8aa189e) // This header was generated with sol v3.2.3 (revision 62804667)
// https://github.com/ThePhD/sol2 // https://github.com/ThePhD/sol2
#ifndef SOL_SINGLE_INCLUDE_FORWARD_HPP #ifndef SOL_SINGLE_INCLUDE_FORWARD_HPP

View File

@ -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 2020-11-19 20:04:05.545004 UTC // Generated 2020-11-19 21:39:26.848444 UTC
// This header was generated with sol v3.2.3 (revision b8aa189e) // This header was generated with sol v3.2.3 (revision 62804667)
// https://github.com/ThePhD/sol2 // https://github.com/ThePhD/sol2
#ifndef SOL_SINGLE_INCLUDE_HPP #ifndef SOL_SINGLE_INCLUDE_HPP
@ -8309,8 +8309,8 @@ namespace sol { namespace detail {
{ "operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*" } { "operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*" }
}; };
int level = 0; int level = 0;
std::ptrdiff_t idx = 0; std::size_t idx = 0;
for (idx = static_cast<std::ptrdiff_t>(realname.empty() ? 0 : realname.size() - 1); idx > 0; --idx) { for (idx = static_cast<std::size_t>(realname.empty() ? 0 : realname.size() - 1); idx > 0; --idx) {
if (level == 0 && realname[idx] == ':') { if (level == 0 && realname[idx] == ':') {
break; break;
} }

View File

@ -36,7 +36,7 @@ function(CREATE_TEST test_target_name test_name target_sol)
if (MSVC) if (MSVC)
target_compile_options(${test_target_name} target_compile_options(${test_target_name}
PRIVATE /EHsc /std:c++latest) PRIVATE /EHsc /std:c++latest /W4)
target_compile_definitions(${test_target_name} target_compile_definitions(${test_target_name}
PRIVATE UNICODE _UNICODE PRIVATE UNICODE _UNICODE
_CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE) _CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE)

View File

@ -0,0 +1,13 @@
#define SOL_ALL_SAFETIES_ON 1
#include <sol/sol.hpp>
int regression_1067() {
sol::state lua;
lua.open_libraries(sol::lib::base);
lua["fct"] = std::function<int()> { []() { return 42; } };
lua.script("print(fct())");
return 0;
}

View File

@ -1,11 +1,12 @@
#include <cstddef> #include <cstddef>
extern int regression_1008();
extern int regression_1000(); extern int regression_1000();
extern int regression_1008();
extern int regression_1067();
int main(int, char*[]) { int main(int, char*[]) {
using f_ptr = int (*)(); using f_ptr = int (*)();
const f_ptr regressions[] = { &regression_1008, &regression_1000 }; const f_ptr regressions[] = { &regression_1008, &regression_1000, &regression_1067 };
const int sizeof_regressions = sizeof(regressions) / sizeof(regressions[0]); const int sizeof_regressions = sizeof(regressions) / sizeof(regressions[0]);
int r = 0; int r = 0;
for (std::size_t i = 0; i < sizeof_regressions; ++i) { for (std::size_t i = 0; i < sizeof_regressions; ++i) {