From bd3fe0cac583739bc0d7c4b5c8f301bb350abca0 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Fri, 30 Aug 2019 00:19:31 -0400 Subject: Renamed lib to deps so github will ignore it for language stats --- deps/sol2/examples/source/dump.cpp | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 deps/sol2/examples/source/dump.cpp (limited to 'deps/sol2/examples/source/dump.cpp') diff --git a/deps/sol2/examples/source/dump.cpp b/deps/sol2/examples/source/dump.cpp new file mode 100644 index 0000000..16d94b7 --- /dev/null +++ b/deps/sol2/examples/source/dump.cpp @@ -0,0 +1,42 @@ +#define SOL_ALL_SAFETIES_ON 1 +#include + +#include +#include "assert.hpp" + + +int main () { + std::cout << "=== dump (serialize between states) ===" << std::endl; + + // 2 states, transferring function from 1 to another + sol::state lua; + sol::state lua2; + + // we're not going to run the code on the first + // state, so we only actually need + // the base lib on the second state + // (where we will run the serialized bytecode) + lua2.open_libraries(sol::lib::base); + + // load this code (but do not run) + sol::load_result lr = lua.load("a = function (v) print(v) return v end"); + // check if it's sucessfully loaded + c_assert(lr.valid()); + + // turn it into a function, then dump the bytecode + sol::protected_function target = lr; + sol::bytecode target_bc = target.dump(); + + // reload the byte code + // in the SECOND state + auto result2 = lua2.safe_script(target_bc.as_string_view(), sol::script_pass_on_error); + // check if it was done properly + c_assert(result2.valid()); + + // check in the second state if it was valid + sol::protected_function pf = lua2["a"]; + int v = pf(25557); + c_assert(v == 25557); + + return 0; +} \ No newline at end of file -- cgit v1.2.3