From 2203c1f64f4503910a8a967da2d0f6f9ba773cfb Mon Sep 17 00:00:00 2001 From: ThePhD Date: Thu, 9 Nov 2017 17:41:46 -0500 Subject: [PATCH] Overhaul examples Overhaul docs for examples Overhaul function_result and protected_function_result proxies --- bootstrap.py | 23 +- ...hD - Wrapping Lua C in C++ - 2017.11.8.pdf | Bin 274528 -> 274607 bytes docs/source/api/as_table.rst | 2 +- docs/source/api/proxy.rst | 20 +- docs/source/errors.rst | 12 +- docs/source/tutorial/all-the-things.rst | 158 ++-- .../require_dll_example/require_from_dll.cpp | 1 + .../tutorials/quick_n_dirty/functions_all.cpp | 81 ++ .../quick_n_dirty/functions_easy.cpp | 32 + .../tutorials/quick_n_dirty/make_tables.cpp | 35 + .../multiple_returns_from_lua.cpp | 23 + .../quick_n_dirty/multiple_returns_to_lua.cpp | 39 + .../quick_n_dirty}/namespacing.cpp | 0 .../quick_n_dirty/opening_a_state.cpp | 18 + .../opening_state_on_raw_lua.cpp | 29 + .../quick_n_dirty/running_lua_code.cpp | 44 ++ .../running_lua_code_low_level.cpp | 44 ++ .../quick_n_dirty}/self_call.cpp | 4 +- .../quick_n_dirty/set_and_get_variables.cpp | 83 ++ .../set_and_get_variables_exists.cpp | 20 + .../quick_n_dirty/tables_and_nesting.cpp | 46 ++ examples/tutorials/quick_n_dirty/userdata.cpp | 99 +++ .../tutorials/quick_n_dirty/usertypes.cpp | 66 ++ single/sol/sol.hpp | 731 +++++++++++------- sol/forward.hpp | 2 + sol/function.hpp | 5 + sol/function_result.hpp | 46 ++ sol/protected_function.hpp | 9 +- sol/protected_function_result.hpp | 58 ++ sol/stack_iterator.hpp | 154 ++++ sol/stack_proxy.hpp | 93 +-- sol/stack_proxy_base.hpp | 96 +++ sol/types.hpp | 35 +- sol/unsafe_function_result.hpp | 62 +- sol/variadic_args.hpp | 146 +--- tests/test_containers.cpp | 3 +- tests/test_coroutines.cpp | 3 +- tests/test_customizations.cpp | 3 +- tests/test_inheritance.cpp | 3 +- tests/test_large_integer.cpp | 5 +- tests/test_overflow.cpp | 6 +- tests/test_proxies.cpp | 31 + tests/test_simple_usertypes.cpp | 4 +- tests/test_state.cpp | 7 +- tests/test_storage.cpp | 6 +- tests/test_strings.cpp | 6 +- tests/test_tables.cpp | 6 +- tests/test_usertypes.cpp | 4 +- tests/test_utility.cpp | 6 +- tests/test_variadics.cpp | 6 +- tests/tests.cpp | 6 +- 51 files changed, 1809 insertions(+), 612 deletions(-) create mode 100644 examples/tutorials/quick_n_dirty/functions_all.cpp create mode 100644 examples/tutorials/quick_n_dirty/functions_easy.cpp create mode 100644 examples/tutorials/quick_n_dirty/make_tables.cpp create mode 100644 examples/tutorials/quick_n_dirty/multiple_returns_from_lua.cpp create mode 100644 examples/tutorials/quick_n_dirty/multiple_returns_to_lua.cpp rename examples/{ => tutorials/quick_n_dirty}/namespacing.cpp (100%) create mode 100644 examples/tutorials/quick_n_dirty/opening_a_state.cpp create mode 100644 examples/tutorials/quick_n_dirty/opening_state_on_raw_lua.cpp create mode 100644 examples/tutorials/quick_n_dirty/running_lua_code.cpp create mode 100644 examples/tutorials/quick_n_dirty/running_lua_code_low_level.cpp rename examples/{ => tutorials/quick_n_dirty}/self_call.cpp (97%) create mode 100644 examples/tutorials/quick_n_dirty/set_and_get_variables.cpp create mode 100644 examples/tutorials/quick_n_dirty/set_and_get_variables_exists.cpp create mode 100644 examples/tutorials/quick_n_dirty/tables_and_nesting.cpp create mode 100644 examples/tutorials/quick_n_dirty/userdata.cpp create mode 100644 examples/tutorials/quick_n_dirty/usertypes.cpp create mode 100644 sol/stack_iterator.hpp create mode 100644 sol/stack_proxy_base.hpp create mode 100644 tests/test_proxies.cpp diff --git a/bootstrap.py b/bootstrap.py index 4d68f798..139723f0 100755 --- a/bootstrap.py +++ b/bootstrap.py @@ -158,13 +158,24 @@ for f in glob.glob('tests/test*.cpp'): examples = [] examples_input = [] + +def add_example (f): + if 'win32' in sys.platform: + example = os.path.join(builddir, replace_extension(f, '.exe')) + example = example.replace('/', '\\'); + else: + example = os.path.join(builddir, replace_extension(f, '')) + example = example.replace('\\', '/'); + #if ' ' in example: + # example = '"' + example + '"' + examples_input.append(f) + examples.append(example) + for f in glob.glob('examples/*.cpp'): - if 'win32' in sys.platform: - example = os.path.join(builddir, replace_extension(f, '.exe')) - else: - example = os.path.join(builddir, replace_extension(f, '')) - examples_input.append(f) - examples.append(example) + add_example(f) + +for f in glob.glob('examples/tutorials/quick_n_dirty/**.cpp'): + add_example(f) # ninja file diff --git a/docs/presentations/ThePhD - Wrapping Lua C in C++ - 2017.11.8.pdf b/docs/presentations/ThePhD - Wrapping Lua C in C++ - 2017.11.8.pdf index c87f32392075436acd6e19094103466d6db79bf5..1cb89870e20f43df907714738336401407e8786a 100644 GIT binary patch delta 86875 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 z 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 z zaj)Qdl-Y_&!2lkHVcL#uIl2r6f)vo;Vff!fUn60s+l31x^51K&QW( z6=O#Q4O=JEe{#5-!XXPvlxAi?(=$xF3GXS3{jDq%!5Wr~-J02Nnl1SQ+rW>2iR7>X@kk_|7|NAm5LO z_rvTw_FdU^J2f2Qr)8I=LMd;gSZ5VITJBaRxz-Azf85%0D?hS;h5R@HUKFnJCxR%LO{qPZUmd&Luu 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

BEOJJ{8BFS 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%0Awv9s6~Cq>;rFq>9 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 Yld%gElf3~83^6e_4GJYCMNdWz3i5c!H~;_u delta 86861 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

2gR$(kddcrh{Mut>5X`@IJ*6h?Hefp#}0y3^1 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. You can also use this to nest types and retrieve tables within tables as shown by `this example`_. -.. _this example: https://github.com/ThePhD/sol2/blob/develop/examples/usertype_simple.cpp \ No newline at end of file +.. _this example: https://github.com/ThePhD/sol2/blob/develop/examples/containers_as_table.cpp diff --git a/docs/source/api/proxy.rst b/docs/source/api/proxy.rst index 8a812ca0..6092dd3e 100644 --- a/docs/source/api/proxy.rst +++ b/docs/source/api/proxy.rst @@ -66,7 +66,7 @@ After loading that file in or putting it in a string and reading the string dire int changed_value = z; // now it's 20! -We don't recommend the above to be used across classes or between function: it's more of something you can do to save a reference to a value you like, call a script or run a lua function, and then get it afterwards. You can also set functions (and function objects :ref:`*`) this way, and retrieve them as well. +We don't recommend the above to be used across classes or between function: it's more of something you can do to save a reference to a value you like, call a script or run a lua function, and then get it afterwards. You can also set functions (and function objects) this way, and retrieve them as well. .. code-block:: c++ :linenos: @@ -133,7 +133,7 @@ Returns whether this proxy actually refers to a valid object. It uses :ref:`sol: template proxy& operator=( Fx&& function ); -Sets the value associated with the keys the proxy was generated with to ``value``. If this is a function, calls ``set_function``. If it is not, just calls ``set``. Does not exist on :ref:`unsage_function_result` or :ref:`protected_function_result`. See :ref:`note` for caveats. +Sets the value associated with the keys the proxy was generated with to ``value``. If this is a function, calls ``set_function``. If it is not, just calls ``set``. Does not exist on :ref:`unsage_function_result` or :ref:`protected_function_result`. .. code-block:: c++ :caption: function: set a callable @@ -154,6 +154,8 @@ Sets the value associated with the keys the proxy was generated with to a functi Sets the value associated with the keys the proxy was generated with to ``value``. Does not exist on :ref:`unsafe_function_result` or :ref:`protected_function_result`. +.. _stack-proxy: + stack_proxy ----------- @@ -169,6 +171,8 @@ unsafe_function_result This type does, however, allow access to multiple underlying values. Use ``result.get(index_offset)`` to retrieve an object of ``Type`` at an offset of ``index_offset`` in the results. Offset is 0 based. Not specifying an argument defaults the value to 0. +``unsafe_function_result`` also has ``begin()`` and ``end()`` functions that return (almost) "random-acess" iterators. These return a proxy type that can be implicitly converted to :ref:`stack_proxy`. + .. _protected-function-result: protected_function_result @@ -179,11 +183,23 @@ protected_function_result This type does, however, allow access to multiple underlying values. Use ``result.get(index_offset)`` to retrieve an object of ``Type`` at an offset of ``index_offset`` in the results. Offset is 0 based. Not specifying an argument defaults the value to 0. +``unsafe_function_result`` also has ``begin()`` and ``end()`` functions that return (almost) "random-acess" iterators. These return a proxy type that can be implicitly converted to :ref:`stack_proxy`. + .. _note 1: on function objects and proxies ------------------------------- +.. note:: + + As of recent versions of sol2 (2.18.2 and above), this is no longer an issue, as even bound classes will have any detectable function call operator automatically bound to the object, to allow this to work without having to use ``.set`` or ``.set_function``. The note here is kept for posterity and information for older versions. + + +.. warning:: + + *The below information is outdated.* + + Consider the following: .. code-block:: cpp diff --git a/docs/source/errors.rst b/docs/source/errors.rst index 0064c5e8..6c6a5fb5 100644 --- a/docs/source/errors.rst +++ b/docs/source/errors.rst @@ -23,6 +23,16 @@ A myriad of compiler errors can occur when something goes wrong. Here is some ba * Sometimes, using ``__stdcall`` in a 32-bit (x86) environment on VC++ can cause problems binding functions because of a compiler bug. We have a prelimanry fix in, but if it doesn't work and there are still problems: put the function in a ``std::function`` to make the compiler errors and other problems go away. Also see `this __stdcall issue report`_ for more details. +Mac OSX Crashes +--------------- + +On LuaJIT, your code may crash at seemingly random points when using Mac OSX. Make sure that your build has these flags, as advised by the LuaJIT website:: + + -pagezero_size 10000 -image_base 100000000 + +These will allow your code to run properly, without crashing arbitrarily. Please read the LuaJIT documentation on compiling and running with LuaJIT for more information. + + "compiler out of heap space" ---------------------------- @@ -41,7 +51,7 @@ Linker Errors There are lots of reasons for compiler linker errors. A common one is not knowing that you've compiled the Lua library as C++: when building with C++, it is important to note that every typical (static or dynamic) library expects the C calling convention to be used and that Sol includes the code using ``extern 'C'`` where applicable. -However, when the target Lua library is compiled with C++, one must change the calling convention and name mangling scheme by getting rid of the ``extern 'C'`` block. This can be achieved by adding ``#define SOL_USING_CXX_LUA`` before including sol2, or by adding it to your compilation's command line. If you build LuaJIT in C++ mode (how you would even, is beyond me), then you need to ``#define SOL_USING_CXX_LUAJIT`` as well. +However, when the target Lua library is compiled with C++, one must change the calling convention and name mangling scheme by getting rid of the ``extern 'C'`` block. This can be achieved by adding ``#define SOL_USING_CXX_LUA`` before including sol2, or by adding it to your compilation's command line. If you build LuaJIT in C++ mode (how you would even, is beyond me), then you need to ``#define SOL_USING_CXX_LUAJIT`` as well. Typically, there is never a need to use this last one. Note that you should not be defining these with standard builds of either Lua or LuaJIT. See the :ref:`config page` for more details. diff --git a/docs/source/tutorial/all-the-things.rst b/docs/source/tutorial/all-the-things.rst index 1e4f6557..5fb60501 100644 --- a/docs/source/tutorial/all-the-things.rst +++ b/docs/source/tutorial/all-the-things.rst @@ -10,29 +10,63 @@ You'll need to ``#include ``/``#include "sol.hpp"`` somewhere in your c After you learn the basics of sol, it is usually advised that if you think something can work, you should TRY IT. It will probably work! +.. note:: + + All of the code below is available at the `sol2 tutorial examples`_. + opening a state --------------- .. code-block:: cpp + #define SOL_CHECK_ARGUMENTS 1 + #include + int main (int argc, char* argv[]) { sol::state lua; // open some common libraries lua.open_libraries(sol::lib::base, sol::lib::package); + // go! lua.script( "print('bark bark bark!')" ); } -sol::state on lua_State* ------------------------- +.. _sol-state-on-lua-state: -For your system/game that already has lua, but you'd like something nice: +using sol2 on a lua_State* +-------------------------- + +For your system/game that already has Lua or uses an in-house or pre-rolled Lua system (LuaBridge, kaguya, Luwra, etc.), but you'd still like sol2 and nice things: .. code-block:: cpp - int pre_existing_system( lua_State* L ) { + #define SOL_CHECK_ARGUMENTS 1 + #include + + #include + + int use_sol2(lua_State* L) { sol::state_view lua(L); - lua.script( "print('bark bark bark!')" ); + lua.script("print('bark bark bark!')"); + return 0; + } + + int main(int, char*[]) { + std::cout << "=== opening sol::state_view on raw Lua example ===" << std::endl; + + lua_State* L = luaL_newstate(); + luaL_openlibs(L); + + lua_pushcclosure(L, &use_sol2, 0); + lua_setglobal(L, "use_sol2"); + + if (luaL_dostring(L, "use_sol2()")) { + lua_error(L); + return -1; + } + + std::cout << std::endl; + return 0; } @@ -42,74 +76,53 @@ running lua code .. code-block:: cpp - sol::state lua; - // load and execute from string - lua.script("a = 'test'"); - // load and execute from file - lua.script_file("path/to/luascript.lua"); + #define SOL_CHECK_ARGUMENTS 1 + #include - // run a script, get the result - int value = lua.script("return 54"); - // value == 54 + #include + #include + + int main(int, char*[]) { + std::cout << "=== running lua code (low level) example ===" << std::endl; + + sol::state lua; + lua.open_libraries(sol::lib::base); + + sol::state lua; + // load and execute from string + lua.script("a = 'test'"); + // load and execute from file + lua.script_file("a_lua_script.lua"); + + // run a script, get the result + int value = lua.script("return 54"); + assert(value == 54); + + /* ... continued in next block */ To run Lua code but have an error handler in case things go wrong: .. code-block:: cpp - sol::state lua; - - // the default handler panics or throws, depending on your settings - auto result1 = lua.script("bad.code", &sol::default_on_error); + /* ... from previous block */ + auto bad_code_result = lua.script("123 herp.derp", [](lua_State* L, sol::protected_function_result pfr) { + // pfr will contain things that went wrong, for either loading or executing the script + // Can throw your own custom error + // You can also just return it, and let the call-site handle the error if necessary. + return pfr; + }); + // it did not work + assert(!bad_code_result.valid()); + + // the default handler panics or throws, depending on your settings + // uncomment for explosions: + //auto bad_code_result_2 = lua.script("bad.code", &sol::script_default_on_error); - auto result2 = lua.script("123 herp.derp", [](lua_State* L, sol::protected_function_result pfr) { - // pfr will contain things that went wrong, for either loading or executing the script - // Can throw your own custom error - // You can also just return it, and let the call-site handle the error if necessary. - return pfr; - }); + std::cout << std::endl; - -To check the success of a loading operation: - -.. code-block:: cpp - - // load file without execute - sol::load_result script1 = lua.load_file("path/to/luascript.lua"); - script1(); //execute - - // load string without execute - sol::load_result script2 = lua.load("a = 'test'"); - sol::protected_function_result script2result = script2(); //execute - // optionally, check if it worked - if (script2result.valid()) { - // yay! - } - else { - // aww + return 0; } - sol::load_result script3 = lua.load("return 24"); - int value2 = script3(); // execute, get return value - // value2 == 24 - - -To check whether a script was successfully run or not (if the actual loading is successful): - -.. code-block:: cpp - - // execute and return result - sol::protected_function_result result1 = lua.do_string("return 24"); - if (result1.valid()) { - int value = result1; - // value == 24 - // yay! - } - else { - // ahhh :c - } - - -There is also ``lua.do_file("path/to/luascript.lua");``. set and get variables --------------------- @@ -168,10 +181,12 @@ Retrieve these variables using this syntax: // get a function sol::function a_function = lua["a_function"]; int value_is_100 = a_function(); - - // get a std::function - std::function a_std_function = lua["a_function"]; + // value_is_100 == 100 + + // convertible to std::function + std::function a_std_function = a_function; int value_is_still_100 = a_std_function(); + // value_is_still_100 == 100 Retrieve Lua types using ``object`` and other ``sol::`` types. @@ -312,12 +327,13 @@ They're great. Use them: lua.script("function f (a, b, c, d) return 1 end"); lua.script("function g (a, b) return a + b end"); - // fixed signature std::function<...> - std::function stdfx = lua["f"]; // sol::function is often easier: // takes a variable number/types of arguments... sol::function fx = lua["f"]; - + // fixed signature std::function<...> + // can be used to tie a sol::function down + std::function stdfx = fx; + int is_one = stdfx(1, 34.5, 3, "bark"); int is_also_one = fx(1, "boop", 3, "bark"); @@ -497,7 +513,7 @@ Everything that is not a: * string type: ``std::string``, ``const char*`` * function type: function pointers, ``lua_CFunction``, ``std::function``, :doc:`sol::function/sol::protected_function<../api/function>`, :doc:`sol::coroutine<../api/coroutine>`, member variable, member function * designated sol type: :doc:`sol::table<../api/table>`, :doc:`sol::thread<../api/thread>`, :doc:`sol::error<../api/error>`, :doc:`sol::object<../api/object>` - * transparent argument type: :doc:`sol::variadic_arg<../api/variadic_args>`, :doc:`sol::this_state<../api/this_state>` + * transparent argument type: :doc:`sol::variadic_arg<../api/variadic_args>`, :doc:`sol::this_state<../api/this_state>`, :doc:`sol::this_environment<../api/this_environment>` * usertype class: :doc:`sol::usertype<../api/usertype>` Is set as a :doc:`userdata + usertype<../api/usertype>`. @@ -665,4 +681,4 @@ Some more things you can do/read about: .. _a basic example: https://github.com/ThePhD/sol2/blob/develop/examples/usertype.cpp .. _special functions: https://github.com/ThePhD/sol2/blob/develop/examples/usertype_special_functions.cpp .. _initializers: https://github.com/ThePhD/sol2/blob/develop/examples/usertype_initializers.cpp - +.. _sol2 tutorial examples: https://github.com/ThePhD/sol2/tree/develop/examples/tutorials/quick 'n' dirty diff --git a/examples/require_dll_example/require_from_dll.cpp b/examples/require_dll_example/require_from_dll.cpp index c6f1e2b2..d02f494e 100644 --- a/examples/require_dll_example/require_from_dll.cpp +++ b/examples/require_dll_example/require_from_dll.cpp @@ -10,6 +10,7 @@ int main(int, char*[]) { std::cout << "=== require from DLL example ===" << std::endl; sol::state lua; + lua.open_libraries(sol::lib::package); lua.script_file(R"( mo = require("my_object") diff --git a/examples/tutorials/quick_n_dirty/functions_all.cpp b/examples/tutorials/quick_n_dirty/functions_all.cpp new file mode 100644 index 00000000..5edee583 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/functions_all.cpp @@ -0,0 +1,81 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include +#include + +void some_function() { + std::cout << "some function!" << std::endl; +} + +void some_other_function() { + std::cout << "some other function!" << std::endl; +} + +struct some_class { + int variable = 30; + + double member_function() { + return 24.5; + } +}; + +int main(int, char*[]) { + std::cout << "=== functions (all) example ===" << std::endl; + + sol::state lua; + lua.open_libraries(sol::lib::base); + + // put an instance of "some_class" into lua + // (we'll go into more detail about this later + // just know here that it works and is + // put into lua as a userdata + lua.set("sc", some_class()); + + // binds a plain function + lua["f1"] = some_function; + lua.set_function("f2", &some_other_function); + + // binds just the member function + lua["m1"] = &some_class::member_function; + + // binds the class to the type + lua.set_function("m2", &some_class::member_function, some_class{}); + + // binds just the member variable as a function + lua["v1"] = &some_class::variable; + + // binds class with member variable as function + lua.set_function("v2", &some_class::variable, some_class{}); + + lua.script(R"( + f1() -- some function! + f2() -- some other function! + + -- need class instance if you don't bind it with the function + print(m1(sc)) -- 24.5 + -- does not need class instance: was bound to lua with one + print(m2()) -- 24.5 + + -- need class instance if you + -- don't bind it with the function + print(v1(sc)) -- 30 + -- does not need class instance: + -- it was bound with one + print(v2()) -- 30 + + -- can set, still + -- requires instance + v1(sc, 212) + -- can set, does not need + -- class instance: was bound with one + v2(254) + + print(v1(sc)) -- 212 + print(v2()) -- 254 + )"); + + std::cout << std::endl; + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/functions_easy.cpp b/examples/tutorials/quick_n_dirty/functions_easy.cpp new file mode 100644 index 00000000..44adb9f2 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/functions_easy.cpp @@ -0,0 +1,32 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char*[]) { + sol::state lua; + lua.open_libraries(sol::lib::base); + + lua.script("function f (a, b, c, d) return 1 end"); + lua.script("function g (a, b) return a + b end"); + + // sol::function is often easier: + // takes a variable number/types of arguments... + sol::function fx = lua["f"]; + // fixed signature std::function<...> + // can be used to tie a sol::function down + std::function stdfx = fx; + + int is_one = stdfx(1, 34.5, 3, "bark"); + assert(is_one == 1); + int is_also_one = fx(1, "boop", 3, "bark"); + assert(is_also_one == 1); + + // call through operator[] + int is_three = lua["g"](1, 2); + assert(is_three == 3); + double is_4_8 = lua["g"](2.4, 2.4); + assert(is_4_8 == 4.8); + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/make_tables.cpp b/examples/tutorials/quick_n_dirty/make_tables.cpp new file mode 100644 index 00000000..71653168 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/make_tables.cpp @@ -0,0 +1,35 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char* []) { + sol::state lua; + lua.open_libraries(sol::lib::base); + + lua["abc_sol2"] = lua.create_table_with( + 0, 24); + + lua.create_named_table("def_sol2", + "ghi", lua.create_table_with("bark", 50, + // can reference other existing stuff too + "woof", lua["abc"])); + + std::string code = R"( + abc = { [0] = 24 } + def = { + ghi = { + bark = 50, + woof = abc + } + } + )"; + + lua.script(code); + lua.script(R"( + assert(abc_sol2[0] == abc[0]) + assert(def_sol2.ghi.bark == def.ghi.bark) + )"); + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/multiple_returns_from_lua.cpp b/examples/tutorials/quick_n_dirty/multiple_returns_from_lua.cpp new file mode 100644 index 00000000..9b955777 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/multiple_returns_from_lua.cpp @@ -0,0 +1,23 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char* []) { + sol::state lua; + + lua.script("function f (a, b, c) return a, b, c end"); + + std::tuple result; + result = lua["f"](100, 200, 300); + // result == { 100, 200, 300 } + int a; + int b; + std::string c; + sol::tie(a, b, c) = lua["f"](100, 200, "bark"); + assert(a == 100); + assert(b == 200); + assert(c == "bark"); + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/multiple_returns_to_lua.cpp b/examples/tutorials/quick_n_dirty/multiple_returns_to_lua.cpp new file mode 100644 index 00000000..2c9ee7ff --- /dev/null +++ b/examples/tutorials/quick_n_dirty/multiple_returns_to_lua.cpp @@ -0,0 +1,39 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char* []) { + sol::state lua; + lua.open_libraries(sol::lib::base); + + lua["f"] = [](int a, int b, sol::object c) { + // sol::object can be anything here: just pass it through + return std::make_tuple(a, b, c); + }; + + std::tuple result = lua["f"](100, 200, 300); + const std::tuple expected(100, 200, 300); + assert(result == expected); + + std::tuple result2; + result2 = lua["f"](100, 200, "BARK BARK BARK!"); + const std::tuple expected2(100, 200, "BARK BARK BARK!"); + assert(result2 == expected2); + + int a, b; + std::string c; + sol::tie(a, b, c) = lua["f"](100, 200, "bark"); + assert(a == 100); + assert(b == 200); + assert(c == "bark"); + + lua.script(R"( + a, b, c = f(150, 250, "woofbark") + assert(a == 150) + assert(b == 250) + assert(c == "woofbark") + )"); + + return 0; +} diff --git a/examples/namespacing.cpp b/examples/tutorials/quick_n_dirty/namespacing.cpp similarity index 100% rename from examples/namespacing.cpp rename to examples/tutorials/quick_n_dirty/namespacing.cpp diff --git a/examples/tutorials/quick_n_dirty/opening_a_state.cpp b/examples/tutorials/quick_n_dirty/opening_a_state.cpp new file mode 100644 index 00000000..e7f6cce3 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/opening_a_state.cpp @@ -0,0 +1,18 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include +#include + +int main(int, char*[]) { + std::cout << "=== opening a state example ===" << std::endl; + + sol::state lua; + // open some common libraries + lua.open_libraries(sol::lib::base, sol::lib::package); + lua.script("print('bark bark bark!')"); + + std::cout << std::endl; + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/opening_state_on_raw_lua.cpp b/examples/tutorials/quick_n_dirty/opening_state_on_raw_lua.cpp new file mode 100644 index 00000000..d6d1f451 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/opening_state_on_raw_lua.cpp @@ -0,0 +1,29 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int use_sol2(lua_State* L) { + sol::state_view lua(L); + lua.script("print('bark bark bark!')"); + return 0; +} + +int main(int, char*[]) { + std::cout << "=== opening sol::state_view on raw Lua example ===" << std::endl; + + lua_State* L = luaL_newstate(); + luaL_openlibs(L); + + lua_pushcclosure(L, &use_sol2, 0); + lua_setglobal(L, "use_sol2"); + + if (luaL_dostring(L, "use_sol2()")) { + lua_error(L); + return -1; + } + + std::cout << std::endl; + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/running_lua_code.cpp b/examples/tutorials/quick_n_dirty/running_lua_code.cpp new file mode 100644 index 00000000..d6ac35ff --- /dev/null +++ b/examples/tutorials/quick_n_dirty/running_lua_code.cpp @@ -0,0 +1,44 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include +#include +#include + +int main(int, char*[]) { + std::cout << "=== running lua code example ===" << std::endl; + + { + std::ofstream out("a_lua_script.lua"); + out << "print('hi from a lua script file')"; + } + + sol::state lua; + lua.open_libraries(sol::lib::base); + + // load and execute from string + lua.script("a = 'test'"); + // load and execute from file + lua.script_file("a_lua_script.lua"); + + // run a script, get the result + int value = lua.script("return 54"); + assert(value == 54); + + auto bad_code_result = lua.script("123 herp.derp", [](lua_State*, sol::protected_function_result pfr) { + // pfr will contain things that went wrong, for either loading or executing the script + // Can throw your own custom error + // You can also just return it, and let the call-site handle the error if necessary. + return pfr; + }); + // it did not work + assert(!bad_code_result.valid()); + + // the default handler panics or throws, depending on your settings + // uncomment for explosions: + //auto bad_code_result_2 = lua.script("bad.code", &sol::script_default_on_error); + + std::cout << std::endl; + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/running_lua_code_low_level.cpp b/examples/tutorials/quick_n_dirty/running_lua_code_low_level.cpp new file mode 100644 index 00000000..b871772a --- /dev/null +++ b/examples/tutorials/quick_n_dirty/running_lua_code_low_level.cpp @@ -0,0 +1,44 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include +#include +#include + +int main(int, char*[]) { + std::cout << "=== running lua code (low level) example ===" << std::endl; + + { + std::ofstream out("a_lua_script.lua"); + out << "print('hi from a lua script file')"; + } + + sol::state lua; + lua.open_libraries(sol::lib::base); + + // load file without execute + sol::load_result script1 = lua.load_file("a_lua_script.lua"); + //execute + script1(); + + // load string without execute + sol::load_result script2 = lua.load("a = 'test'"); + //execute + sol::protected_function_result script2result = script2(); + // optionally, check if it worked + if (script2result.valid()) { + // yay! + } + else { + // aww + } + + sol::load_result script3 = lua.load("return 24"); + // execute, get return value + int value2 = script3(); + assert(value2 == 24); + + std::cout << std::endl; + + return 0; +} diff --git a/examples/self_call.cpp b/examples/tutorials/quick_n_dirty/self_call.cpp similarity index 97% rename from examples/self_call.cpp rename to examples/tutorials/quick_n_dirty/self_call.cpp index fa243860..ef4212a3 100644 --- a/examples/self_call.cpp +++ b/examples/tutorials/quick_n_dirty/self_call.cpp @@ -1,14 +1,12 @@ #define SOL_CHECK_ARGUMENTS 1 #include -#include #include int main() { std::cout << "=== self_call example ===" << std::endl; sol::state lua; - lua.open_libraries(sol::lib::base, sol::lib::package, sol::lib::table); // a small script using 'self' syntax @@ -33,4 +31,6 @@ int main() { lua["print_some_val"](); std::cout << std::endl; + + return 0; } \ No newline at end of file diff --git a/examples/tutorials/quick_n_dirty/set_and_get_variables.cpp b/examples/tutorials/quick_n_dirty/set_and_get_variables.cpp new file mode 100644 index 00000000..daf3ac9d --- /dev/null +++ b/examples/tutorials/quick_n_dirty/set_and_get_variables.cpp @@ -0,0 +1,83 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char*[]) { + sol::state lua; + lua.open_libraries(sol::lib::base); + + // integer types + lua.set("number", 24); + // floating point numbers + lua["number2"] = 24.5; + // string types + lua["important_string"] = "woof woof"; + // is callable, therefore gets stored as a function that can be called + lua["a_function"] = []() { return 100; }; + // make a table + lua["some_table"] = lua.create_table_with("value", 24); + + + // equivalent to this code + std::string equivalent_code = R"( + t = { + number = 24, + number2 = 24.5, + important_string = "woof woof", + a_function = function () return 100 end, + some_table = { value = 24 } + } + )"; + + // check in Lua + lua.script(equivalent_code); + + lua.script(R"( + assert(t.number == number) + assert(t.number2 == number2) + assert(t.important_string == important_string) + assert(t.a_function() == a_function()) + assert(t.some_table.value == some_table.value) + )"); + + + // implicit conversion + int number = lua["number"]; + assert(number == 24); + // explicit get + auto number2 = lua.get("number2"); + assert(number2 == 24.5); + // strings too + std::string important_string = lua["important_string"]; + assert(important_string == "woof woof"); + // dig into a table + int value = lua["some_table"]["value"]; + assert(value == 24); + // get a function + sol::function a_function = lua["a_function"]; + int value_is_100 = a_function(); + // convertible to std::function + std::function a_std_function = a_function; + int value_is_still_100 = a_std_function(); + assert(value_is_100 == 100); + assert(value_is_still_100 == 100); + + sol::object number_obj = lua.get("number"); + // sol::type::number + sol::type t1 = number_obj.get_type(); + assert(t1 == sol::type::number); + + sol::object function_obj = lua["a_function"]; + // sol::type::function + sol::type t2 = function_obj.get_type(); + assert(t2 == sol::type::function); + bool is_it_really = function_obj.is>(); + assert(is_it_really); + + // will not contain data + sol::optional check_for_me = lua["a_function"]; + assert(check_for_me == sol::nullopt); + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/set_and_get_variables_exists.cpp b/examples/tutorials/quick_n_dirty/set_and_get_variables_exists.cpp new file mode 100644 index 00000000..74624dc4 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/set_and_get_variables_exists.cpp @@ -0,0 +1,20 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char*[]) { + sol::state lua; + lua.open_libraries(sol::lib::base); + + lua.script("exists = 250"); + + int first_try = lua.get_or("exists", 322); + assert(first_try == 250); + + lua.set("exists", sol::lua_nil); + int second_try = lua.get_or("exists", 322); + assert(second_try == 322); + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/tables_and_nesting.cpp b/examples/tutorials/quick_n_dirty/tables_and_nesting.cpp new file mode 100644 index 00000000..ac03384a --- /dev/null +++ b/examples/tutorials/quick_n_dirty/tables_and_nesting.cpp @@ -0,0 +1,46 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +int main(int, char*[]) { + + sol::state lua; + lua.open_libraries(sol::lib::base); + + lua.script(R"( + abc = { [0] = 24 } + def = { + ghi = { + bark = 50, + woof = abc + } + } + )"); + + sol::table abc = lua["abc"]; + sol::table def = lua["def"]; + sol::table ghi = lua["def"]["ghi"]; + + int bark1 = def["ghi"]["bark"]; + int bark2 = lua["def"]["ghi"]["bark"]; + assert(bark1 == 50); + assert(bark2 == 50); + + int abcval1 = abc[0]; + int abcval2 = ghi["woof"][0]; + assert(abcval1 == 24); + assert(abcval2 == 24); + + sol::optional will_not_error = lua["abc"]["DOESNOTEXIST"]["ghi"]; + assert(will_not_error == sol::nullopt); + + int also_will_not_error = lua["abc"]["def"]["ghi"]["jklm"].get_or(25); + assert(also_will_not_error == 25); + + // if you don't go safe, + // will throw (or do at_panic if no exceptions) + //int aaaahhh = lua["boom"]["the_dynamite"]; + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/userdata.cpp b/examples/tutorials/quick_n_dirty/userdata.cpp new file mode 100644 index 00000000..daf8a8f4 --- /dev/null +++ b/examples/tutorials/quick_n_dirty/userdata.cpp @@ -0,0 +1,99 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +struct Doge { + int tailwag = 50; + + Doge() { + } + + Doge(int wags) + : tailwag(wags) { + } + + ~Doge() { + std::cout << "Dog at " << this << " is being destroyed..." << std::endl; + } +}; + +int main(int, char* []) { + std::cout << "=== userdata example ===" << std::endl; + + sol::state lua; + + Doge dog{ 30 }; + + // fresh one put into Lua + lua["dog"] = Doge{}; + // Copy into lua: destroyed by Lua VM during garbage collection + lua["dog_copy"] = dog; + // OR: move semantics - will call move constructor if present instead + // Again, owned by Lua + lua["dog_move"] = std::move(dog); + lua["dog_unique_ptr"] = std::make_unique(25); + lua["dog_shared_ptr"] = std::make_shared(31); + + // Identical to above + Doge dog2{ 30 }; + lua.set("dog2", Doge{}); + lua.set("dog2_copy", dog2); + lua.set("dog2_move", std::move(dog2)); + lua.set("dog2_unique_ptr", std::unique_ptr(new Doge(25))); + lua.set("dog2_shared_ptr", std::shared_ptr(new Doge(31))); + + // Note all of them can be retrieved the same way: + Doge& lua_dog = lua["dog"]; + Doge& lua_dog_copy = lua["dog_copy"]; + Doge& lua_dog_move = lua["dog_move"]; + Doge& lua_dog_unique_ptr = lua["dog_unique_ptr"]; + Doge& lua_dog_shared_ptr = lua["dog_shared_ptr"]; + assert(lua_dog.tailwag == 50); + assert(lua_dog_copy.tailwag == 30); + assert(lua_dog_move.tailwag == 30); + assert(lua_dog_unique_ptr.tailwag == 25); + assert(lua_dog_shared_ptr.tailwag == 31); + + // lua will treat these types as opaque, and you will be able to pass them around + // to C++ functions and Lua functions alike + + // Use a C++ reference to handle memory directly + // otherwise take by value, without '&' + lua["f"] = [](Doge& dog) { + std::cout << "dog wags its tail " << dog.tailwag << " times!" << std::endl; + }; + + // if you bind a function using a pointer, + // you can handle when `nil` is passed + lua["handling_f"] = [](Doge* dog) { + if (dog == nullptr) { + std::cout << "dog was nil!" << std::endl; + return; + } + std::cout << "dog wags its tail " << dog->tailwag << " times!" << std::endl; + }; + + lua.script(R"( + f(dog) + f(dog_copy) + f(dog_move) + f(dog_unique_ptr) + f(dog_shared_ptr) + + -- C++ arguments that are pointers can handle nil + handling_f(dog) + handling_f(dog_copy) + handling_f(dog_move) + handling_f(dog_unique_ptr) + handling_f(dog_shared_ptr) + handling_f(nil) + + -- never do this + -- f(nil) + )"); + + std::cout << std::endl; + + return 0; +} diff --git a/examples/tutorials/quick_n_dirty/usertypes.cpp b/examples/tutorials/quick_n_dirty/usertypes.cpp new file mode 100644 index 00000000..e14e025c --- /dev/null +++ b/examples/tutorials/quick_n_dirty/usertypes.cpp @@ -0,0 +1,66 @@ +#define SOL_CHECK_ARGUMENTS 1 +#include + +#include + +struct Doge { + int tailwag = 50; + + Doge() { + } + + Doge(int wags) + : tailwag(wags) { + } + + ~Doge() { + std::cout << "Dog at " << this << " is being destroyed..." << std::endl; + } +}; + +int main(int, char* []) { + std::cout << "=== usertypes example ===" << std::endl; + + sol::state lua; + lua.open_libraries(sol::lib::base); + + Doge dog{ 30 }; + + lua["dog"] = Doge{}; + lua["dog_copy"] = dog; + lua["dog_move"] = std::move(dog); + lua["dog_unique_ptr"] = std::make_unique(21); + lua["dog_shared_ptr"] = std::make_shared(51); + + // now we can access these types in Lua + lua.new_usertype( "Doge", + sol::constructors(), + "tailwag", &Doge::tailwag + ); + lua.script(R"( + function f (dog) + if dog == nil then + print('dog was nil!') + return + end + print('dog wags its tail ' .. dog.tailwag .. ' times!') + end + )"); + + lua.script(R"( + dog_lua = Doge.new() + + f(dog_lua) + f(dog) + f(dog_copy) + f(dog_move) + f(dog) + f(dog_unique_ptr) + f(dog_shared_ptr) + f(nil) + )"); + + std::cout << std::endl; + + return 0; +} diff --git a/single/sol/sol.hpp b/single/sol/sol.hpp index 7089e9d1..090a47e8 100644 --- a/single/sol/sol.hpp +++ b/single/sol/sol.hpp @@ -20,8 +20,8 @@ // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // This file was generated with a script. -// Generated 2017-11-08 01:20:39.160314 UTC -// This header was generated with sol v2.18.6 (revision 10b1bb0) +// Generated 2017-11-09 22:36:14.826447 UTC +// This header was generated with sol v2.18.6 (revision 90bbead) // https://github.com/ThePhD/sol2 #ifndef SOL_SINGLE_INCLUDE_HPP @@ -253,6 +253,8 @@ namespace sol { using stack_thread = basic_thread; using stack_coroutine = basic_coroutine; + struct stack_proxy_base; + struct stack_proxy; struct variadic_args; struct variadic_results; struct stack_count; @@ -4399,11 +4401,12 @@ namespace sol { #else template int static_trampoline(lua_State* L) { -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && !defined(SOL_LUAJIT) + return f(L); + +#else try { -#endif return f(L); -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) } catch (const char* s) { lua_pushstring(L, s); @@ -4411,10 +4414,14 @@ namespace sol { catch (const std::exception& e) { lua_pushstring(L, e.what()); } +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && defined(SOL_LUAJIT) + // LuaJIT cannot have the catchall when the safe propagation is on + // but LuaJIT will swallow all C++ errors + // if we don't at least catch std::exception ones catch (...) { lua_pushstring(L, "caught (...) exception"); } - +#endif // LuaJIT cannot have the catchall, but we must catch std::exceps for it return lua_error(L); #endif } @@ -4446,11 +4453,11 @@ namespace sol { if (meta::bind_traits>::is_noexcept) { return f(L, std::forward(args)...); } -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && !defined(SOL_LUAJIT) + return f(L, std::forward(args)...); +#else try { -#endif return f(L, std::forward(args)...); -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) } catch (const char* s) { lua_pushstring(L, s); @@ -4458,10 +4465,14 @@ namespace sol { catch (const std::exception& e) { lua_pushstring(L, e.what()); } +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && !defined(SOL_LUAJIT) + // LuaJIT cannot have the catchall when the safe propagation is on + // but LuaJIT will swallow all C++ errors + // if we don't at least catch std::exception ones catch (...) { lua_pushstring(L, "caught (...) exception"); } - +#endif return lua_error(L); #endif } @@ -5410,6 +5421,16 @@ namespace sol { template struct is_stack_based : std::is_base_of {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; template struct is_lua_primitive : std::true_type {}; @@ -10497,6 +10518,251 @@ namespace sol { // end of sol/proxy_base.hpp +// beginning of sol/stack_iterator.hpp + +namespace sol { + template + struct stack_iterator : std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> { + typedef std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> base_t; + typedef typename base_t::reference reference; + typedef typename base_t::pointer pointer; + typedef typename base_t::value_type value_type; + typedef typename base_t::difference_type difference_type; + typedef typename base_t::iterator_category iterator_category; + lua_State* L; + int index; + int stacktop; + proxy_t sp; + + stack_iterator() + : L(nullptr), index((std::numeric_limits::max)()), stacktop((std::numeric_limits::max)()), sp() { + } + stack_iterator(const stack_iterator& r) + : L(r.L), index(r.index), stacktop(r.stacktop), sp(r.sp) { + } + stack_iterator(lua_State* luastate, int idx, int topidx) + : L(luastate), index(idx), stacktop(topidx), sp(luastate, idx) { + } + + reference operator*() { + return proxy_t(L, index); + } + + reference operator*() const { + return proxy_t(L, index); + } + + pointer operator->() { + sp = proxy_t(L, index); + return &sp; + } + + pointer operator->() const { + const_cast(sp) = proxy_t(L, index); + return &sp; + } + + stack_iterator& operator++() { + ++index; + return *this; + } + + stack_iterator operator++(int) { + auto r = *this; + this->operator++(); + return r; + } + + stack_iterator& operator--() { + --index; + return *this; + } + + stack_iterator operator--(int) { + auto r = *this; + this->operator--(); + return r; + } + + stack_iterator& operator+=(difference_type idx) { + index += static_cast(idx); + return *this; + } + + stack_iterator& operator-=(difference_type idx) { + index -= static_cast(idx); + return *this; + } + + difference_type operator-(const stack_iterator& r) const { + return index - r.index; + } + + stack_iterator operator+(difference_type idx) const { + stack_iterator r = *this; + r += idx; + return r; + } + + reference operator[](difference_type idx) const { + return proxy_t(L, index + static_cast(idx)); + } + + bool operator==(const stack_iterator& r) const { + if (stacktop == (std::numeric_limits::max)()) { + return r.index == r.stacktop; + } + else if (r.stacktop == (std::numeric_limits::max)()) { + return index == stacktop; + } + return index == r.index; + } + + bool operator!=(const stack_iterator& r) const { + return !(this->operator==(r)); + } + + bool operator<(const stack_iterator& r) const { + return index < r.index; + } + + bool operator>(const stack_iterator& r) const { + return index > r.index; + } + + bool operator<=(const stack_iterator& r) const { + return index <= r.index; + } + + bool operator>=(const stack_iterator& r) const { + return index >= r.index; + } + }; + + template + inline stack_iterator operator+(typename stack_iterator::difference_type n, const stack_iterator& r) { + return r + n; + } +} // namespace sol + +// end of sol/stack_iterator.hpp + +// beginning of sol/stack_proxy.hpp + +// beginning of sol/stack_proxy_base.hpp + +namespace sol { + struct stack_proxy_base : public proxy_base { + private: + lua_State* L; + int index; + + public: + stack_proxy_base() + : L(nullptr), index(0) { + } + stack_proxy_base(lua_State* L, int index) + : L(L), index(index) { + } + + template + decltype(auto) get() const { + return stack::get(L, stack_index()); + } + + template + bool is() const { + return stack::check(L, stack_index()); + } + + template + decltype(auto) as() const { + return get(); + } + + type get_type() const noexcept { + return type_of(lua_state(), stack_index()); + } + + int push() const { + return push(L); + } + + int push(lua_State* Ls) const { + lua_pushvalue(Ls, index); + return 1; + } + + lua_State* lua_state() const { + return L; + } + int stack_index() const { + return index; + } + }; + + namespace stack { + template <> + struct getter { + static stack_proxy_base get(lua_State* L, int index = -1) { + return stack_proxy_base(L, index); + } + }; + + template <> + struct pusher { + static int push(lua_State*, const stack_proxy_base& ref) { + return ref.push(); + } + }; + } // namespace stack + +} // namespace sol + +// end of sol/stack_proxy_base.hpp + +namespace sol { + struct stack_proxy : public stack_proxy_base { + private: + lua_State* L; + int index; + + public: + stack_proxy() + : stack_proxy_base() { + } + stack_proxy(lua_State* L, int index) + : stack_proxy_base(L, index) { + } + + template + decltype(auto) call(Args&&... args); + + template + decltype(auto) operator()(Args&&... args) { + return call<>(std::forward(args)...); + } + }; + + namespace stack { + template <> + struct getter { + static stack_proxy get(lua_State* L, int index = -1) { + return stack_proxy(L, index); + } + }; + + template <> + struct pusher { + static int push(lua_State*, const stack_proxy& ref) { + return ref.push(); + } + }; + } // namespace stack +} // namespace sol + +// end of sol/stack_proxy.hpp + #include namespace sol { @@ -10549,6 +10815,16 @@ namespace sol { } public: + typedef stack_proxy reference_type; + typedef stack_proxy value_type; + typedef stack_proxy* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::size_t size_type; + typedef stack_iterator iterator; + typedef stack_iterator const_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + protected_function_result() = default; protected_function_result(lua_State* Ls, int idx = -1, int retnum = 0, int popped = 0, call_status pferr = call_status::ok) noexcept : L(Ls), index(idx), returncount(retnum), popcount(popped), err(pferr) { @@ -10593,6 +10869,52 @@ namespace sol { return tagged_get(types>(), index_offset); } + type get_type(difference_type index_offset = 0) const noexcept { + return type_of(L, index + static_cast(index_offset)); + } + + stack_proxy operator[](difference_type index_offset) const { + return stack_proxy(L, index + static_cast(index_offset)); + } + + iterator begin() { + return iterator(L, index, stack_index() + return_count()); + } + iterator end() { + return iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator begin() const { + return const_iterator(L, index, stack_index() + return_count()); + } + const_iterator end() const { + return const_iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator cbegin() const { + return begin(); + } + const_iterator cend() const { + return end(); + } + + reverse_iterator rbegin() { + return std::reverse_iterator(begin()); + } + reverse_iterator rend() { + return std::reverse_iterator(end()); + } + const_reverse_iterator rbegin() const { + return std::reverse_iterator(begin()); + } + const_reverse_iterator rend() const { + return std::reverse_iterator(end()); + } + const_reverse_iterator crbegin() const { + return std::reverse_iterator(cbegin()); + } + const_reverse_iterator crend() const { + return std::reverse_iterator(cend()); + } + lua_State* lua_state() const noexcept { return L; }; @@ -10644,6 +10966,16 @@ namespace sol { int returncount; public: + typedef stack_proxy reference_type; + typedef stack_proxy value_type; + typedef stack_proxy* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::size_t size_type; + typedef stack_iterator iterator; + typedef stack_iterator const_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + unsafe_function_result() = default; unsafe_function_result(lua_State* Ls, int idx = -1, int retnum = 0) : L(Ls), index(idx), returncount(retnum) { @@ -10674,8 +11006,54 @@ namespace sol { unsafe_function_result& operator=(protected_function_result&& o) noexcept; template - decltype(auto) get(int index_offset = 0) const { - return stack::get(L, index + index_offset); + decltype(auto) get(difference_type index_offset = 0) const { + return stack::get(L, index + static_cast(index_offset)); + } + + type get_type(difference_type index_offset = 0) const noexcept { + return type_of(L, index + static_cast(index_offset)); + } + + stack_proxy operator[](difference_type index_offset) const { + return stack_proxy(L, index + static_cast(index_offset)); + } + + iterator begin() { + return iterator(L, index, stack_index() + return_count()); + } + iterator end() { + return iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator begin() const { + return const_iterator(L, index, stack_index() + return_count()); + } + const_iterator end() const { + return const_iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator cbegin() const { + return begin(); + } + const_iterator cend() const { + return end(); + } + + reverse_iterator rbegin() { + return std::reverse_iterator(begin()); + } + reverse_iterator rend() { + return std::reverse_iterator(end()); + } + const_reverse_iterator rbegin() const { + return std::reverse_iterator(begin()); + } + const_reverse_iterator rend() const { + return std::reverse_iterator(end()); + } + const_reverse_iterator crbegin() const { + return std::reverse_iterator(cbegin()); + } + const_reverse_iterator crend() const { + return std::reverse_iterator(cend()); } call_status status() const noexcept { @@ -10722,6 +11100,52 @@ namespace sol { // end of sol/unsafe_function_result.hpp +namespace sol { + + namespace detail { + template <> + struct is_speshul : std::true_type {}; + template <> + struct is_speshul : std::true_type {}; + + template + stack_proxy get(types, index_value<0>, index_value, const T& fr) { + return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); + } + + template 0)>> = meta::enabler> + stack_proxy get(types, index_value, index_value, const T& fr) { + return get(types(), index_value(), index_value::value>(), fr); + } + } // namespace detail + + template <> + struct tie_size : std::integral_constant {}; + + template <> + struct tie_size : std::integral_constant {}; + + template + stack_proxy get(const unsafe_function_result& fr) { + return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); + } + + template + stack_proxy get(types t, const unsafe_function_result& fr) { + return detail::get(t, index_value(), index_value<0>(), fr); + } + + template + stack_proxy get(const protected_function_result& fr) { + return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); + } + + template + stack_proxy get(types t, const protected_function_result& fr) { + return detail::get(t, index_value(), index_value<0>(), fr); + } +} // namespace sol + // end of sol/function_result.hpp // beginning of sol/function_types.hpp @@ -13119,7 +13543,7 @@ namespace sol { stack::push(lua_state(), error); } }; -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) || defined(SOL_LUAJIT) try { #endif #endif // No Exceptions @@ -13128,7 +13552,7 @@ namespace sol { poststacksize = lua_gettop(lua_state()) - static_cast(h.valid()); returncount = poststacksize - (firstreturn - 1); #ifndef SOL_NO_EXCEPTIONS -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) || defined(SOL_LUAJIT) } // Handle C++ errors thrown from C++ functions bound inside of lua catch (const char* error) { @@ -13141,11 +13565,16 @@ namespace sol { firstreturn = lua_gettop(lua_state()); return protected_function_result(lua_state(), firstreturn, 0, 1, call_status::runtime); } +#if !defined(SOL_LUAJIT) + // LuaJIT cannot have the catchall when the safe propagation is on + // but LuaJIT will swallow all C++ errors + // if we don't at least catch std::exception ones catch (...) { onexcept("caught (...) unknown error during protected_function call"); firstreturn = lua_gettop(lua_state()); return protected_function_result(lua_state(), firstreturn, 0, 1, call_status::runtime); } +#endif // LuaJIT #else // do not handle exceptions: they can be propogated into C++ and keep all type information / rich information #endif // about as safe as possible @@ -13326,6 +13755,11 @@ namespace sol { // end of sol/protected_function.hpp namespace sol { + template + inline decltype(auto) stack_proxy::call(Args&&... args) { + stack_function sf(this->lua_state(), this->stack_index()); + return sf.template call(std::forward(args)...); + } inline protected_function_result::protected_function_result(unsafe_function_result&& o) noexcept : L(o.lua_state()), index(o.stack_index()), returncount(o.return_count()), popcount(o.return_count()), err(o.status()) { @@ -13845,254 +14279,7 @@ namespace sol { // beginning of sol/variadic_args.hpp -// beginning of sol/stack_proxy.hpp - namespace sol { - struct stack_proxy : public proxy_base { - private: - lua_State* L; - int index; - - public: - stack_proxy() - : L(nullptr), index(0) { - } - stack_proxy(lua_State* L, int index) - : L(L), index(index) { - } - - template - decltype(auto) get() const { - return stack::get(L, stack_index()); - } - - template - bool is() const { - return stack::check(L, stack_index()); - } - - template - decltype(auto) as() const { - return get(); - } - - type get_type() const noexcept { - return type_of(lua_state(), stack_index()); - } - - int push() const { - return push(L); - } - - int push(lua_State* Ls) const { - lua_pushvalue(Ls, index); - return 1; - } - - lua_State* lua_state() const { - return L; - } - int stack_index() const { - return index; - } - - template - decltype(auto) call(Args&&... args) { - return get().template call(std::forward(args)...); - } - - template - decltype(auto) operator()(Args&&... args) { - return call<>(std::forward(args)...); - } - }; - - namespace stack { - template <> - struct getter { - static stack_proxy get(lua_State* L, int index = -1) { - return stack_proxy(L, index); - } - }; - - template <> - struct pusher { - static int push(lua_State*, const stack_proxy& ref) { - return ref.push(); - } - }; - } // namespace stack - - namespace detail { - template <> - struct is_speshul : std::true_type {}; - template <> - struct is_speshul : std::true_type {}; - - template - stack_proxy get(types, index_value<0>, index_value, const T& fr) { - return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); - } - - template 0)>> = meta::enabler> - stack_proxy get(types, index_value, index_value, const T& fr) { - return get(types(), index_value(), index_value::value>(), fr); - } - } // namespace detail - - template <> - struct tie_size : std::integral_constant {}; - - template - stack_proxy get(const unsafe_function_result& fr) { - return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); - } - - template - stack_proxy get(types t, const unsafe_function_result& fr) { - return detail::get(t, index_value(), index_value<0>(), fr); - } - - template <> - struct tie_size : std::integral_constant {}; - - template - stack_proxy get(const protected_function_result& fr) { - return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); - } - - template - stack_proxy get(types t, const protected_function_result& fr) { - return detail::get(t, index_value(), index_value<0>(), fr); - } -} // namespace sol - -// end of sol/stack_proxy.hpp - -namespace sol { - template - struct va_iterator : std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> { - typedef std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> base_t; - typedef typename base_t::reference reference; - typedef typename base_t::pointer pointer; - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::iterator_category iterator_category; - lua_State* L; - int index; - int stacktop; - stack_proxy sp; - - va_iterator() - : L(nullptr), index((std::numeric_limits::max)()), stacktop((std::numeric_limits::max)()) { - } - va_iterator(const va_iterator& r) - : L(r.L), index(r.index), stacktop(r.stacktop) { - } - va_iterator(lua_State* luastate, int idx, int topidx) - : L(luastate), index(idx), stacktop(topidx), sp(luastate, idx) { - } - - reference operator*() { - return stack_proxy(L, index); - } - - reference operator*() const { - return stack_proxy(L, index); - } - - pointer operator->() { - sp = stack_proxy(L, index); - return &sp; - } - - pointer operator->() const { - const_cast(sp) = stack_proxy(L, index); - return &sp; - } - - va_iterator& operator++() { - ++index; - return *this; - } - - va_iterator operator++(int) { - auto r = *this; - this->operator++(); - return r; - } - - va_iterator& operator--() { - --index; - return *this; - } - - va_iterator operator--(int) { - auto r = *this; - this->operator--(); - return r; - } - - va_iterator& operator+=(difference_type idx) { - index += static_cast(idx); - return *this; - } - - va_iterator& operator-=(difference_type idx) { - index -= static_cast(idx); - return *this; - } - - difference_type operator-(const va_iterator& r) const { - return index - r.index; - } - - va_iterator operator+(difference_type idx) const { - va_iterator r = *this; - r += idx; - return r; - } - - reference operator[](difference_type idx) const { - return stack_proxy(L, index + static_cast(idx)); - } - - bool operator==(const va_iterator& r) const { - if (stacktop == (std::numeric_limits::max)()) { - return r.index == r.stacktop; - } - else if (r.stacktop == (std::numeric_limits::max)()) { - return index == stacktop; - } - return index == r.index; - } - - bool operator!=(const va_iterator& r) const { - return !(this->operator==(r)); - } - - bool operator<(const va_iterator& r) const { - return index < r.index; - } - - bool operator>(const va_iterator& r) const { - return index > r.index; - } - - bool operator<=(const va_iterator& r) const { - return index <= r.index; - } - - bool operator>=(const va_iterator& r) const { - return index >= r.index; - } - }; - - template - inline va_iterator operator+(typename va_iterator::difference_type n, const va_iterator& r) { - return r + n; - } - struct variadic_args { private: lua_State* L; @@ -14105,22 +14292,22 @@ namespace sol { typedef stack_proxy* pointer; typedef std::ptrdiff_t difference_type; typedef std::size_t size_type; - typedef va_iterator iterator; - typedef va_iterator const_iterator; + typedef stack_iterator iterator; + typedef stack_iterator const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; variadic_args() = default; variadic_args(lua_State* luastate, int stackindex = -1) - : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lua_gettop(luastate)) { + : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lua_gettop(luastate)) { } variadic_args(lua_State* luastate, int stackindex, int lastindex) - : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lastindex) { + : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lastindex) { } variadic_args(const variadic_args&) = default; variadic_args& operator=(const variadic_args&) = default; variadic_args(variadic_args&& o) - : L(o.L), index(o.index), stacktop(o.stacktop) { + : L(o.L), index(o.index), stacktop(o.stacktop) { // Must be manual, otherwise destructor will screw us // return count being 0 is enough to keep things clean // but will be thorough @@ -14196,16 +14383,16 @@ namespace sol { } template - decltype(auto) get(difference_type start = 0) const { - return stack::get(L, index + static_cast(start)); + decltype(auto) get(difference_type index_offset = 0) const { + return stack::get(L, index + static_cast(index_offset)); } - type get_type(difference_type start = 0) const noexcept { - return type_of(L, index + static_cast(start)); + type get_type(difference_type index_offset = 0) const noexcept { + return type_of(L, index + static_cast(index_offset)); } - stack_proxy operator[](difference_type start) const { - return stack_proxy(L, index + static_cast(start)); + stack_proxy operator[](difference_type index_offset) const { + return stack_proxy(L, index + static_cast(index_offset)); } lua_State* lua_state() const { diff --git a/sol/forward.hpp b/sol/forward.hpp index 173a73e3..f67b0f79 100644 --- a/sol/forward.hpp +++ b/sol/forward.hpp @@ -126,6 +126,8 @@ namespace sol { using stack_thread = basic_thread; using stack_coroutine = basic_coroutine; + struct stack_proxy_base; + struct stack_proxy; struct variadic_args; struct variadic_results; struct stack_count; diff --git a/sol/function.hpp b/sol/function.hpp index db346710..337eec39 100644 --- a/sol/function.hpp +++ b/sol/function.hpp @@ -28,6 +28,11 @@ #include namespace sol { + template + inline decltype(auto) stack_proxy::call(Args&&... args) { + stack_function sf(this->lua_state(), this->stack_index()); + return sf.template call(std::forward(args)...); + } inline protected_function_result::protected_function_result(unsafe_function_result&& o) noexcept : L(o.lua_state()), index(o.stack_index()), returncount(o.return_count()), popcount(o.return_count()), err(o.status()) { diff --git a/sol/function_result.hpp b/sol/function_result.hpp index ccbf33e6..81ef3286 100644 --- a/sol/function_result.hpp +++ b/sol/function_result.hpp @@ -25,4 +25,50 @@ #include "protected_function_result.hpp" #include "unsafe_function_result.hpp" +namespace sol { + + namespace detail { + template <> + struct is_speshul : std::true_type {}; + template <> + struct is_speshul : std::true_type {}; + + template + stack_proxy get(types, index_value<0>, index_value, const T& fr) { + return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); + } + + template 0)>> = meta::enabler> + stack_proxy get(types, index_value, index_value, const T& fr) { + return get(types(), index_value(), index_value::value>(), fr); + } + } // namespace detail + + template <> + struct tie_size : std::integral_constant {}; + + template <> + struct tie_size : std::integral_constant {}; + + template + stack_proxy get(const unsafe_function_result& fr) { + return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); + } + + template + stack_proxy get(types t, const unsafe_function_result& fr) { + return detail::get(t, index_value(), index_value<0>(), fr); + } + + template + stack_proxy get(const protected_function_result& fr) { + return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); + } + + template + stack_proxy get(types t, const protected_function_result& fr) { + return detail::get(t, index_value(), index_value<0>(), fr); + } +} // namespace sol + #endif // SOL_FUNCTION_RESULT_HPP diff --git a/sol/protected_function.hpp b/sol/protected_function.hpp index 72cb9877..04d272d5 100644 --- a/sol/protected_function.hpp +++ b/sol/protected_function.hpp @@ -150,7 +150,7 @@ namespace sol { stack::push(lua_state(), error); } }; -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) || defined(SOL_LUAJIT) try { #endif #endif // No Exceptions @@ -159,7 +159,7 @@ namespace sol { poststacksize = lua_gettop(lua_state()) - static_cast(h.valid()); returncount = poststacksize - (firstreturn - 1); #ifndef SOL_NO_EXCEPTIONS -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) || defined(SOL_LUAJIT) } // Handle C++ errors thrown from C++ functions bound inside of lua catch (const char* error) { @@ -172,11 +172,16 @@ namespace sol { firstreturn = lua_gettop(lua_state()); return protected_function_result(lua_state(), firstreturn, 0, 1, call_status::runtime); } +#if !defined(SOL_LUAJIT) + // LuaJIT cannot have the catchall when the safe propagation is on + // but LuaJIT will swallow all C++ errors + // if we don't at least catch std::exception ones catch (...) { onexcept("caught (...) unknown error during protected_function call"); firstreturn = lua_gettop(lua_state()); return protected_function_result(lua_state(), firstreturn, 0, 1, call_status::runtime); } +#endif // LuaJIT #else // do not handle exceptions: they can be propogated into C++ and keep all type information / rich information #endif // about as safe as possible diff --git a/sol/protected_function_result.hpp b/sol/protected_function_result.hpp index dc315ac8..fec07a99 100644 --- a/sol/protected_function_result.hpp +++ b/sol/protected_function_result.hpp @@ -26,6 +26,8 @@ #include "tuple.hpp" #include "stack.hpp" #include "proxy_base.hpp" +#include "stack_iterator.hpp" +#include "stack_proxy.hpp" #include namespace sol { @@ -78,6 +80,16 @@ namespace sol { } public: + typedef stack_proxy reference_type; + typedef stack_proxy value_type; + typedef stack_proxy* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::size_t size_type; + typedef stack_iterator iterator; + typedef stack_iterator const_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + protected_function_result() = default; protected_function_result(lua_State* Ls, int idx = -1, int retnum = 0, int popped = 0, call_status pferr = call_status::ok) noexcept : L(Ls), index(idx), returncount(retnum), popcount(popped), err(pferr) { @@ -122,6 +134,52 @@ namespace sol { return tagged_get(types>(), index_offset); } + type get_type(difference_type index_offset = 0) const noexcept { + return type_of(L, index + static_cast(index_offset)); + } + + stack_proxy operator[](difference_type index_offset) const { + return stack_proxy(L, index + static_cast(index_offset)); + } + + iterator begin() { + return iterator(L, index, stack_index() + return_count()); + } + iterator end() { + return iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator begin() const { + return const_iterator(L, index, stack_index() + return_count()); + } + const_iterator end() const { + return const_iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator cbegin() const { + return begin(); + } + const_iterator cend() const { + return end(); + } + + reverse_iterator rbegin() { + return std::reverse_iterator(begin()); + } + reverse_iterator rend() { + return std::reverse_iterator(end()); + } + const_reverse_iterator rbegin() const { + return std::reverse_iterator(begin()); + } + const_reverse_iterator rend() const { + return std::reverse_iterator(end()); + } + const_reverse_iterator crbegin() const { + return std::reverse_iterator(cbegin()); + } + const_reverse_iterator crend() const { + return std::reverse_iterator(cend()); + } + lua_State* lua_state() const noexcept { return L; }; diff --git a/sol/stack_iterator.hpp b/sol/stack_iterator.hpp new file mode 100644 index 00000000..45ece06c --- /dev/null +++ b/sol/stack_iterator.hpp @@ -0,0 +1,154 @@ +// The MIT License (MIT) + +// Copyright (c) 2013-2017 Rapptz, ThePhD and contributors + +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#ifndef SOL_STACK_ITERATOR_HPP +#define SOL_STACK_ITERATOR_HPP + +#include "stack.hpp" +#include +#include + +namespace sol { + template + struct stack_iterator : std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> { + typedef std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> base_t; + typedef typename base_t::reference reference; + typedef typename base_t::pointer pointer; + typedef typename base_t::value_type value_type; + typedef typename base_t::difference_type difference_type; + typedef typename base_t::iterator_category iterator_category; + lua_State* L; + int index; + int stacktop; + proxy_t sp; + + stack_iterator() + : L(nullptr), index((std::numeric_limits::max)()), stacktop((std::numeric_limits::max)()), sp() { + } + stack_iterator(const stack_iterator& r) + : L(r.L), index(r.index), stacktop(r.stacktop), sp(r.sp) { + } + stack_iterator(lua_State* luastate, int idx, int topidx) + : L(luastate), index(idx), stacktop(topidx), sp(luastate, idx) { + } + + reference operator*() { + return proxy_t(L, index); + } + + reference operator*() const { + return proxy_t(L, index); + } + + pointer operator->() { + sp = proxy_t(L, index); + return &sp; + } + + pointer operator->() const { + const_cast(sp) = proxy_t(L, index); + return &sp; + } + + stack_iterator& operator++() { + ++index; + return *this; + } + + stack_iterator operator++(int) { + auto r = *this; + this->operator++(); + return r; + } + + stack_iterator& operator--() { + --index; + return *this; + } + + stack_iterator operator--(int) { + auto r = *this; + this->operator--(); + return r; + } + + stack_iterator& operator+=(difference_type idx) { + index += static_cast(idx); + return *this; + } + + stack_iterator& operator-=(difference_type idx) { + index -= static_cast(idx); + return *this; + } + + difference_type operator-(const stack_iterator& r) const { + return index - r.index; + } + + stack_iterator operator+(difference_type idx) const { + stack_iterator r = *this; + r += idx; + return r; + } + + reference operator[](difference_type idx) const { + return proxy_t(L, index + static_cast(idx)); + } + + bool operator==(const stack_iterator& r) const { + if (stacktop == (std::numeric_limits::max)()) { + return r.index == r.stacktop; + } + else if (r.stacktop == (std::numeric_limits::max)()) { + return index == stacktop; + } + return index == r.index; + } + + bool operator!=(const stack_iterator& r) const { + return !(this->operator==(r)); + } + + bool operator<(const stack_iterator& r) const { + return index < r.index; + } + + bool operator>(const stack_iterator& r) const { + return index > r.index; + } + + bool operator<=(const stack_iterator& r) const { + return index <= r.index; + } + + bool operator>=(const stack_iterator& r) const { + return index >= r.index; + } + }; + + template + inline stack_iterator operator+(typename stack_iterator::difference_type n, const stack_iterator& r) { + return r + n; + } +} // namespace sol + +#endif // SOL_STACK_ITERATOR_HPP diff --git a/sol/stack_proxy.hpp b/sol/stack_proxy.hpp index 914e2adc..1007cf12 100644 --- a/sol/stack_proxy.hpp +++ b/sol/stack_proxy.hpp @@ -22,64 +22,24 @@ #ifndef SOL_STACK_PROXY_HPP #define SOL_STACK_PROXY_HPP -#include "stack.hpp" -#include "function.hpp" -#include "protected_function.hpp" -#include "proxy_base.hpp" +#include "stack_proxy_base.hpp" namespace sol { - struct stack_proxy : public proxy_base { + struct stack_proxy : public stack_proxy_base { private: lua_State* L; int index; public: stack_proxy() - : L(nullptr), index(0) { + : stack_proxy_base() { } stack_proxy(lua_State* L, int index) - : L(L), index(index) { - } - - template - decltype(auto) get() const { - return stack::get(L, stack_index()); - } - - template - bool is() const { - return stack::check(L, stack_index()); - } - - template - decltype(auto) as() const { - return get(); - } - - type get_type() const noexcept { - return type_of(lua_state(), stack_index()); - } - - int push() const { - return push(L); - } - - int push(lua_State* Ls) const { - lua_pushvalue(Ls, index); - return 1; - } - - lua_State* lua_state() const { - return L; - } - int stack_index() const { - return index; + : stack_proxy_base(L, index) { } template - decltype(auto) call(Args&&... args) { - return get().template call(std::forward(args)...); - } + decltype(auto) call(Args&&... args); template decltype(auto) operator()(Args&&... args) { @@ -102,49 +62,6 @@ namespace sol { } }; } // namespace stack - - namespace detail { - template <> - struct is_speshul : std::true_type {}; - template <> - struct is_speshul : std::true_type {}; - - template - stack_proxy get(types, index_value<0>, index_value, const T& fr) { - return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); - } - - template 0)>> = meta::enabler> - stack_proxy get(types, index_value, index_value, const T& fr) { - return get(types(), index_value(), index_value::value>(), fr); - } - } // namespace detail - - template <> - struct tie_size : std::integral_constant {}; - - template - stack_proxy get(const unsafe_function_result& fr) { - return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); - } - - template - stack_proxy get(types t, const unsafe_function_result& fr) { - return detail::get(t, index_value(), index_value<0>(), fr); - } - - template <> - struct tie_size : std::integral_constant {}; - - template - stack_proxy get(const protected_function_result& fr) { - return stack_proxy(fr.lua_state(), static_cast(fr.stack_index() + I)); - } - - template - stack_proxy get(types t, const protected_function_result& fr) { - return detail::get(t, index_value(), index_value<0>(), fr); - } } // namespace sol #endif // SOL_STACK_PROXY_HPP diff --git a/sol/stack_proxy_base.hpp b/sol/stack_proxy_base.hpp new file mode 100644 index 00000000..817b68f0 --- /dev/null +++ b/sol/stack_proxy_base.hpp @@ -0,0 +1,96 @@ +// The MIT License (MIT) + +// Copyright (c) 2013-2017 Rapptz, ThePhD and contributors + +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#ifndef SOL_STACK_PROXY_BASE_HPP +#define SOL_STACK_PROXY_BASE_HPP + +#include "stack.hpp" +#include "proxy_base.hpp" + +namespace sol { + struct stack_proxy_base : public proxy_base { + private: + lua_State* L; + int index; + + public: + stack_proxy_base() + : L(nullptr), index(0) { + } + stack_proxy_base(lua_State* L, int index) + : L(L), index(index) { + } + + template + decltype(auto) get() const { + return stack::get(L, stack_index()); + } + + template + bool is() const { + return stack::check(L, stack_index()); + } + + template + decltype(auto) as() const { + return get(); + } + + type get_type() const noexcept { + return type_of(lua_state(), stack_index()); + } + + int push() const { + return push(L); + } + + int push(lua_State* Ls) const { + lua_pushvalue(Ls, index); + return 1; + } + + lua_State* lua_state() const { + return L; + } + int stack_index() const { + return index; + } + }; + + namespace stack { + template <> + struct getter { + static stack_proxy_base get(lua_State* L, int index = -1) { + return stack_proxy_base(L, index); + } + }; + + template <> + struct pusher { + static int push(lua_State*, const stack_proxy_base& ref) { + return ref.push(); + } + }; + } // namespace stack + +} // namespace sol + +#endif // SOL_STACK_PROXY_BASE_HPP diff --git a/sol/types.hpp b/sol/types.hpp index 1f3f0f37..21142ed6 100644 --- a/sol/types.hpp +++ b/sol/types.hpp @@ -70,11 +70,12 @@ namespace sol { #else template int static_trampoline(lua_State* L) { -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && !defined(SOL_LUAJIT) + return f(L); + +#else try { -#endif return f(L); -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) } catch (const char* s) { lua_pushstring(L, s); @@ -82,10 +83,14 @@ namespace sol { catch (const std::exception& e) { lua_pushstring(L, e.what()); } +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && defined(SOL_LUAJIT) + // LuaJIT cannot have the catchall when the safe propagation is on + // but LuaJIT will swallow all C++ errors + // if we don't at least catch std::exception ones catch (...) { lua_pushstring(L, "caught (...) exception"); } - +#endif // LuaJIT cannot have the catchall, but we must catch std::exceps for it return lua_error(L); #endif } @@ -117,11 +122,11 @@ namespace sol { if (meta::bind_traits>::is_noexcept) { return f(L, std::forward(args)...); } -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && !defined(SOL_LUAJIT) + return f(L, std::forward(args)...); +#else try { -#endif return f(L, std::forward(args)...); -#if !defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) } catch (const char* s) { lua_pushstring(L, s); @@ -129,10 +134,14 @@ namespace sol { catch (const std::exception& e) { lua_pushstring(L, e.what()); } +#if defined(SOL_EXCEPTIONS_SAFE_PROPAGATION) && !defined(SOL_LUAJIT) + // LuaJIT cannot have the catchall when the safe propagation is on + // but LuaJIT will swallow all C++ errors + // if we don't at least catch std::exception ones catch (...) { lua_pushstring(L, "caught (...) exception"); } - +#endif return lua_error(L); #endif } @@ -1081,6 +1090,16 @@ namespace sol { template struct is_stack_based : std::is_base_of {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; + template <> + struct is_stack_based : std::true_type {}; template struct is_lua_primitive : std::true_type {}; diff --git a/sol/unsafe_function_result.hpp b/sol/unsafe_function_result.hpp index acd86913..215e9497 100644 --- a/sol/unsafe_function_result.hpp +++ b/sol/unsafe_function_result.hpp @@ -26,6 +26,8 @@ #include "tuple.hpp" #include "stack.hpp" #include "proxy_base.hpp" +#include "stack_iterator.hpp" +#include "stack_proxy.hpp" #include namespace sol { @@ -36,6 +38,16 @@ namespace sol { int returncount; public: + typedef stack_proxy reference_type; + typedef stack_proxy value_type; + typedef stack_proxy* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::size_t size_type; + typedef stack_iterator iterator; + typedef stack_iterator const_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + unsafe_function_result() = default; unsafe_function_result(lua_State* Ls, int idx = -1, int retnum = 0) : L(Ls), index(idx), returncount(retnum) { @@ -66,8 +78,54 @@ namespace sol { unsafe_function_result& operator=(protected_function_result&& o) noexcept; template - decltype(auto) get(int index_offset = 0) const { - return stack::get(L, index + index_offset); + decltype(auto) get(difference_type index_offset = 0) const { + return stack::get(L, index + static_cast(index_offset)); + } + + type get_type(difference_type index_offset = 0) const noexcept { + return type_of(L, index + static_cast(index_offset)); + } + + stack_proxy operator[](difference_type index_offset) const { + return stack_proxy(L, index + static_cast(index_offset)); + } + + iterator begin() { + return iterator(L, index, stack_index() + return_count()); + } + iterator end() { + return iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator begin() const { + return const_iterator(L, index, stack_index() + return_count()); + } + const_iterator end() const { + return const_iterator(L, stack_index() + return_count(), stack_index() + return_count()); + } + const_iterator cbegin() const { + return begin(); + } + const_iterator cend() const { + return end(); + } + + reverse_iterator rbegin() { + return std::reverse_iterator(begin()); + } + reverse_iterator rend() { + return std::reverse_iterator(end()); + } + const_reverse_iterator rbegin() const { + return std::reverse_iterator(begin()); + } + const_reverse_iterator rend() const { + return std::reverse_iterator(end()); + } + const_reverse_iterator crbegin() const { + return std::reverse_iterator(cbegin()); + } + const_reverse_iterator crend() const { + return std::reverse_iterator(cend()); } call_status status() const noexcept { diff --git a/sol/variadic_args.hpp b/sol/variadic_args.hpp index 9e47c5e0..c2b1d699 100644 --- a/sol/variadic_args.hpp +++ b/sol/variadic_args.hpp @@ -24,133 +24,11 @@ #include "stack.hpp" #include "stack_proxy.hpp" +#include "stack_iterator.hpp" #include #include namespace sol { - template - struct va_iterator : std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> { - typedef std::iterator, std::ptrdiff_t, std::conditional_t, std::conditional_t> base_t; - typedef typename base_t::reference reference; - typedef typename base_t::pointer pointer; - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::iterator_category iterator_category; - lua_State* L; - int index; - int stacktop; - stack_proxy sp; - - va_iterator() - : L(nullptr), index((std::numeric_limits::max)()), stacktop((std::numeric_limits::max)()) { - } - va_iterator(const va_iterator& r) - : L(r.L), index(r.index), stacktop(r.stacktop) { - } - va_iterator(lua_State* luastate, int idx, int topidx) - : L(luastate), index(idx), stacktop(topidx), sp(luastate, idx) { - } - - reference operator*() { - return stack_proxy(L, index); - } - - reference operator*() const { - return stack_proxy(L, index); - } - - pointer operator->() { - sp = stack_proxy(L, index); - return &sp; - } - - pointer operator->() const { - const_cast(sp) = stack_proxy(L, index); - return &sp; - } - - va_iterator& operator++() { - ++index; - return *this; - } - - va_iterator operator++(int) { - auto r = *this; - this->operator++(); - return r; - } - - va_iterator& operator--() { - --index; - return *this; - } - - va_iterator operator--(int) { - auto r = *this; - this->operator--(); - return r; - } - - va_iterator& operator+=(difference_type idx) { - index += static_cast(idx); - return *this; - } - - va_iterator& operator-=(difference_type idx) { - index -= static_cast(idx); - return *this; - } - - difference_type operator-(const va_iterator& r) const { - return index - r.index; - } - - va_iterator operator+(difference_type idx) const { - va_iterator r = *this; - r += idx; - return r; - } - - reference operator[](difference_type idx) const { - return stack_proxy(L, index + static_cast(idx)); - } - - bool operator==(const va_iterator& r) const { - if (stacktop == (std::numeric_limits::max)()) { - return r.index == r.stacktop; - } - else if (r.stacktop == (std::numeric_limits::max)()) { - return index == stacktop; - } - return index == r.index; - } - - bool operator!=(const va_iterator& r) const { - return !(this->operator==(r)); - } - - bool operator<(const va_iterator& r) const { - return index < r.index; - } - - bool operator>(const va_iterator& r) const { - return index > r.index; - } - - bool operator<=(const va_iterator& r) const { - return index <= r.index; - } - - bool operator>=(const va_iterator& r) const { - return index >= r.index; - } - }; - - template - inline va_iterator operator+(typename va_iterator::difference_type n, const va_iterator& r) { - return r + n; - } - struct variadic_args { private: lua_State* L; @@ -163,22 +41,22 @@ namespace sol { typedef stack_proxy* pointer; typedef std::ptrdiff_t difference_type; typedef std::size_t size_type; - typedef va_iterator iterator; - typedef va_iterator const_iterator; + typedef stack_iterator iterator; + typedef stack_iterator const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; variadic_args() = default; variadic_args(lua_State* luastate, int stackindex = -1) - : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lua_gettop(luastate)) { + : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lua_gettop(luastate)) { } variadic_args(lua_State* luastate, int stackindex, int lastindex) - : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lastindex) { + : L(luastate), index(lua_absindex(luastate, stackindex)), stacktop(lastindex) { } variadic_args(const variadic_args&) = default; variadic_args& operator=(const variadic_args&) = default; variadic_args(variadic_args&& o) - : L(o.L), index(o.index), stacktop(o.stacktop) { + : L(o.L), index(o.index), stacktop(o.stacktop) { // Must be manual, otherwise destructor will screw us // return count being 0 is enough to keep things clean // but will be thorough @@ -254,16 +132,16 @@ namespace sol { } template - decltype(auto) get(difference_type start = 0) const { - return stack::get(L, index + static_cast(start)); + decltype(auto) get(difference_type index_offset = 0) const { + return stack::get(L, index + static_cast(index_offset)); } - type get_type(difference_type start = 0) const noexcept { - return type_of(L, index + static_cast(start)); + type get_type(difference_type index_offset = 0) const noexcept { + return type_of(L, index + static_cast(index_offset)); } - stack_proxy operator[](difference_type start) const { - return stack_proxy(L, index + static_cast(start)); + stack_proxy operator[](difference_type index_offset) const { + return stack_proxy(L, index + static_cast(index_offset)); } lua_State* lua_state() const { diff --git a/tests/test_containers.cpp b/tests/test_containers.cpp index 4bae9d8c..384decbe 100644 --- a/tests/test_containers.cpp +++ b/tests/test_containers.cpp @@ -1,4 +1,5 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 #include #include diff --git a/tests/test_coroutines.cpp b/tests/test_coroutines.cpp index 77de6868..7712e9cf 100644 --- a/tests/test_coroutines.cpp +++ b/tests/test_coroutines.cpp @@ -1,4 +1,5 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 #include #include diff --git a/tests/test_customizations.cpp b/tests/test_customizations.cpp index 404e3246..76ec7ccc 100644 --- a/tests/test_customizations.cpp +++ b/tests/test_customizations.cpp @@ -1,4 +1,5 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 #include #include diff --git a/tests/test_inheritance.cpp b/tests/test_inheritance.cpp index 0de061f9..e2c53a60 100644 --- a/tests/test_inheritance.cpp +++ b/tests/test_inheritance.cpp @@ -1,4 +1,5 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 #include #include diff --git a/tests/test_large_integer.cpp b/tests/test_large_integer.cpp index f1b0bb05..8050a9ef 100644 --- a/tests/test_large_integer.cpp +++ b/tests/test_large_integer.cpp @@ -1,7 +1,10 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + #include #include + #include #include diff --git a/tests/test_overflow.cpp b/tests/test_overflow.cpp index a80454b3..ef358d61 100644 --- a/tests/test_overflow.cpp +++ b/tests/test_overflow.cpp @@ -1,7 +1,9 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include TEST_CASE("issues/stack overflow", "make sure various operations repeated don't trigger stack overflow") { sol::state lua; diff --git a/tests/test_proxies.cpp b/tests/test_proxies.cpp new file mode 100644 index 00000000..625ececd --- /dev/null +++ b/tests/test_proxies.cpp @@ -0,0 +1,31 @@ +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include + +#include + +#include +#include "test_stack_guard.hpp" + +TEST_CASE("proxy/function results", "make sure that function results return proper proxies and can be indexed nicely") { + sol::state lua; + SECTION("unsafe_function_result") { + auto ufr = lua.script("return 1, 2, 3, 4"); + int accum = 0; + for (const auto& r : ufr) { + int v = r; + accum += v; + } + REQUIRE(accum == 10); + } + SECTION("protected_function_result") { + auto pfr = lua.safe_script("return 1, 2, 3, 4"); + int accum = 0; + for (const auto& r : pfr) { + int v = r; + accum += v; + } + REQUIRE(accum == 10); + } +} diff --git a/tests/test_simple_usertypes.cpp b/tests/test_simple_usertypes.cpp index 6c0342d7..a952b00d 100644 --- a/tests/test_simple_usertypes.cpp +++ b/tests/test_simple_usertypes.cpp @@ -1,6 +1,8 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 #include + #include #include diff --git a/tests/test_state.cpp b/tests/test_state.cpp index 0f410310..6373500c 100644 --- a/tests/test_state.cpp +++ b/tests/test_state.cpp @@ -1,7 +1,10 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include + #include #include #include diff --git a/tests/test_storage.cpp b/tests/test_storage.cpp index 52f7cd23..d1233be3 100644 --- a/tests/test_storage.cpp +++ b/tests/test_storage.cpp @@ -1,7 +1,9 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include TEST_CASE("storage/registry construction", "ensure entries from the registry can be retrieved") { const auto& code = R"( diff --git a/tests/test_strings.cpp b/tests/test_strings.cpp index b1a1fc60..27864777 100644 --- a/tests/test_strings.cpp +++ b/tests/test_strings.cpp @@ -1,7 +1,9 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include #include diff --git a/tests/test_tables.cpp b/tests/test_tables.cpp index 79b2dfe5..f2c8cc59 100644 --- a/tests/test_tables.cpp +++ b/tests/test_tables.cpp @@ -1,7 +1,9 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include #include #include diff --git a/tests/test_usertypes.cpp b/tests/test_usertypes.cpp index 60833e71..0f330afe 100644 --- a/tests/test_usertypes.cpp +++ b/tests/test_usertypes.cpp @@ -1,6 +1,8 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 #include + #include #include diff --git a/tests/test_utility.cpp b/tests/test_utility.cpp index b4c686e2..fc56b1a6 100644 --- a/tests/test_utility.cpp +++ b/tests/test_utility.cpp @@ -1,7 +1,9 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include #include #include diff --git a/tests/test_variadics.cpp b/tests/test_variadics.cpp index 7fca3516..b0034a0a 100644 --- a/tests/test_variadics.cpp +++ b/tests/test_variadics.cpp @@ -1,7 +1,9 @@ -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include #include #include diff --git a/tests/tests.cpp b/tests/tests.cpp index fea59f87..0bb96048 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -1,8 +1,10 @@ #define CATCH_CONFIG_MAIN -#define SOL_CHECK_ARGUMENTS +#define SOL_CHECK_ARGUMENTS 1 +#define SOL_ENABLE_INTEROP 1 + +#include #include -#include #include #include