diff --git a/CMakeLists.txt b/CMakeLists.txt
index 63b4b5ff62..9682863a04 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -638,6 +638,9 @@ set(CommonVR
)
include_directories(ext/OpenXR-SDK/include)
+# For ext/sol includes, that are usually included as sol/*.hpp
+include_directories(ext)
+
add_library(Common STATIC
${CommonX86}
${CommonARM}
@@ -1526,6 +1529,8 @@ list(APPEND NativeAppSource
UI/ImDebugger/ImDebugger.h
UI/ImDebugger/ImGe.cpp
UI/ImDebugger/ImGe.h
+ UI/ImDebugger/ImConsole.cpp
+ UI/ImDebugger/ImConsole.h
UI/ImDebugger/ImDisasmView.cpp
UI/ImDebugger/ImDisasmView.h
UI/ImDebugger/ImMemView.cpp
@@ -2048,6 +2053,8 @@ add_library(${CoreLibName} ${CoreLinkType}
Core/KeyMap.h
Core/KeyMapDefaults.cpp
Core/KeyMapDefaults.h
+ Core/LuaContext.cpp
+ Core/LuaContext.h
Core/RetroAchievements.h
Core/RetroAchievements.cpp
Core/ThreadEventQueue.h
diff --git a/Common/Common.vcxproj b/Common/Common.vcxproj
index d3df131541..13782d7a60 100644
--- a/Common/Common.vcxproj
+++ b/Common/Common.vcxproj
@@ -447,6 +447,9 @@
+
+
+
diff --git a/Common/Common.vcxproj.filters b/Common/Common.vcxproj.filters
index a16e2e057a..61b63aee76 100644
--- a/Common/Common.vcxproj.filters
+++ b/Common/Common.vcxproj.filters
@@ -682,6 +682,15 @@
Net
+
+ ext\sol
+
+
+ ext\sol
+
+
+ ext\sol
+
@@ -1416,6 +1425,9 @@
{71e2e5df-5cfb-41e6-97da-f71584a7394e}
+
+ {ec7d8691-bb7f-4689-b66a-cb60c1f48afd}
+
@@ -1469,4 +1481,4 @@
ext\lua
-
\ No newline at end of file
+
diff --git a/Common/Thread/ThreadUtil.cpp b/Common/Thread/ThreadUtil.cpp
index 8d60ea6140..3e7a809e8b 100644
--- a/Common/Thread/ThreadUtil.cpp
+++ b/Common/Thread/ThreadUtil.cpp
@@ -31,7 +31,10 @@ void AttachThreadToJNI() {
if (g_attach) {
g_attach();
} else {
+#if PPSSPP_PLATFORM(ANDROID)
+ // Not relevant on other platforms.
ERROR_LOG(Log::System, "Couldn't attach thread - g_attach not set");
+#endif
}
}
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index bd5959c82c..2f8dfa962b 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -589,6 +589,7 @@
+
@@ -1210,6 +1211,7 @@
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index ff72532a1d..cf8a987d33 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -1345,6 +1345,9 @@
Util
+
+ Core
+
@@ -2172,6 +2175,9 @@
Util
+
+ Core
+
@@ -2200,4 +2206,4 @@
Ext
-
\ No newline at end of file
+
diff --git a/Core/Debugger/DisassemblyManager.h b/Core/Debugger/DisassemblyManager.h
index 720d3b6d67..b2e028e070 100644
--- a/Core/Debugger/DisassemblyManager.h
+++ b/Core/Debugger/DisassemblyManager.h
@@ -43,13 +43,13 @@ struct DisassemblyLineInfo
u32 totalSize;
};
-enum LineType { LINE_UP, LINE_DOWN, LINE_RIGHT };
+enum DisasmLineType { LINE_UP, LINE_DOWN, LINE_RIGHT };
struct BranchLine
{
u32 first;
u32 second;
- LineType type;
+ DisasmLineType type;
int laneIndex;
bool operator<(const BranchLine& other) const
diff --git a/Core/HLE/proAdhoc.cpp b/Core/HLE/proAdhoc.cpp
index 29013348b0..b62a656a43 100644
--- a/Core/HLE/proAdhoc.cpp
+++ b/Core/HLE/proAdhoc.cpp
@@ -54,6 +54,11 @@
#include "Core/Instance.h"
#include "proAdhoc.h"
+#ifdef _WIN32
+#undef errno
+#define errno WSAGetLastError()
+#endif
+
#if PPSSPP_PLATFORM(SWITCH) && !defined(INADDR_NONE)
// Missing toolchain define
#define INADDR_NONE 0xFFFFFFFF
diff --git a/Core/HLE/proAdhocServer.cpp b/Core/HLE/proAdhocServer.cpp
index e86a0033b4..4560349fe0 100644
--- a/Core/HLE/proAdhocServer.cpp
+++ b/Core/HLE/proAdhocServer.cpp
@@ -41,6 +41,11 @@
#include "Core/Core.h"
#include "Core/HLE/proAdhocServer.h"
+#ifdef _WIN32
+#undef errno
+#define errno WSAGetLastError()
+#endif
+
// User Count
uint32_t _db_user_count = 0;
diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp
index 500287d2d9..e081888890 100644
--- a/Core/HLE/sceNetAdhoc.cpp
+++ b/Core/HLE/sceNetAdhoc.cpp
@@ -53,6 +53,10 @@
#include "Core/HLE/proAdhocServer.h"
#include "Core/HLE/KernelWaitHelpers.h"
+#ifdef _WIN32
+#undef errno
+#define errno WSAGetLastError()
+#endif
// shared in sceNetAdhoc.h since it need to be used from sceNet.cpp also
// TODO: Make accessor functions instead, and throw all this state in a struct.
diff --git a/Core/LuaContext.cpp b/Core/LuaContext.cpp
new file mode 100644
index 0000000000..a7803d52b3
--- /dev/null
+++ b/Core/LuaContext.cpp
@@ -0,0 +1,141 @@
+#include
+
+#include "Common/Log.h"
+#include "Common/StringUtils.h"
+#include "Core/LuaContext.h"
+#include "Core/MemMap.h"
+
+// Sol is expensive to include so we only do it here.
+#include "ext/sol/sol.hpp"
+
+LuaContext g_lua;
+
+static bool IsProbablyExpression(std::string_view input) {
+ // Heuristic: If it's a single-line statement without assignment or keywords, assume it's an expression.
+ return !(input.find("=") != std::string_view::npos ||
+ input.find("function") != std::string_view::npos ||
+ input.find("do") != std::string_view::npos ||
+ input.find("end") != std::string_view::npos ||
+ input.find("return") != std::string_view::npos ||
+ input.find("local") != std::string_view::npos);
+}
+
+// Custom print function
+static void print(const std::string& message) {
+ g_lua.Print(message);
+}
+
+// TODO: Should these also echo to the console?
+static void debug(const std::string &message) {
+ DEBUG_LOG(Log::System, "%s", message.c_str());
+}
+
+static void info(const std::string &message) {
+ INFO_LOG(Log::System, "%s", message.c_str());
+}
+
+static void warn(const std::string &message) {
+ WARN_LOG(Log::System, "%s", message.c_str());
+}
+
+static void error(const std::string &message) {
+ ERROR_LOG(Log::System, "%s", message.c_str());
+}
+
+// TODO: We should probably disallow or at least discourage raw read/writes and instead
+// only support read/writes that refer to the name of a memory region.
+static int r32(int address) {
+ if (Memory::IsValid4AlignedAddress(address)) {
+ return Memory::Read_U32(address);
+ } else {
+ g_lua.Print(LogLineType::Error, StringFromFormat("r32: bad address %08x", address));
+ return 0;
+ }
+}
+
+static void w32(int address, int value) {
+ if (Memory::IsValid4AlignedAddress(address)) {
+ Memory::Write_U32(value, address); // NOTE: These are backwards for historical reasons.
+ } else {
+ g_lua.Print(LogLineType::Error, StringFromFormat("w32: bad address %08x trying to write %08x", address, value));
+ }
+}
+
+void LuaContext::Init() {
+ _dbg_assert_(lua_ == nullptr);
+ lua_.reset(new sol::state());
+ lua_->open_libraries(sol::lib::base);
+ lua_->open_libraries(sol::lib::table);
+ lua_->open_libraries(sol::lib::bit32);
+ lua_->open_libraries(sol::lib::string);
+ lua_->open_libraries(sol::lib::math);
+
+ extern const char *PPSSPP_GIT_VERSION;
+ lua_->set("ver", PPSSPP_GIT_VERSION);
+
+ lua_->set("print", &print);
+ lua_->set("debug", &debug);
+ lua_->set("info", &info);
+ lua_->set("warn", &warn);
+ lua_->set("error", &error);
+
+ lua_->set("r32", &r32);
+}
+
+void LuaContext::Shutdown() {
+ lua_.reset();
+}
+
+const char *SolTypeToString(sol::type type) {
+ switch (type) {
+ case sol::type::boolean: return "boolean";
+ default: return "other";
+ }
+}
+
+void LuaContext::Print(LogLineType type, std::string_view text) {
+ lines_.push_back(LuaLogLine{ type, std::string(text)});
+}
+
+void LuaContext::ExecuteConsoleCommand(std::string_view cmd) {
+ // TODO: Also rewrite expressions like:
+ // print "hello"
+ // to
+ // print("hello") ?
+ try {
+ std::string command;
+ if (IsProbablyExpression(cmd)) {
+ command = "return ";
+ command += cmd;
+ } else {
+ command = cmd;
+ }
+ auto result = lua_->script(command);
+ if (result.valid()) {
+ for (const sol::stack_proxy &item : result) {
+ switch (item.get_type()) {
+ case sol::type::number:
+ {
+ int num = item.get();
+ lines_.push_back(LuaLogLine{ LogLineType::Integer, StringFromFormat("%08x (%d)", num, num), item.get()});
+ break;
+ }
+ case sol::type::string:
+ {
+ // TODO: Linebreak multi-line strings.
+ lines_.push_back(LuaLogLine{ LogLineType::String, item.get() });
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ } else {
+ sol::error err = result;
+ lines_.push_back(LuaLogLine{ LogLineType::Error, std::string(err.what()) });
+ }
+ } catch (sol::error e) {
+ ERROR_LOG(Log::System, "Lua exception: %s", e.what());
+ lines_.push_back(LuaLogLine{ LogLineType::Error, std::string(e.what()) });
+ }
+}
diff --git a/Core/LuaContext.h b/Core/LuaContext.h
new file mode 100644
index 0000000000..13b7c5ceb8
--- /dev/null
+++ b/Core/LuaContext.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include
+#include
+#include
+
+#include "ext/sol/forward.hpp"
+
+struct lua_State;
+
+enum class LogLineType {
+ Cmd,
+ String,
+ Integer,
+ Error,
+ External,
+ Url,
+};
+
+// A bit richer than regular log lines, so we can display them in color, and allow various UI tricks.
+// All have a string, but some may also have a number or other value.
+struct LuaLogLine {
+ LogLineType type;
+ std::string line;
+ int number;
+};
+
+class LuaContext {
+public:
+ void Init();
+ void Shutdown();
+
+ const std::vector GetLines() const {
+ return lines_;
+ }
+ void Clear() { lines_.clear(); }
+
+ void Print(LogLineType type, std::string_view text);
+ void Print(std::string_view text) {
+ Print(LogLineType::External, text);
+ }
+
+ // For the console.
+ void ExecuteConsoleCommand(std::string_view cmd);
+
+private:
+ std::unique_ptr lua_;
+ std::vector lines_;
+};
+
+extern LuaContext g_lua;
diff --git a/Core/System.cpp b/Core/System.cpp
index 27a27998ef..e82bc954d5 100644
--- a/Core/System.cpp
+++ b/Core/System.cpp
@@ -58,6 +58,7 @@
#include "Core/CoreTiming.h"
#include "Core/CoreParameter.h"
#include "Core/FileLoaders/RamCachingFileLoader.h"
+#include "Core/LuaContext.h"
#include "Core/FileSystems/MetaFileSystem.h"
#include "Core/Loaders.h"
#include "Core/PSPLoaders.h"
@@ -217,6 +218,8 @@ bool CPU_Init(std::string *errorString, FileLoader *loadedFile, IdentifiedFileTy
g_symbolMap = new SymbolMap();
+ g_lua.Init();
+
// Default memory settings
// Seems to be the safest place currently..
Memory::g_MemorySize = Memory::RAM_NORMAL_SIZE; // 32 MB of ram by default
@@ -362,6 +365,8 @@ void CPU_Shutdown() {
delete g_symbolMap;
g_symbolMap = nullptr;
+ g_lua.Shutdown();
+
g_CoreParameter.mountIsoLoader = nullptr;
}
diff --git a/UI/ImDebugger/ImConsole.cpp b/UI/ImDebugger/ImConsole.cpp
new file mode 100644
index 0000000000..c2f87f7f67
--- /dev/null
+++ b/UI/ImDebugger/ImConsole.cpp
@@ -0,0 +1,300 @@
+#pragma once
+
+#include
+
+#include "ext/imgui/imgui.h"
+
+#include "UI/ImDebugger/ImDebugger.h"
+#include "UI/ImDebugger/ImConsole.h"
+#include "Core/LuaContext.h"
+#include "Common/StringUtils.h"
+
+ImConsole::ImConsole() {
+ memset(InputBuf, 0, sizeof(InputBuf));
+
+ HistoryPos = -1;
+
+ // "CLASSIFY" is here to provide the test case where "C"+[tab] completes to "CL" and display multiple matches.
+ Commands.push_back("HELP");
+ Commands.push_back("HISTORY");
+ Commands.push_back("CLEAR");
+ AutoScroll = true;
+ ScrollToBottom = false;
+}
+
+ImConsole::~ImConsole() {
+ for (int i = 0; i < History.Size; i++)
+ ImGui::MemFree(History[i]);
+}
+
+// Portable helpers
+static int Stricmp(const char* s1, const char* s2) { int d; while ((d = toupper(*s2) - toupper(*s1)) == 0 && *s1) { s1++; s2++; } return d; }
+static int Strnicmp(const char* s1, const char* s2, int n) { int d = 0; while (n > 0 && (d = toupper(*s2) - toupper(*s1)) == 0 && *s1) { s1++; s2++; n--; } return d; }
+static char* Strdup(const char* s) { IM_ASSERT(s); size_t len = strlen(s) + 1; void* buf = ImGui::MemAlloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)s, len); }
+static void Strtrim(char* s) { char* str_end = s + strlen(s); while (str_end > s && str_end[-1] == ' ') str_end--; *str_end = 0; }
+
+// In C++11 you'd be better off using lambdas for this sort of forwarding callbacks
+static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) {
+ ImConsole* console = (ImConsole*)data->UserData;
+ return console->TextEditCallback(data);
+}
+
+void ImConsole::Draw(ImConfig &cfg) {
+ ImGui::SetNextWindowSize(ImVec2(520, 600), ImGuiCond_FirstUseEver);
+ if (!ImGui::Begin("Lua Console", &cfg.luaConsoleOpen)) {
+ ImGui::End();
+ return;
+ }
+
+ if (ImGui::SmallButton("Clear")) {
+ g_lua.Clear();
+ }
+
+ ImGui::SameLine();
+
+ bool copy_to_clipboard = ImGui::SmallButton("Copy");
+ ImGui::Separator();
+
+ // Options menu
+ if (ImGui::BeginPopup("Options")) {
+ ImGui::Checkbox("Auto-scroll", &AutoScroll);
+ ImGui::EndPopup();
+ }
+
+ // Options, Filter
+ //ImGui::SetNextItemShortcut(ImGuiMod_Ctrl | ImGuiKey_O, ImGuiInputFlags_Tooltip);
+ if (ImGui::Button("Options"))
+ ImGui::OpenPopup("Options");
+ ImGui::SameLine();
+ Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
+ ImGui::Separator();
+
+ // Reserve enough left-over height for 1 separator + 1 input text
+ const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing();
+ if (ImGui::BeginChild("ScrollingRegion", ImVec2(0, -footer_height_to_reserve), ImGuiChildFlags_None, ImGuiWindowFlags_HorizontalScrollbar | ImGuiChildFlags_NavFlattened)) {
+ if (ImGui::BeginPopupContextWindow()) {
+ if (ImGui::Selectable("Clear"))
+ g_lua.Clear();
+ ImGui::EndPopup();
+ }
+
+ // Display every line as a separate entry so we can change their color or add custom widgets.
+ // If you only want raw text you can use ImGui::TextUnformatted(log.begin(), log.end());
+ // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping
+ // to only process visible items. The clipper will automatically measure the height of your first item and then
+ // "seek" to display only items in the visible area.
+ // To use the clipper we can replace your standard loop:
+ // for (int i = 0; i < Items.Size; i++)
+ // With:
+ // ImGuiListClipper clipper;
+ // clipper.Begin(Items.Size);
+ // while (clipper.Step())
+ // for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+ // - That your items are evenly spaced (same height)
+ // - That you have cheap random access to your elements (you can access them given their index,
+ // without processing all the ones before)
+ // You cannot this code as-is if a filter is active because it breaks the 'cheap random-access' property.
+ // We would need random-access on the post-filtered list.
+ // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices
+ // or offsets of items that passed the filtering test, recomputing this array when user changes the filter,
+ // and appending newly elements as they are inserted. This is left as a task to the user until we can manage
+ // to improve this example code!
+ // If your items are of variable height:
+ // - Split them into same height items would be simpler and facilitate random-seeking into your list.
+ // - Consider using manual call to IsRectVisible() and skipping extraneous decoration from your items.
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4, 1)); // Tighten spacing
+ if (copy_to_clipboard)
+ ImGui::LogToClipboard();
+ for (const auto &item : g_lua.GetLines()) {
+ if (!Filter.PassFilter(item.line.c_str()))
+ continue;
+ ImVec4 color;
+ bool has_color = true;
+
+ switch (item.type) {
+ case LogLineType::Cmd: color = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); break;
+ case LogLineType::Error: color = ImVec4(1.0f, 0.4f, 0.4f, 1.0f); break;
+ case LogLineType::External: color = ImVec4(0.8f, 0.8f, 1.0f, 1.0f); break;
+ case LogLineType::Integer: color = ImVec4(1.0f, 1.0f, 0.8f, 1.0f); break;
+ case LogLineType::String: color = ImVec4(0.8f, 1.0f, 0.8f, 1.0f); break;
+ default:
+ has_color = false;
+ break;
+ }
+
+ if (has_color)
+ ImGui::PushStyleColor(ImGuiCol_Text, color);
+ switch (item.type) {
+ case LogLineType::Url:
+ if (ImGui::TextLink(item.line.c_str())) {
+ System_LaunchUrl(LaunchUrlType::BROWSER_URL, item.line.c_str());
+ }
+ break;
+ default:
+ ImGui::TextUnformatted(item.line.data(), item.line.data() + item.line.size());
+ break;
+ }
+ if (has_color)
+ ImGui::PopStyleColor();
+ }
+ if (copy_to_clipboard)
+ ImGui::LogFinish();
+
+ // Keep up at the bottom of the scroll region if we were already at the bottom at the beginning of the frame.
+ // Using a scrollbar or mouse-wheel will take away from the bottom edge.
+ if (ScrollToBottom || (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()))
+ ImGui::SetScrollHereY(1.0f);
+ ScrollToBottom = false;
+
+ ImGui::PopStyleVar();
+ }
+ ImGui::EndChild();
+ ImGui::Separator();
+
+ // Command-line
+ bool reclaim_focus = false;
+ ImGuiInputTextFlags input_text_flags = ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_EscapeClearsAll | ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory;
+ if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), input_text_flags, &TextEditCallbackStub, (void*)this)) {
+ char* s = InputBuf;
+ Strtrim(s);
+ if (s[0])
+ ExecCommand(s);
+ strcpy(s, "");
+ reclaim_focus = true;
+ }
+
+ // Auto-focus on window apparition
+ ImGui::SetItemDefaultFocus();
+ if (reclaim_focus)
+ ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget
+
+ ImGui::End();
+}
+
+void ImConsole::ExecCommand(const char* command_line) {
+ // Insert into history. First find match and delete it so it can be pushed to the back.
+ // This isn't trying to be smart or optimal.
+ HistoryPos = -1;
+ for (int i = History.Size - 1; i >= 0; i--)
+ if (Stricmp(History[i], command_line) == 0)
+ {
+ ImGui::MemFree(History[i]);
+ History.erase(History.begin() + i);
+ break;
+ }
+ History.push_back(Strdup(command_line));
+
+ g_lua.Print(LogLineType::Cmd, std::string(command_line));
+
+ // Process command
+ if (Stricmp(command_line, "clear") == 0) {
+ g_lua.Clear();
+ } else if (Stricmp(command_line, "help") == 0) {
+ g_lua.Print("Available non-Lua commands:");
+ for (int i = 0; i < Commands.Size; i++)
+ g_lua.Print(StringFromFormat("- %s", Commands[i]));
+ g_lua.Print("For Lua help:");
+ g_lua.Print(LogLineType::Url, "https://www.lua.org/manual/5.3/");
+ // TODO: Also print available Lua commands.
+ } else if (Stricmp(command_line, "history") == 0) {
+ int first = History.Size - 10;
+ for (int i = first > 0 ? first : 0; i < History.Size; i++)
+ g_lua.Print(StringFromFormat("%3d: %s", i, History[i]));
+ } else {
+ g_lua.ExecuteConsoleCommand(command_line);
+ }
+
+ // On command input, we scroll to bottom even if AutoScroll==false
+ ScrollToBottom = true;
+}
+
+int ImConsole::TextEditCallback(ImGuiInputTextCallbackData* data) {
+ //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd);
+ switch (data->EventFlag) {
+ case ImGuiInputTextFlags_CallbackCompletion:
+ {
+ // Example of TEXT COMPLETION
+
+ // Locate beginning of current word
+ const char* word_end = data->Buf + data->CursorPos;
+ const char* word_start = word_end;
+ while (word_start > data->Buf)
+ {
+ const char c = word_start[-1];
+ if (c == ' ' || c == '\t' || c == ',' || c == ';')
+ break;
+ word_start--;
+ }
+
+ // Build a list of candidates
+ ImVector candidates;
+ for (int i = 0; i < Commands.Size; i++)
+ if (Strnicmp(Commands[i], word_start, (int)(word_end - word_start)) == 0)
+ candidates.push_back(Commands[i]);
+
+ // TODO: Add lua globals to candidates!
+
+ if (candidates.Size == 0) {
+ // No match. TODO: Match against lua globals.
+ g_lua.Print(StringFromFormat("No match for \"%.*s\"!", (int)(word_end - word_start), word_start));
+ } else if (candidates.Size == 1) {
+ // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing.
+ data->DeleteChars((int)(word_start - data->Buf), (int)(word_end - word_start));
+ data->InsertChars(data->CursorPos, candidates[0]);
+ data->InsertChars(data->CursorPos, " ");
+ } else {
+ // Multiple matches. Complete as much as we can..
+ // So inputing "C"+Tab will complete to "CL" then display "CLEAR" and "CLASSIFY" as matches.
+ int match_len = (int)(word_end - word_start);
+ for (;;) {
+ int c = 0;
+ bool all_candidates_matches = true;
+ for (int i = 0; i < candidates.Size && all_candidates_matches; i++)
+ if (i == 0)
+ c = toupper(candidates[i][match_len]);
+ else if (c == 0 || c != toupper(candidates[i][match_len]))
+ all_candidates_matches = false;
+ if (!all_candidates_matches)
+ break;
+ match_len++;
+ }
+
+ if (match_len > 0) {
+ data->DeleteChars((int)(word_start - data->Buf), (int)(word_end - word_start));
+ data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len);
+ }
+
+ // List matches
+ g_lua.Print("Possible matches:");
+ for (int i = 0; i < candidates.Size; i++) {
+ g_lua.Print(StringFromFormat("- %s", candidates[i]));
+ }
+ }
+
+ break;
+ }
+ case ImGuiInputTextFlags_CallbackHistory:
+ {
+ // Example of HISTORY
+ const int prev_history_pos = HistoryPos;
+ if (data->EventKey == ImGuiKey_UpArrow) {
+ if (HistoryPos == -1)
+ HistoryPos = History.Size - 1;
+ else if (HistoryPos > 0)
+ HistoryPos--;
+ } else if (data->EventKey == ImGuiKey_DownArrow) {
+ if (HistoryPos != -1)
+ if (++HistoryPos >= History.Size)
+ HistoryPos = -1;
+ }
+
+ // A better implementation would preserve the data on the current input line along with cursor position.
+ if (prev_history_pos != HistoryPos) {
+ const char* history_str = (HistoryPos >= 0) ? History[HistoryPos] : "";
+ data->DeleteChars(0, data->BufTextLen);
+ data->InsertChars(0, history_str);
+ }
+ }
+ }
+ return 0;
+}
diff --git a/UI/ImDebugger/ImConsole.h b/UI/ImDebugger/ImConsole.h
new file mode 100644
index 0000000000..b6f93fde7d
--- /dev/null
+++ b/UI/ImDebugger/ImConsole.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#include
+#include
+
+#include "ext/imgui/imgui.h"
+
+// Adapted from the ImGui demo.
+class ImConsole {
+public:
+ ImConsole();
+ ~ImConsole();
+
+ void Draw(ImConfig &cfg);
+ void ExecCommand(const char* command_line);
+
+ int TextEditCallback(ImGuiInputTextCallbackData* data);
+
+private:
+ char InputBuf[256];
+ ImVector Commands;
+ ImVector History;
+ int HistoryPos; // -1: new line, 0..History.Size-1 browsing history.
+ ImGuiTextFilter Filter;
+ bool AutoScroll;
+ bool ScrollToBottom;
+};
diff --git a/UI/ImDebugger/ImDebugger.cpp b/UI/ImDebugger/ImDebugger.cpp
index 3c8358c335..f47744b192 100644
--- a/UI/ImDebugger/ImDebugger.cpp
+++ b/UI/ImDebugger/ImDebugger.cpp
@@ -1757,6 +1757,7 @@ void ImDebugger::Frame(MIPSDebugInterface *mipsDebug, GPUDebugInterface *gpuDebu
ImGui::EndMenu();
}
if (ImGui::BeginMenu("Tools")) {
+ ImGui::MenuItem("Lua Console", nullptr, &cfg_.luaConsoleOpen);
ImGui::MenuItem("Debug stats", nullptr, &cfg_.debugStatsOpen);
ImGui::MenuItem("Struct viewer", nullptr, &cfg_.structViewerOpen);
ImGui::MenuItem("Log channels", nullptr, &cfg_.logConfigOpen);
@@ -1958,6 +1959,9 @@ void ImDebugger::Frame(MIPSDebugInterface *mipsDebug, GPUDebugInterface *gpuDebu
case ImCmd::SHOW_IN_PIXEL_VIEWER:
break;
}
+ if (cfg_.luaConsoleOpen) {
+ luaConsole_.Draw(cfg_);
+ }
}
void ImDebugger::Snapshot(MIPSState *mips) {
@@ -2317,6 +2321,7 @@ void ImConfig::SyncConfig(IniFile *ini, bool save) {
sync.Sync("internalsOpen", &internalsOpen, false);
sync.Sync("sasAudioOpen", &sasAudioOpen, false);
sync.Sync("logConfigOpen", &logConfigOpen, false);
+ sync.Sync("luaConsoleOpen", &luaConsoleOpen, false);
sync.Sync("utilityModulesOpen", &utilityModulesOpen, false);
for (int i = 0; i < 4; i++) {
char name[64];
diff --git a/UI/ImDebugger/ImDebugger.h b/UI/ImDebugger/ImDebugger.h
index aa3b01dadb..dd16b07932 100644
--- a/UI/ImDebugger/ImDebugger.h
+++ b/UI/ImDebugger/ImDebugger.h
@@ -20,6 +20,7 @@
#include "UI/ImDebugger/ImMemView.h"
#include "UI/ImDebugger/ImStructViewer.h"
#include "UI/ImDebugger/ImGe.h"
+#include "UI/ImDebugger/ImConsole.h"
// This is the main state container of the whole Dear ImGUI-based in-game cross-platform debugger.
//
@@ -115,7 +116,6 @@ class IniFile;
struct ImConfig {
// Defaults for saved settings are set in SyncConfig.
-
bool disasmOpen;
bool demoOpen;
bool gprOpen;
@@ -152,6 +152,7 @@ struct ImConfig {
bool utilityModulesOpen;
bool atracToolOpen;
bool memViewOpen[4];
+ bool luaConsoleOpen;
// HLE explorer settings
// bool filterByUsed = true;
@@ -246,6 +247,7 @@ private:
ImGePixelViewerWindow pixelViewer_;
ImMemDumpWindow memDumpWindow_;
ImAtracToolWindow atracToolWindow_;
+ ImConsole luaConsole_;
ImSnapshotState newSnapshot_;
ImSnapshotState snapshot_;
diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
index 7314e2d639..85b7abf18f 100644
--- a/UI/MainScreen.cpp
+++ b/UI/MainScreen.cpp
@@ -40,7 +40,6 @@
#include "Common/File/FileUtil.h"
#include "Common/TimeUtil.h"
#include "Common/StringUtils.h"
-#include "Common/System/System.h"
#include "Common/System/OSD.h"
#include "Core/System.h"
#include "Core/Util/RecentFiles.h"
diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp
index 1193dd096f..47ec95b391 100644
--- a/UI/NativeApp.cpp
+++ b/UI/NativeApp.cpp
@@ -27,6 +27,7 @@
// Background worker threads should be spawned in NativeInit and joined
// in NativeShutdown.
+#include
#include
#include
diff --git a/UI/UI.vcxproj b/UI/UI.vcxproj
index 741a3406f6..819dba9315 100644
--- a/UI/UI.vcxproj
+++ b/UI/UI.vcxproj
@@ -51,6 +51,7 @@
+
@@ -96,6 +97,7 @@
+
diff --git a/UI/UI.vcxproj.filters b/UI/UI.vcxproj.filters
index 45b9a0ff00..248c91376d 100644
--- a/UI/UI.vcxproj.filters
+++ b/UI/UI.vcxproj.filters
@@ -113,6 +113,9 @@
ImDebugger
+
+ ImDebugger
+
@@ -226,6 +229,9 @@
ImDebugger
+
+ ImDebugger
+
@@ -238,4 +244,4 @@
{fda6bc55-1386-4650-a274-44fac9605ea3}
-
\ No newline at end of file
+
diff --git a/UWP/CoreUWP/CoreUWP.vcxproj b/UWP/CoreUWP/CoreUWP.vcxproj
index d53eda7dc4..f26a67573e 100644
--- a/UWP/CoreUWP/CoreUWP.vcxproj
+++ b/UWP/CoreUWP/CoreUWP.vcxproj
@@ -278,6 +278,7 @@
+
@@ -539,6 +540,7 @@
+
@@ -1032,6 +1034,9 @@
{191b6f52-ad66-4172-bd20-733eeeceef8c}
+
+ {3cea9e74-a31d-4044-a378-ed2e485931f2}
+
{d31fd4f0-53eb-477c-9dc7-149796f628e2}
diff --git a/UWP/CoreUWP/CoreUWP.vcxproj.filters b/UWP/CoreUWP/CoreUWP.vcxproj.filters
index d19c655206..ad84f6d35f 100644
--- a/UWP/CoreUWP/CoreUWP.vcxproj.filters
+++ b/UWP/CoreUWP/CoreUWP.vcxproj.filters
@@ -1233,6 +1233,9 @@
HLE
+
+ Dialog
+
Util
@@ -1964,10 +1967,13 @@
Util
+
+ Dialog
+
Ext\gason
-
\ No newline at end of file
+
diff --git a/UWP/UI_UWP/UI_UWP.vcxproj b/UWP/UI_UWP/UI_UWP.vcxproj
index 7d73b44439..579cf2a9d3 100644
--- a/UWP/UI_UWP/UI_UWP.vcxproj
+++ b/UWP/UI_UWP/UI_UWP.vcxproj
@@ -126,6 +126,7 @@
+
@@ -171,6 +172,7 @@
+
@@ -204,6 +206,9 @@
{acb316ca-3ecb-48e5-be0a-91e72d5b0f12}
+
+ {3cea9e74-a31d-4044-a378-ed2e485931f2}
+
{4c9d52d0-310a-4347-8991-e3788cb22169}
diff --git a/UWP/UI_UWP/UI_UWP.vcxproj.filters b/UWP/UI_UWP/UI_UWP.vcxproj.filters
index 9103eefc70..b07ec21e81 100644
--- a/UWP/UI_UWP/UI_UWP.vcxproj.filters
+++ b/UWP/UI_UWP/UI_UWP.vcxproj.filters
@@ -54,6 +54,9 @@
ImDebugger
+
+ ImDebugger
+
@@ -109,10 +112,13 @@
ImDebugger
+
+ ImDebugger
+
{4013cb89-6145-451c-9cb1-d63d01f66bd5}
-
\ No newline at end of file
+
diff --git a/UWP/UWP.vcxproj b/UWP/UWP.vcxproj
index 1467a92068..1b6b8d0b9e 100644
--- a/UWP/UWP.vcxproj
+++ b/UWP/UWP.vcxproj
@@ -497,6 +497,9 @@
{75286959-e7a2-4cbe-8b95-bf05c9c540fe}
+
+ {3cea9e74-a31d-4044-a378-ed2e485931f2}
+
{2b2d16bd-1d37-46af-a3f8-552900951b26}
@@ -528,4 +531,4 @@
-
+
\ No newline at end of file
diff --git a/android/jni/Android.mk b/android/jni/Android.mk
index c061a27b73..3a8bb39c7e 100644
--- a/android/jni/Android.mk
+++ b/android/jni/Android.mk
@@ -601,6 +601,7 @@ EXEC_AND_LIB_FILES := \
$(SRC)/Core/Instance.cpp \
$(SRC)/Core/KeyMap.cpp \
$(SRC)/Core/KeyMapDefaults.cpp \
+ $(SRC)/Core/LuaContext.cpp \
$(SRC)/Core/Loaders.cpp \
$(SRC)/Core/PSPLoaders.cpp \
$(SRC)/Core/FileLoaders/CachingFileLoader.cpp \
@@ -889,6 +890,7 @@ LOCAL_SRC_FILES := \
$(SRC)/android/jni/OpenSLContext.cpp \
$(SRC)/UI/ImDebugger/ImDebugger.cpp \
$(SRC)/UI/ImDebugger/ImGe.cpp \
+ $(SRC)/UI/ImDebugger/ImConsole.cpp \
$(SRC)/UI/ImDebugger/ImDisasmView.cpp \
$(SRC)/UI/ImDebugger/ImMemView.cpp \
$(SRC)/UI/ImDebugger/ImStructViewer.cpp \
diff --git a/ext/imgui/imgui_impl_platform.cpp b/ext/imgui/imgui_impl_platform.cpp
index e20b629758..3beea4cfb7 100644
--- a/ext/imgui/imgui_impl_platform.cpp
+++ b/ext/imgui/imgui_impl_platform.cpp
@@ -189,6 +189,7 @@ ImGuiKey KeyCodeToImGui(InputKeyCode keyCode) {
case NKCODE_COMMA: return ImGuiKey_Comma;
case NKCODE_PERIOD: return ImGuiKey_Period;
case NKCODE_MINUS: return ImGuiKey_Minus;
+ case NKCODE_PLUS: return ImGuiKey_Equal; // Hmm
case NKCODE_EQUALS: return ImGuiKey_Equal;
case NKCODE_LEFT_BRACKET: return ImGuiKey_LeftBracket;
case NKCODE_RIGHT_BRACKET: return ImGuiKey_RightBracket;
diff --git a/ext/sol/config.hpp b/ext/sol/config.hpp
new file mode 100644
index 0000000000..3b7ef023f5
--- /dev/null
+++ b/ext/sol/config.hpp
@@ -0,0 +1,53 @@
+// The MIT License (MIT)
+
+// Copyright (c) 2013-2020 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.
+
+// This file was generated with a script.
+// Generated 2022-06-25 08:14:19.336233 UTC
+// This header was generated with sol v3.3.0 (revision eba86625)
+// https://github.com/ThePhD/sol2
+
+#ifndef SOL_SINGLE_CONFIG_HPP
+#define SOL_SINGLE_CONFIG_HPP
+
+// beginning of sol/config.hpp
+
+/* Base, empty configuration file!
+
+ To override, place a file in your include paths of the form:
+
+. (your include path here)
+| sol (directory, or equivalent)
+ | config.hpp (your config.hpp file)
+
+ So that when sol2 includes the file
+
+#include
+
+ it gives you the configuration values you desire. Configuration values can be
+seen in the safety.rst of the doc/src, or at
+https://sol2.readthedocs.io/en/latest/safety.html ! You can also pass them through
+the build system, or the command line options of your compiler.
+
+*/
+
+// end of sol/config.hpp
+
+#endif // SOL_SINGLE_CONFIG_HPP
diff --git a/ext/sol/forward.hpp b/ext/sol/forward.hpp
new file mode 100644
index 0000000000..8690690871
--- /dev/null
+++ b/ext/sol/forward.hpp
@@ -0,0 +1,1321 @@
+// The MIT License (MIT)
+
+// Copyright (c) 2013-2020 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.
+
+// This file was generated with a script.
+// Generated 2022-06-25 08:14:19.328625 UTC
+// This header was generated with sol v3.3.0 (revision eba86625)
+// https://github.com/ThePhD/sol2
+
+#ifndef SOL_SINGLE_INCLUDE_FORWARD_HPP
+#define SOL_SINGLE_INCLUDE_FORWARD_HPP
+
+// beginning of sol/forward.hpp
+
+#ifndef SOL_FORWARD_HPP
+#define SOL_FORWARD_HPP
+
+// beginning of sol/version.hpp
+
+#include
+
+#define SOL_VERSION_MAJOR 3
+#define SOL_VERSION_MINOR 2
+#define SOL_VERSION_PATCH 3
+#define SOL_VERSION_STRING "3.2.3"
+#define SOL_VERSION ((SOL_VERSION_MAJOR * 100000) + (SOL_VERSION_MINOR * 100) + (SOL_VERSION_PATCH))
+
+#define SOL_TOKEN_TO_STRING_POST_EXPANSION_I_(_TOKEN) #_TOKEN
+#define SOL_TOKEN_TO_STRING_I_(_TOKEN) SOL_TOKEN_TO_STRING_POST_EXPANSION_I_(_TOKEN)
+
+#define SOL_CONCAT_TOKENS_POST_EXPANSION_I_(_LEFT, _RIGHT) _LEFT##_RIGHT
+#define SOL_CONCAT_TOKENS_I_(_LEFT, _RIGHT) SOL_CONCAT_TOKENS_POST_EXPANSION_I_(_LEFT, _RIGHT)
+
+#define SOL_RAW_IS_ON(OP_SYMBOL) ((3 OP_SYMBOL 3) != 0)
+#define SOL_RAW_IS_OFF(OP_SYMBOL) ((3 OP_SYMBOL 3) == 0)
+#define SOL_RAW_IS_DEFAULT_ON(OP_SYMBOL) ((3 OP_SYMBOL 3) > 3)
+#define SOL_RAW_IS_DEFAULT_OFF(OP_SYMBOL) ((3 OP_SYMBOL 3 OP_SYMBOL 3) < 0)
+
+#define SOL_IS_ON(OP_SYMBOL) SOL_RAW_IS_ON(OP_SYMBOL ## _I_)
+#define SOL_IS_OFF(OP_SYMBOL) SOL_RAW_IS_OFF(OP_SYMBOL ## _I_)
+#define SOL_IS_DEFAULT_ON(OP_SYMBOL) SOL_RAW_IS_DEFAULT_ON(OP_SYMBOL ## _I_)
+#define SOL_IS_DEFAULT_OFF(OP_SYMBOL) SOL_RAW_IS_DEFAULT_OFF(OP_SYMBOL ## _I_)
+
+#define SOL_ON |
+#define SOL_OFF ^
+#define SOL_DEFAULT_ON +
+#define SOL_DEFAULT_OFF -
+
+#if defined(SOL_BUILD_CXX_MODE)
+ #if (SOL_BUILD_CXX_MODE != 0)
+ #define SOL_BUILD_CXX_MODE_I_ SOL_ON
+ #else
+ #define SOL_BUILD_CXX_MODE_I_ SOL_OFF
+ #endif
+#elif defined(__cplusplus)
+ #define SOL_BUILD_CXX_MODE_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_BUILD_CXX_MODE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_BUILD_C_MODE)
+ #if (SOL_BUILD_C_MODE != 0)
+ #define SOL_BUILD_C_MODE_I_ SOL_ON
+ #else
+ #define SOL_BUILD_C_MODE_I_ SOL_OFF
+ #endif
+#elif defined(__STDC__)
+ #define SOL_BUILD_C_MODE_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_BUILD_C_MODE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if SOL_IS_ON(SOL_BUILD_C_MODE)
+ #include
+ #include
+ #include
+#else
+ #include
+ #include
+ #include
+#endif
+
+#if defined(SOL_COMPILER_VCXX)
+ #if defined(SOL_COMPILER_VCXX != 0)
+ #define SOL_COMPILER_VCXX_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_VCXX_I_ SOL_OFF
+ #endif
+#elif defined(_MSC_VER)
+ #define SOL_COMPILER_VCXX_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_VCXX_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_GCC)
+ #if defined(SOL_COMPILER_GCC != 0)
+ #define SOL_COMPILER_GCC_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_GCC_I_ SOL_OFF
+ #endif
+#elif defined(__GNUC__)
+ #define SOL_COMPILER_GCC_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_GCC_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_CLANG)
+ #if defined(SOL_COMPILER_CLANG != 0)
+ #define SOL_COMPILER_CLANG_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_CLANG_I_ SOL_OFF
+ #endif
+#elif defined(__clang__)
+ #define SOL_COMPILER_CLANG_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_CLANG_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_EDG)
+ #if defined(SOL_COMPILER_EDG != 0)
+ #define SOL_COMPILER_EDG_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_EDG_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_COMPILER_EDG_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_MINGW)
+ #if (SOL_COMPILER_MINGW != 0)
+ #define SOL_COMPILER_MINGW_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_MINGW_I_ SOL_OFF
+ #endif
+#elif defined(__MINGW32__)
+ #define SOL_COMPILER_MINGW_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_MINGW_I_ SOL_DEFAULT_OFF
+#endif
+
+#if SIZE_MAX <= 0xFFFFULL
+ #define SOL_PLATFORM_X16_I_ SOL_ON
+ #define SOL_PLATFORM_X86_I_ SOL_OFF
+ #define SOL_PLATFORM_X64_I_ SOL_OFF
+#elif SIZE_MAX <= 0xFFFFFFFFULL
+ #define SOL_PLATFORM_X16_I_ SOL_OFF
+ #define SOL_PLATFORM_X86_I_ SOL_ON
+ #define SOL_PLATFORM_X64_I_ SOL_OFF
+#else
+ #define SOL_PLATFORM_X16_I_ SOL_OFF
+ #define SOL_PLATFORM_X86_I_ SOL_OFF
+ #define SOL_PLATFORM_X64_I_ SOL_ON
+#endif
+
+#define SOL_PLATFORM_ARM32_I_ SOL_OFF
+#define SOL_PLATFORM_ARM64_I_ SOL_OFF
+
+#if defined(SOL_PLATFORM_WINDOWS)
+ #if (SOL_PLATFORM_WINDOWS != 0)
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_OFF
+ #endif
+#elif defined(_WIN32)
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_CYGWIN)
+ #if (SOL_PLATFORM_CYGWIN != 0)
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_ON
+ #endif
+#elif defined(__CYGWIN__)
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_APPLE)
+ #if (SOL_PLATFORM_APPLE != 0)
+ #define SOL_PLATFORM_APPLE_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_APPLE_I_ SOL_OFF
+ #endif
+#elif defined(__APPLE__)
+ #define SOL_PLATFORM_APPLE_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_PLATFORM_APPLE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_UNIX)
+ #if (SOL_PLATFORM_UNIX != 0)
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_OFF
+ #endif
+#elif defined(__unix__)
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_DEFAUKT_ON
+#else
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_LINUX)
+ #if (SOL_PLATFORM_LINUX != 0)
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_OFF
+ #endif
+#elif defined(__LINUX__)
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_DEFAUKT_ON
+#else
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_DEFAULT_OFF
+#endif
+
+#define SOL_PLATFORM_APPLE_IPHONE_I_ SOL_OFF
+#define SOL_PLATFORM_BSDLIKE_I_ SOL_OFF
+
+#if defined(SOL_IN_DEBUG_DETECTED)
+ #if SOL_IN_DEBUG_DETECTED != 0
+ #define SOL_DEBUG_BUILD_I_ SOL_ON
+ #else
+ #define SOL_DEBUG_BUILD_I_ SOL_OFF
+ #endif
+#elif !defined(NDEBUG)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX) && defined(_DEBUG)
+ #define SOL_DEBUG_BUILD_I_ SOL_ON
+ #elif (SOL_IS_ON(SOL_COMPILER_CLANG) || SOL_IS_ON(SOL_COMPILER_GCC)) && !defined(__OPTIMIZE__)
+ #define SOL_DEBUG_BUILD_I_ SOL_ON
+ #else
+ #define SOL_DEBUG_BUILD_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_DEBUG_BUILD_I_ SOL_DEFAULT_OFF
+#endif // We are in a debug mode of some sort
+
+#if defined(SOL_NO_EXCEPTIONS)
+ #if (SOL_NO_EXCEPTIONS != 0)
+ #define SOL_EXCEPTIONS_I_ SOL_OFF
+ #else
+ #define SOL_EXCEPTIONS_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if !defined(_CPPUNWIND)
+ #define SOL_EXCEPTIONS_I_ SOL_OFF
+ #else
+ #define SOL_EXCEPTIONS_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_CLANG) || SOL_IS_ON(SOL_COMPILER_GCC)
+ #if !defined(__EXCEPTIONS)
+ #define SOL_EXCEPTIONS_I_ SOL_OFF
+ #else
+ #define SOL_EXCEPTIONS_I_ SOL_ON
+ #endif
+#else
+ #define SOL_EXCEPTIONS_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_NO_RTTI)
+ #if (SOL_NO_RTTI != 0)
+ #define SOL_RTTI_I_ SOL_OFF
+ #else
+ #define SOL_RTTI_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if !defined(_CPPRTTI)
+ #define SOL_RTTI_I_ SOL_OFF
+ #else
+ #define SOL_RTTI_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_CLANG) || SOL_IS_ON(SOL_COMPILER_GCC)
+ #if !defined(__GXX_RTTI)
+ #define SOL_RTTI_I_ SOL_OFF
+ #else
+ #define SOL_RTTI_I_ SOL_ON
+ #endif
+#else
+ #define SOL_RTTI_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_NO_THREAD_LOCAL)
+ #if SOL_NO_THREAD_LOCAL != 0
+ #define SOL_USE_THREAD_LOCAL_I_ SOL_OFF
+ #else
+ #define SOL_USE_THREAD_LOCAL_I_ SOL_ON
+ #endif
+#else
+ #define SOL_USE_THREAD_LOCAL_I_ SOL_DEFAULT_ON
+#endif // thread_local keyword is bjorked on some platforms
+
+#if defined(SOL_ALL_SAFETIES_ON)
+ #if SOL_ALL_SAFETIES_ON != 0
+ #define SOL_ALL_SAFETIES_ON_I_ SOL_ON
+ #else
+ #define SOL_ALL_SAFETIES_ON_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_ALL_SAFETIES_ON_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_SAFE_GETTER)
+ #if SOL_SAFE_GETTER != 0
+ #define SOL_SAFE_GETTER_I_ SOL_ON
+ #else
+ #define SOL_SAFE_GETTER_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_GETTER_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_GETTER_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_GETTER_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_USERTYPE)
+ #if SOL_SAFE_USERTYPE != 0
+ #define SOL_SAFE_USERTYPE_I_ SOL_ON
+ #else
+ #define SOL_SAFE_USERTYPE_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_USERTYPE_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_USERTYPE_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_USERTYPE_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_REFERENCES)
+ #if SOL_SAFE_REFERENCES != 0
+ #define SOL_SAFE_REFERENCES_I_ SOL_ON
+ #else
+ #define SOL_SAFE_REFERENCES_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_REFERENCES_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_REFERENCES_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_REFERENCES_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_FUNCTIONS)
+ #if SOL_SAFE_FUNCTIONS != 0
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_OFF
+ #endif
+#elif defined (SOL_SAFE_FUNCTION_OBJECTS)
+ #if SOL_SAFE_FUNCTION_OBJECTS != 0
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_FUNCTION_CALLS)
+ #if SOL_SAFE_FUNCTION_CALLS != 0
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_PROXIES)
+ #if SOL_SAFE_PROXIES != 0
+ #define SOL_SAFE_PROXIES_I_ SOL_ON
+ #else
+ #define SOL_SAFE_PROXIES_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_PROXIES_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_PROXIES_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_PROXIES_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_NUMERICS)
+ #if SOL_SAFE_NUMERICS != 0
+ #define SOL_SAFE_NUMERICS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_NUMERICS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_NUMERICS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_NUMERICS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_NUMERICS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_ALL_INTEGER_VALUES_FIT)
+ #if (SOL_ALL_INTEGER_VALUES_FIT != 0)
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_ON
+ #else
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_OFF
+ #endif
+#elif !SOL_IS_DEFAULT_OFF(SOL_SAFE_NUMERICS) && SOL_IS_OFF(SOL_SAFE_NUMERICS)
+ // if numerics is intentionally turned off, flip this on
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_DEFAULT_ON
+#else
+ // default to off
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_SAFE_STACK_CHECK)
+ #if SOL_SAFE_STACK_CHECK != 0
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_ON
+ #else
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_NO_CHECK_NUMBER_PRECISION)
+ #if SOL_NO_CHECK_NUMBER_PRECISION != 0
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_OFF
+ #else
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #endif
+#elif defined(SOL_NO_CHECKING_NUMBER_PRECISION)
+ #if SOL_NO_CHECKING_NUMBER_PRECISION != 0
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_OFF
+ #else
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_SAFE_NUMERICS)
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_STRINGS_ARE_NUMBERS)
+ #if (SOL_STRINGS_ARE_NUMBERS != 0)
+ #define SOL_STRINGS_ARE_NUMBERS_I_ SOL_ON
+ #else
+ #define SOL_STRINGS_ARE_NUMBERS_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_STRINGS_ARE_NUMBERS_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_ENABLE_INTEROP)
+ #if SOL_ENABLE_INTEROP != 0
+ #define SOL_USE_INTEROP_I_ SOL_ON
+ #else
+ #define SOL_USE_INTEROP_I_ SOL_OFF
+ #endif
+#elif defined(SOL_USE_INTEROP)
+ #if SOL_USE_INTEROP != 0
+ #define SOL_USE_INTEROP_I_ SOL_ON
+ #else
+ #define SOL_USE_INTEROP_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_INTEROP_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_NO_NIL)
+ #if (SOL_NO_NIL != 0)
+ #define SOL_NIL_I_ SOL_OFF
+ #else
+ #define SOL_NIL_I_ SOL_ON
+ #endif
+#elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED) || defined(__OBJC__) || defined(nil)
+ #define SOL_NIL_I_ SOL_DEFAULT_OFF
+#else
+ #define SOL_NIL_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_USERTYPE_TYPE_BINDING_INFO)
+ #if (SOL_USERTYPE_TYPE_BINDING_INFO != 0)
+ #define SOL_USERTYPE_TYPE_BINDING_INFO_I_ SOL_ON
+ #else
+ #define SOL_USERTYPE_TYPE_BINDING_INFO_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USERTYPE_TYPE_BINDING_INFO_I_ SOL_DEFAULT_ON
+#endif // We should generate a my_type.__type table with lots of class information for usertypes
+
+#if defined(SOL_AUTOMAGICAL_TYPES_BY_DEFAULT)
+ #if (SOL_AUTOMAGICAL_TYPES_BY_DEFAULT != 0)
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_ON
+ #else
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_OFF
+ #endif
+#elif defined(SOL_DEFAULT_AUTOMAGICAL_USERTYPES)
+ #if (SOL_DEFAULT_AUTOMAGICAL_USERTYPES != 0)
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_ON
+ #else
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_DEFAULT_ON
+#endif // make is_automagical on/off by default
+
+#if defined(SOL_STD_VARIANT)
+ #if (SOL_STD_VARIANT != 0)
+ #define SOL_STD_VARIANT_I_ SOL_ON
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_COMPILER_CLANG) && SOL_IS_ON(SOL_PLATFORM_APPLE)
+ #if defined(__has_include)
+ #if __has_include()
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_OFF
+ #endif
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_OFF
+ #endif
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_ON
+ #endif
+#endif // make is_automagical on/off by default
+
+#if defined(SOL_NOEXCEPT_FUNCTION_TYPE)
+ #if (SOL_NOEXCEPT_FUNCTION_TYPE != 0)
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_ON
+ #else
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_OFF
+ #endif
+#else
+ #if defined(__cpp_noexcept_function_type)
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_COMPILER_VCXX) && (defined(_MSVC_LANG) && (_MSVC_LANG < 201403L))
+ // There is a bug in the VC++ compiler??
+ // on /std:c++latest under x86 conditions (VS 15.5.2),
+ // compiler errors are tossed for noexcept markings being on function types
+ // that are identical in every other way to their non-noexcept marked types function types...
+ // VS 2019: There is absolutely a bug.
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_OFF
+ #else
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_DEFAULT_ON
+ #endif
+#endif // noexcept is part of a function's type
+
+#if defined(SOL_STACK_STRING_OPTIMIZATION_SIZE) && SOL_STACK_STRING_OPTIMIZATION_SIZE > 0
+ #define SOL_OPTIMIZATION_STRING_CONVERSION_STACK_SIZE_I_ SOL_STACK_STRING_OPTIMIZATION_SIZE
+#else
+ #define SOL_OPTIMIZATION_STRING_CONVERSION_STACK_SIZE_I_ 1024
+#endif
+
+#if defined(SOL_ID_SIZE) && SOL_ID_SIZE > 0
+ #define SOL_ID_SIZE_I_ SOL_ID_SIZE
+#else
+ #define SOL_ID_SIZE_I_ 512
+#endif
+
+#if defined(LUA_IDSIZE) && LUA_IDSIZE > 0
+ #define SOL_FILE_ID_SIZE_I_ LUA_IDSIZE
+#elif defined(SOL_ID_SIZE) && SOL_ID_SIZE > 0
+ #define SOL_FILE_ID_SIZE_I_ SOL_FILE_ID_SIZE
+#else
+ #define SOL_FILE_ID_SIZE_I_ 2048
+#endif
+
+#if defined(SOL_PRINT_ERRORS)
+ #if (SOL_PRINT_ERRORS != 0)
+ #define SOL_PRINT_ERRORS_I_ SOL_ON
+ #else
+ #define SOL_PRINT_ERRORS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_PRINT_ERRORS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_PRINT_ERRORS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_PRINT_ERRORS_I_ SOL_OFF
+ #endif
+#endif
+
+#if defined(SOL_DEFAULT_PASS_ON_ERROR)
+ #if (SOL_DEFAULT_PASS_ON_ERROR != 0)
+ #define SOL_DEFAULT_PASS_ON_ERROR_I_ SOL_ON
+ #else
+ #define SOL_DEFAULT_PASS_ON_ERROR_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_DEFAULT_PASS_ON_ERROR_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_USING_CXX_LUA)
+ #if (SOL_USING_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUA_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUA_I_ SOL_OFF
+ #endif
+#elif defined(SOL_USE_CXX_LUA)
+ #if (SOL_USE_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUA_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUA_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_CXX_LUA_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_USING_CXX_LUAJIT)
+ #if (SOL_USING_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_OFF
+ #endif
+#elif defined(SOL_USE_CXX_LUAJIT)
+ #if (SOL_USE_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_NO_LUA_HPP)
+ #if (SOL_NO_LUA_HPP != 0)
+ #define SOL_USE_LUA_HPP_I_ SOL_OFF
+ #else
+ #define SOL_USE_LUA_HPP_I_ SOL_ON
+ #endif
+#elif defined(SOL_USING_CXX_LUA)
+ #define SOL_USE_LUA_HPP_I_ SOL_OFF
+#elif defined(__has_include)
+ #if __has_include()
+ #define SOL_USE_LUA_HPP_I_ SOL_ON
+ #else
+ #define SOL_USE_LUA_HPP_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_LUA_HPP_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_CONTAINERS_START)
+ #define SOL_CONTAINER_START_INDEX_I_ SOL_CONTAINERS_START
+#elif defined(SOL_CONTAINERS_START_INDEX)
+ #define SOL_CONTAINER_START_INDEX_I_ SOL_CONTAINERS_START_INDEX
+#elif defined(SOL_CONTAINER_START_INDEX)
+ #define SOL_CONTAINER_START_INDEX_I_ SOL_CONTAINER_START_INDEX
+#else
+ #define SOL_CONTAINER_START_INDEX_I_ 1
+#endif
+
+#if defined (SOL_NO_MEMORY_ALIGNMENT)
+ #if (SOL_NO_MEMORY_ALIGNMENT != 0)
+ #define SOL_ALIGN_MEMORY_I_ SOL_OFF
+ #else
+ #define SOL_ALIGN_MEMORY_I_ SOL_ON
+ #endif
+#else
+ #define SOL_ALIGN_MEMORY_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_USE_BOOST)
+ #if (SOL_USE_BOOST != 0)
+ #define SOL_USE_BOOST_I_ SOL_ON
+ #else
+ #define SOL_USE_BOOST_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_BOOST_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_USE_UNSAFE_BASE_LOOKUP)
+ #if (SOL_USE_UNSAFE_BASE_LOOKUP != 0)
+ #define SOL_USE_UNSAFE_BASE_LOOKUP_I_ SOL_ON
+ #else
+ #define SOL_USE_UNSAFE_BASE_LOOKUP_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_UNSAFE_BASE_LOOKUP_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_INSIDE_UNREAL)
+ #if (SOL_INSIDE_UNREAL != 0)
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_ON
+ #else
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_OFF
+ #endif
+#else
+ #if defined(UE_BUILD_DEBUG) || defined(UE_BUILD_DEVELOPMENT) || defined(UE_BUILD_TEST) || defined(UE_BUILD_SHIPPING) || defined(UE_SERVER)
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_NO_COMPAT)
+ #if (SOL_NO_COMPAT != 0)
+ #define SOL_USE_COMPATIBILITY_LAYER_I_ SOL_OFF
+ #else
+ #define SOL_USE_COMPATIBILITY_LAYER_I_ SOL_ON
+ #endif
+#else
+ #define SOL_USE_COMPATIBILITY_LAYER_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_GET_FUNCTION_POINTER_UNSAFE)
+ #if (SOL_GET_FUNCTION_POINTER_UNSAFE != 0)
+ #define SOL_GET_FUNCTION_POINTER_UNSAFE_I_ SOL_ON
+ #else
+ #define SOL_GET_FUNCTION_POINTER_UNSAFE_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_GET_FUNCTION_POINTER_UNSAFE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_FUNCTION_CALL_VALUE_SEMANTICS)
+ #if (SOL_FUNCTION_CALL_VALUE_SEMANTICS != 0)
+ #define SOL_FUNCTION_CALL_VALUE_SEMANTICS_I_ SOL_ON
+ #else
+ #define SOL_FUNCTION_CALL_VALUE_SEMANTICS_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_FUNCTION_CALL_VALUE_SEMANTICS_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_MINGW_CCTYPE_IS_POISONED)
+ #if (SOL_MINGW_CCTYPE_IS_POISONED != 0)
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_ON
+ #else
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_OFF
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_MINGW) && defined(__GNUC__) && (__GNUC__ < 6)
+ // MinGW is off its rocker in some places...
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_CHAR8_T)
+ #if (SOL_CHAR8_T != 0)
+ #define SOL_CHAR8_T_I_ SOL_ON
+ #else
+ #define SOL_CHAR8_T_I_ SOL_OFF
+ #endif
+#else
+ #if defined(__cpp_char8_t)
+ #define SOL_CHAR8_T_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_CHAR8_T_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if SOL_IS_ON(SOL_USE_BOOST)
+ #include
+
+ #if BOOST_VERSION >= 107500 // Since Boost 1.75.0 boost::none is constexpr
+ #define SOL_BOOST_NONE_CONSTEXPR_I_ constexpr
+ #else
+ #define SOL_BOOST_NONE_CONSTEXPR_I_ const
+ #endif // BOOST_VERSION
+#else
+ // assume boost isn't using a garbage version
+ #define SOL_BOOST_NONE_CONSTEXPR_I_ constexpr
+#endif
+
+#if defined(SOL2_CI)
+ #if (SOL2_CI != 0)
+ #define SOL2_CI_I_ SOL_ON
+ #else
+ #define SOL2_CI_I_ SOL_OFF
+ #endif
+#else
+ #define SOL2_CI_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_C_ASSERT)
+ #define SOL_USER_C_ASSERT_I_ SOL_ON
+#else
+ #define SOL_USER_C_ASSERT_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_M_ASSERT)
+ #define SOL_USER_M_ASSERT_I_ SOL_ON
+#else
+ #define SOL_USER_M_ASSERT_I_ SOL_DEFAULT_OFF
+#endif
+
+// beginning of sol/prologue.hpp
+
+#if defined(SOL_PROLOGUE_I_)
+ #error "[sol2] Library Prologue was already included in translation unit and not properly ended with an epilogue."
+#endif
+
+#define SOL_PROLOGUE_I_ 1
+
+#if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ #define _FWD(...) static_cast( __VA_ARGS__ )
+
+ #if SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define _MOVE(...) static_cast<__typeof( __VA_ARGS__ )&&>( __VA_ARGS__ )
+ #else
+ #include
+
+ #define _MOVE(...) static_cast<::std::remove_reference_t<( __VA_ARGS__ )>&&>( __VA_OPT__(,) )
+ #endif
+#endif
+
+// end of sol/prologue.hpp
+
+// beginning of sol/epilogue.hpp
+
+#if !defined(SOL_PROLOGUE_I_)
+ #error "[sol2] Library Prologue is missing from this translation unit."
+#else
+ #undef SOL_PROLOGUE_I_
+#endif
+
+#if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ #undef _FWD
+ #undef _MOVE
+#endif
+
+// end of sol/epilogue.hpp
+
+// beginning of sol/detail/build_version.hpp
+
+#if defined(SOL_DLL)
+ #if (SOL_DLL != 0)
+ #define SOL_DLL_I_ SOL_ON
+ #else
+ #define SOL_DLL_I_ SOL_OFF
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_VCXX) && (defined(DLL_) || defined(_DLL))
+ #define SOL_DLL_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_DLL_I_ SOL_DEFAULT_OFF
+#endif // DLL definition
+
+#if defined(SOL_HEADER_ONLY)
+ #if (SOL_HEADER_ONLY != 0)
+ #define SOL_HEADER_ONLY_I_ SOL_ON
+ #else
+ #define SOL_HEADER_ONLY_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_HEADER_ONLY_I_ SOL_DEFAULT_OFF
+#endif // Header only library
+
+#if defined(SOL_BUILD)
+ #if (SOL_BUILD != 0)
+ #define SOL_BUILD_I_ SOL_ON
+ #else
+ #define SOL_BUILD_I_ SOL_OFF
+ #endif
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_BUILD_I_ SOL_DEFAULT_OFF
+#else
+ #define SOL_BUILD_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_UNITY_BUILD)
+ #if (SOL_UNITY_BUILD != 0)
+ #define SOL_UNITY_BUILD_I_ SOL_ON
+ #else
+ #define SOL_UNITY_BUILD_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_UNITY_BUILD_I_ SOL_DEFAULT_OFF
+#endif // Header only library
+
+#if defined(SOL_C_FUNCTION_LINKAGE)
+ #define SOL_C_FUNCTION_LINKAGE_I_ SOL_C_FUNCTION_LINKAGE
+#else
+ #if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ // C++
+ #define SOL_C_FUNCTION_LINKAGE_I_ extern "C"
+ #else
+ // normal
+ #define SOL_C_FUNCTION_LINKAGE_I_
+ #endif // C++ or not
+#endif // Linkage specification for C functions
+
+#if defined(SOL_API_LINKAGE)
+ #define SOL_API_LINKAGE_I_ SOL_API_LINKAGE
+#else
+ #if SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX) || SOL_IS_ON(SOL_PLATFORM_WINDOWS) || SOL_IS_ON(SOL_PLATFORM_CYGWIN)
+ // MSVC Compiler; or, Windows, or Cygwin platforms
+ #if SOL_IS_ON(SOL_BUILD)
+ // Building the library
+ #if SOL_IS_ON(SOL_COMPILER_GCC)
+ // Using GCC
+ #define SOL_API_LINKAGE_I_ __attribute__((dllexport))
+ #else
+ // Using Clang, MSVC, etc...
+ #define SOL_API_LINKAGE_I_ __declspec(dllexport)
+ #endif
+ #else
+ #if SOL_IS_ON(SOL_COMPILER_GCC)
+ #define SOL_API_LINKAGE_I_ __attribute__((dllimport))
+ #else
+ #define SOL_API_LINKAGE_I_ __declspec(dllimport)
+ #endif
+ #endif
+ #else
+ // extern if building normally on non-MSVC
+ #define SOL_API_LINKAGE_I_ extern
+ #endif
+ #elif SOL_IS_ON(SOL_UNITY_BUILD)
+ // Built-in library, like how stb typical works
+ #if SOL_IS_ON(SOL_HEADER_ONLY)
+ // Header only, so functions are defined "inline"
+ #define SOL_API_LINKAGE_I_ inline
+ #else
+ // Not header only, so seperately compiled files
+ #define SOL_API_LINKAGE_I_ extern
+ #endif
+ #else
+ // Normal static library
+ #if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ #define SOL_API_LINKAGE_I_
+ #else
+ #define SOL_API_LINKAGE_I_ extern
+ #endif
+ #endif // DLL or not
+#endif // Build definitions
+
+#if defined(SOL_PUBLIC_FUNC_DECL)
+ #define SOL_PUBLIC_FUNC_DECL_I_ SOL_PUBLIC_FUNC_DECL
+#else
+ #define SOL_PUBLIC_FUNC_DECL_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_INTERNAL_FUNC_DECL_)
+ #define SOL_INTERNAL_FUNC_DECL_I_ SOL_INTERNAL_FUNC_DECL_
+#else
+ #define SOL_INTERNAL_FUNC_DECL_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_PUBLIC_FUNC_DEF)
+ #define SOL_PUBLIC_FUNC_DEF_I_ SOL_PUBLIC_FUNC_DEF
+#else
+ #define SOL_PUBLIC_FUNC_DEF_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_INTERNAL_FUNC_DEF)
+ #define SOL_INTERNAL_FUNC_DEF_I_ SOL_INTERNAL_FUNC_DEF
+#else
+ #define SOL_INTERNAL_FUNC_DEF_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_FUNC_DECL)
+ #define SOL_FUNC_DECL_I_ SOL_FUNC_DECL
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_FUNC_DECL_I_
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_FUNC_DECL_I_ extern __declspec(dllexport)
+ #else
+ #define SOL_FUNC_DECL_I_ extern __declspec(dllimport)
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_FUNC_DECL_I_ extern __attribute__((visibility("default")))
+ #else
+ #define SOL_FUNC_DECL_I_ extern
+ #endif
+#endif
+
+#if defined(SOL_FUNC_DEFN)
+ #define SOL_FUNC_DEFN_I_ SOL_FUNC_DEFN
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_FUNC_DEFN_I_ inline
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_FUNC_DEFN_I_ __declspec(dllexport)
+ #else
+ #define SOL_FUNC_DEFN_I_ __declspec(dllimport)
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_FUNC_DEFN_I_ __attribute__((visibility("default")))
+ #else
+ #define SOL_FUNC_DEFN_I_
+ #endif
+#endif
+
+#if defined(SOL_HIDDEN_FUNC_DECL)
+ #define SOL_HIDDEN_FUNC_DECL_I_ SOL_HIDDEN_FUNC_DECL
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_HIDDEN_FUNC_DECL_I_
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern __declspec(dllexport)
+ #else
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern __declspec(dllimport)
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern __attribute__((visibility("default")))
+ #else
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern
+ #endif
+#endif
+
+#if defined(SOL_HIDDEN_FUNC_DEFN)
+ #define SOL_HIDDEN_FUNC_DEFN_I_ SOL_HIDDEN_FUNC_DEFN
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_HIDDEN_FUNC_DEFN_I_ inline
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_HIDDEN_FUNC_DEFN_I_
+ #else
+ #define SOL_HIDDEN_FUNC_DEFN_I_
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_HIDDEN_FUNC_DEFN_I_ __attribute__((visibility("hidden")))
+ #else
+ #define SOL_HIDDEN_FUNC_DEFN_I_
+ #endif
+#endif
+
+// end of sol/detail/build_version.hpp
+
+// end of sol/version.hpp
+
+#include
+#include
+#include
+
+#if SOL_IS_ON(SOL_USE_CXX_LUA) || SOL_IS_ON(SOL_USE_CXX_LUAJIT)
+struct lua_State;
+#else
+extern "C" {
+struct lua_State;
+}
+#endif // C++ Mangling for Lua vs. Not
+
+namespace sol {
+
+ enum class type;
+
+ class stateless_reference;
+ template
+ class basic_reference;
+ using reference = basic_reference;
+ using main_reference = basic_reference;
+ class stateless_stack_reference;
+ class stack_reference;
+
+ template
+ class basic_bytecode;
+
+ struct lua_value;
+
+ struct proxy_base_tag;
+ template
+ struct proxy_base;
+ template
+ struct table_proxy;
+
+ template
+ class basic_table_core;
+ template
+ using table_core = basic_table_core;
+ template
+ using main_table_core = basic_table_core;
+ template
+ using stack_table_core = basic_table_core;
+ template
+ using basic_table = basic_table_core;
+ using table = table_core;
+ using global_table = table_core;
+ using main_table = main_table_core;
+ using main_global_table = main_table_core;
+ using stack_table = stack_table_core;
+ using stack_global_table = stack_table_core;
+
+ template
+ struct basic_lua_table;
+ using lua_table = basic_lua_table;
+ using stack_lua_table = basic_lua_table;
+
+ template
+ class basic_usertype;
+ template
+ using usertype = basic_usertype;
+ template
+ using stack_usertype = basic_usertype;
+
+ template
+ class basic_metatable;
+ using metatable = basic_metatable;
+ using stack_metatable = basic_metatable;
+
+ template
+ struct basic_environment;
+ using environment = basic_environment;
+ using main_environment = basic_environment;
+ using stack_environment = basic_environment;
+
+ template
+ class basic_function;
+ template
+ class basic_protected_function;
+ using unsafe_function = basic_function;
+ using safe_function = basic_protected_function;
+ using main_unsafe_function = basic_function;
+ using main_safe_function = basic_protected_function;
+ using stack_unsafe_function = basic_function;
+ using stack_safe_function = basic_protected_function;
+ using stack_aligned_unsafe_function = basic_function;
+ using stack_aligned_safe_function = basic_protected_function;
+ using protected_function = safe_function;
+ using main_protected_function = main_safe_function;
+ using stack_protected_function = stack_safe_function;
+ using stack_aligned_protected_function = stack_aligned_safe_function;
+#if SOL_IS_ON(SOL_SAFE_FUNCTION_OBJECTS)
+ using function = protected_function;
+ using main_function = main_protected_function;
+ using stack_function = stack_protected_function;
+ using stack_aligned_function = stack_aligned_safe_function;
+#else
+ using function = unsafe_function;
+ using main_function = main_unsafe_function;
+ using stack_function = stack_unsafe_function;
+ using stack_aligned_function = stack_aligned_unsafe_function;
+#endif
+ using stack_aligned_stack_handler_function = basic_protected_function;
+
+ struct unsafe_function_result;
+ struct protected_function_result;
+ using safe_function_result = protected_function_result;
+#if SOL_IS_ON(SOL_SAFE_FUNCTION_OBJECTS)
+ using function_result = safe_function_result;
+#else
+ using function_result = unsafe_function_result;
+#endif
+
+ template
+ class basic_object_base;
+ template
+ class basic_object;
+ template
+ class basic_userdata;
+ template
+ class basic_lightuserdata;
+ template
+ class basic_coroutine;
+ template
+ class basic_packaged_coroutine;
+ template
+ class basic_thread;
+
+ using object = basic_object;
+ using userdata = basic_userdata;
+ using lightuserdata = basic_lightuserdata;
+ using thread = basic_thread;
+ using coroutine = basic_coroutine;
+ using packaged_coroutine = basic_packaged_coroutine;
+ using main_object = basic_object;
+ using main_userdata = basic_userdata;
+ using main_lightuserdata = basic_lightuserdata;
+ using main_coroutine = basic_coroutine;
+ using stack_object = basic_object;
+ using stack_userdata = basic_userdata;
+ using stack_lightuserdata = basic_lightuserdata;
+ 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;
+ struct this_state;
+ struct this_main_state;
+ struct this_environment;
+
+ class state_view;
+ class state;
+
+ template
+ struct as_table_t;
+ template
+ struct as_container_t;
+ template
+ struct nested;
+ template
+ struct light;
+ template
+ struct user;
+ template
+ struct as_args_t;
+ template
+ struct protect_t;
+ template
+ struct policy_wrapper;
+
+ template
+ struct usertype_traits;
+ template
+ struct unique_usertype_traits;
+
+ template
+ struct types {
+ typedef std::make_index_sequence indices;
+ static constexpr std::size_t size() {
+ return sizeof...(Args);
+ }
+ };
+
+ template
+ struct derive : std::false_type {
+ typedef types<> type;
+ };
+
+ template
+ struct base : std::false_type {
+ typedef types<> type;
+ };
+
+ template
+ struct weak_derive {
+ static bool value;
+ };
+
+ template
+ bool weak_derive::value = false;
+
+ namespace stack {
+ struct record;
+ }
+
+#if SOL_IS_OFF(SOL_USE_BOOST)
+ template
+ class optional;
+
+ template
+ class optional;
+#endif
+
+ using check_handler_type = int(lua_State*, int, type, type, const char*);
+
+} // namespace sol
+
+#define SOL_BASE_CLASSES(T, ...) \
+ namespace sol { \
+ template <> \
+ struct base : std::true_type { \
+ typedef ::sol::types<__VA_ARGS__> type; \
+ }; \
+ } \
+ void a_sol3_detail_function_decl_please_no_collide()
+#define SOL_DERIVED_CLASSES(T, ...) \
+ namespace sol { \
+ template <> \
+ struct derive : std::true_type { \
+ typedef ::sol::types<__VA_ARGS__> type; \
+ }; \
+ } \
+ void a_sol3_detail_function_decl_please_no_collide()
+
+#endif // SOL_FORWARD_HPP
+// end of sol/forward.hpp
+
+#endif // SOL_SINGLE_INCLUDE_FORWARD_HPP
diff --git a/ext/sol/sol.hpp b/ext/sol/sol.hpp
new file mode 100644
index 0000000000..f10f236dc6
--- /dev/null
+++ b/ext/sol/sol.hpp
@@ -0,0 +1,28913 @@
+// The MIT License (MIT)
+
+// Copyright (c) 2013-2020 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.
+
+// This file was generated with a script.
+// Generated 2022-06-25 08:14:19.151876 UTC
+// This header was generated with sol v3.3.0 (revision eba86625)
+// https://github.com/ThePhD/sol2
+
+#ifndef SOL_SINGLE_INCLUDE_HPP
+#define SOL_SINGLE_INCLUDE_HPP
+
+// beginning of sol/sol.hpp
+
+#ifndef SOL_HPP
+#define SOL_HPP
+
+// Can't use our debug memory handling with this.
+#ifdef new
+#undef new
+#define DBG_MEM
+#endif
+
+// beginning of sol/version.hpp
+
+#include
+
+#define SOL_VERSION_MAJOR 3
+#define SOL_VERSION_MINOR 2
+#define SOL_VERSION_PATCH 3
+#define SOL_VERSION_STRING "3.2.3"
+#define SOL_VERSION ((SOL_VERSION_MAJOR * 100000) + (SOL_VERSION_MINOR * 100) + (SOL_VERSION_PATCH))
+
+#define SOL_TOKEN_TO_STRING_POST_EXPANSION_I_(_TOKEN) #_TOKEN
+#define SOL_TOKEN_TO_STRING_I_(_TOKEN) SOL_TOKEN_TO_STRING_POST_EXPANSION_I_(_TOKEN)
+
+#define SOL_CONCAT_TOKENS_POST_EXPANSION_I_(_LEFT, _RIGHT) _LEFT##_RIGHT
+#define SOL_CONCAT_TOKENS_I_(_LEFT, _RIGHT) SOL_CONCAT_TOKENS_POST_EXPANSION_I_(_LEFT, _RIGHT)
+
+#define SOL_RAW_IS_ON(OP_SYMBOL) ((3 OP_SYMBOL 3) != 0)
+#define SOL_RAW_IS_OFF(OP_SYMBOL) ((3 OP_SYMBOL 3) == 0)
+#define SOL_RAW_IS_DEFAULT_ON(OP_SYMBOL) ((3 OP_SYMBOL 3) > 3)
+#define SOL_RAW_IS_DEFAULT_OFF(OP_SYMBOL) ((3 OP_SYMBOL 3 OP_SYMBOL 3) < 0)
+
+#define SOL_IS_ON(OP_SYMBOL) SOL_RAW_IS_ON(OP_SYMBOL ## _I_)
+#define SOL_IS_OFF(OP_SYMBOL) SOL_RAW_IS_OFF(OP_SYMBOL ## _I_)
+#define SOL_IS_DEFAULT_ON(OP_SYMBOL) SOL_RAW_IS_DEFAULT_ON(OP_SYMBOL ## _I_)
+#define SOL_IS_DEFAULT_OFF(OP_SYMBOL) SOL_RAW_IS_DEFAULT_OFF(OP_SYMBOL ## _I_)
+
+#define SOL_ON |
+#define SOL_OFF ^
+#define SOL_DEFAULT_ON +
+#define SOL_DEFAULT_OFF -
+
+#if defined(SOL_BUILD_CXX_MODE)
+ #if (SOL_BUILD_CXX_MODE != 0)
+ #define SOL_BUILD_CXX_MODE_I_ SOL_ON
+ #else
+ #define SOL_BUILD_CXX_MODE_I_ SOL_OFF
+ #endif
+#elif defined(__cplusplus)
+ #define SOL_BUILD_CXX_MODE_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_BUILD_CXX_MODE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_BUILD_C_MODE)
+ #if (SOL_BUILD_C_MODE != 0)
+ #define SOL_BUILD_C_MODE_I_ SOL_ON
+ #else
+ #define SOL_BUILD_C_MODE_I_ SOL_OFF
+ #endif
+#elif defined(__STDC__)
+ #define SOL_BUILD_C_MODE_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_BUILD_C_MODE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if SOL_IS_ON(SOL_BUILD_C_MODE)
+ #include
+ #include
+ #include
+#else
+ #include
+ #include
+ #include
+#endif
+
+#if defined(SOL_COMPILER_VCXX)
+ #if defined(SOL_COMPILER_VCXX != 0)
+ #define SOL_COMPILER_VCXX_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_VCXX_I_ SOL_OFF
+ #endif
+#elif defined(_MSC_VER)
+ #define SOL_COMPILER_VCXX_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_VCXX_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_GCC)
+ #if defined(SOL_COMPILER_GCC != 0)
+ #define SOL_COMPILER_GCC_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_GCC_I_ SOL_OFF
+ #endif
+#elif defined(__GNUC__)
+ #define SOL_COMPILER_GCC_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_GCC_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_CLANG)
+ #if defined(SOL_COMPILER_CLANG != 0)
+ #define SOL_COMPILER_CLANG_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_CLANG_I_ SOL_OFF
+ #endif
+#elif defined(__clang__)
+ #define SOL_COMPILER_CLANG_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_CLANG_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_EDG)
+ #if defined(SOL_COMPILER_EDG != 0)
+ #define SOL_COMPILER_EDG_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_EDG_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_COMPILER_EDG_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_COMPILER_MINGW)
+ #if (SOL_COMPILER_MINGW != 0)
+ #define SOL_COMPILER_MINGW_I_ SOL_ON
+ #else
+ #define SOL_COMPILER_MINGW_I_ SOL_OFF
+ #endif
+#elif defined(__MINGW32__)
+ #define SOL_COMPILER_MINGW_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_COMPILER_MINGW_I_ SOL_DEFAULT_OFF
+#endif
+
+#if SIZE_MAX <= 0xFFFFULL
+ #define SOL_PLATFORM_X16_I_ SOL_ON
+ #define SOL_PLATFORM_X86_I_ SOL_OFF
+ #define SOL_PLATFORM_X64_I_ SOL_OFF
+#elif SIZE_MAX <= 0xFFFFFFFFULL
+ #define SOL_PLATFORM_X16_I_ SOL_OFF
+ #define SOL_PLATFORM_X86_I_ SOL_ON
+ #define SOL_PLATFORM_X64_I_ SOL_OFF
+#else
+ #define SOL_PLATFORM_X16_I_ SOL_OFF
+ #define SOL_PLATFORM_X86_I_ SOL_OFF
+ #define SOL_PLATFORM_X64_I_ SOL_ON
+#endif
+
+#define SOL_PLATFORM_ARM32_I_ SOL_OFF
+#define SOL_PLATFORM_ARM64_I_ SOL_OFF
+
+#if defined(SOL_PLATFORM_WINDOWS)
+ #if (SOL_PLATFORM_WINDOWS != 0)
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_OFF
+ #endif
+#elif defined(_WIN32)
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_PLATFORM_WINDOWS_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_CYGWIN)
+ #if (SOL_PLATFORM_CYGWIN != 0)
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_ON
+ #endif
+#elif defined(__CYGWIN__)
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_PLATFORM_CYGWIN_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_APPLE)
+ #if (SOL_PLATFORM_APPLE != 0)
+ #define SOL_PLATFORM_APPLE_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_APPLE_I_ SOL_OFF
+ #endif
+#elif defined(__APPLE__)
+ #define SOL_PLATFORM_APPLE_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_PLATFORM_APPLE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_UNIX)
+ #if (SOL_PLATFORM_UNIX != 0)
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_OFF
+ #endif
+#elif defined(__unix__)
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_DEFAUKT_ON
+#else
+ #define SOL_PLATFORM_UNIXLIKE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_PLATFORM_LINUX)
+ #if (SOL_PLATFORM_LINUX != 0)
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_ON
+ #else
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_OFF
+ #endif
+#elif defined(__LINUX__)
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_DEFAUKT_ON
+#else
+ #define SOL_PLATFORM_LINUXLIKE_I_ SOL_DEFAULT_OFF
+#endif
+
+#define SOL_PLATFORM_APPLE_IPHONE_I_ SOL_OFF
+#define SOL_PLATFORM_BSDLIKE_I_ SOL_OFF
+
+#if defined(SOL_IN_DEBUG_DETECTED)
+ #if SOL_IN_DEBUG_DETECTED != 0
+ #define SOL_DEBUG_BUILD_I_ SOL_ON
+ #else
+ #define SOL_DEBUG_BUILD_I_ SOL_OFF
+ #endif
+#elif !defined(NDEBUG)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX) && defined(_DEBUG)
+ #define SOL_DEBUG_BUILD_I_ SOL_ON
+ #elif (SOL_IS_ON(SOL_COMPILER_CLANG) || SOL_IS_ON(SOL_COMPILER_GCC)) && !defined(__OPTIMIZE__)
+ #define SOL_DEBUG_BUILD_I_ SOL_ON
+ #else
+ #define SOL_DEBUG_BUILD_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_DEBUG_BUILD_I_ SOL_DEFAULT_OFF
+#endif // We are in a debug mode of some sort
+
+#if defined(SOL_NO_EXCEPTIONS)
+ #if (SOL_NO_EXCEPTIONS != 0)
+ #define SOL_EXCEPTIONS_I_ SOL_OFF
+ #else
+ #define SOL_EXCEPTIONS_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if !defined(_CPPUNWIND)
+ #define SOL_EXCEPTIONS_I_ SOL_OFF
+ #else
+ #define SOL_EXCEPTIONS_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_CLANG) || SOL_IS_ON(SOL_COMPILER_GCC)
+ #if !defined(__EXCEPTIONS)
+ #define SOL_EXCEPTIONS_I_ SOL_OFF
+ #else
+ #define SOL_EXCEPTIONS_I_ SOL_ON
+ #endif
+#else
+ #define SOL_EXCEPTIONS_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_NO_RTTI)
+ #if (SOL_NO_RTTI != 0)
+ #define SOL_RTTI_I_ SOL_OFF
+ #else
+ #define SOL_RTTI_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if !defined(_CPPRTTI)
+ #define SOL_RTTI_I_ SOL_OFF
+ #else
+ #define SOL_RTTI_I_ SOL_ON
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_CLANG) || SOL_IS_ON(SOL_COMPILER_GCC)
+ #if !defined(__GXX_RTTI)
+ #define SOL_RTTI_I_ SOL_OFF
+ #else
+ #define SOL_RTTI_I_ SOL_ON
+ #endif
+#else
+ #define SOL_RTTI_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_NO_THREAD_LOCAL)
+ #if SOL_NO_THREAD_LOCAL != 0
+ #define SOL_USE_THREAD_LOCAL_I_ SOL_OFF
+ #else
+ #define SOL_USE_THREAD_LOCAL_I_ SOL_ON
+ #endif
+#else
+ #define SOL_USE_THREAD_LOCAL_I_ SOL_DEFAULT_ON
+#endif // thread_local keyword is bjorked on some platforms
+
+#if defined(SOL_ALL_SAFETIES_ON)
+ #if SOL_ALL_SAFETIES_ON != 0
+ #define SOL_ALL_SAFETIES_ON_I_ SOL_ON
+ #else
+ #define SOL_ALL_SAFETIES_ON_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_ALL_SAFETIES_ON_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_SAFE_GETTER)
+ #if SOL_SAFE_GETTER != 0
+ #define SOL_SAFE_GETTER_I_ SOL_ON
+ #else
+ #define SOL_SAFE_GETTER_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_GETTER_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_GETTER_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_GETTER_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_USERTYPE)
+ #if SOL_SAFE_USERTYPE != 0
+ #define SOL_SAFE_USERTYPE_I_ SOL_ON
+ #else
+ #define SOL_SAFE_USERTYPE_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_USERTYPE_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_USERTYPE_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_USERTYPE_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_REFERENCES)
+ #if SOL_SAFE_REFERENCES != 0
+ #define SOL_SAFE_REFERENCES_I_ SOL_ON
+ #else
+ #define SOL_SAFE_REFERENCES_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_REFERENCES_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_REFERENCES_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_REFERENCES_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_FUNCTIONS)
+ #if SOL_SAFE_FUNCTIONS != 0
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_OFF
+ #endif
+#elif defined (SOL_SAFE_FUNCTION_OBJECTS)
+ #if SOL_SAFE_FUNCTION_OBJECTS != 0
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_FUNCTION_OBJECTS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_FUNCTION_CALLS)
+ #if SOL_SAFE_FUNCTION_CALLS != 0
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_FUNCTION_CALLS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_PROXIES)
+ #if SOL_SAFE_PROXIES != 0
+ #define SOL_SAFE_PROXIES_I_ SOL_ON
+ #else
+ #define SOL_SAFE_PROXIES_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_PROXIES_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_PROXIES_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_PROXIES_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_SAFE_NUMERICS)
+ #if SOL_SAFE_NUMERICS != 0
+ #define SOL_SAFE_NUMERICS_I_ SOL_ON
+ #else
+ #define SOL_SAFE_NUMERICS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_NUMERICS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_NUMERICS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_NUMERICS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_ALL_INTEGER_VALUES_FIT)
+ #if (SOL_ALL_INTEGER_VALUES_FIT != 0)
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_ON
+ #else
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_OFF
+ #endif
+#elif !SOL_IS_DEFAULT_OFF(SOL_SAFE_NUMERICS) && SOL_IS_OFF(SOL_SAFE_NUMERICS)
+ // if numerics is intentionally turned off, flip this on
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_DEFAULT_ON
+#else
+ // default to off
+ #define SOL_ALL_INTEGER_VALUES_FIT_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_SAFE_STACK_CHECK)
+ #if SOL_SAFE_STACK_CHECK != 0
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_ON
+ #else
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_SAFE_STACK_CHECK_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_NO_CHECK_NUMBER_PRECISION)
+ #if SOL_NO_CHECK_NUMBER_PRECISION != 0
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_OFF
+ #else
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #endif
+#elif defined(SOL_NO_CHECKING_NUMBER_PRECISION)
+ #if SOL_NO_CHECKING_NUMBER_PRECISION != 0
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_OFF
+ #else
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_SAFE_NUMERICS)
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_NUMBER_PRECISION_CHECKS_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_STRINGS_ARE_NUMBERS)
+ #if (SOL_STRINGS_ARE_NUMBERS != 0)
+ #define SOL_STRINGS_ARE_NUMBERS_I_ SOL_ON
+ #else
+ #define SOL_STRINGS_ARE_NUMBERS_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_STRINGS_ARE_NUMBERS_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_ENABLE_INTEROP)
+ #if SOL_ENABLE_INTEROP != 0
+ #define SOL_USE_INTEROP_I_ SOL_ON
+ #else
+ #define SOL_USE_INTEROP_I_ SOL_OFF
+ #endif
+#elif defined(SOL_USE_INTEROP)
+ #if SOL_USE_INTEROP != 0
+ #define SOL_USE_INTEROP_I_ SOL_ON
+ #else
+ #define SOL_USE_INTEROP_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_INTEROP_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_NO_NIL)
+ #if (SOL_NO_NIL != 0)
+ #define SOL_NIL_I_ SOL_OFF
+ #else
+ #define SOL_NIL_I_ SOL_ON
+ #endif
+#elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED) || defined(__OBJC__) || defined(nil)
+ #define SOL_NIL_I_ SOL_DEFAULT_OFF
+#else
+ #define SOL_NIL_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_USERTYPE_TYPE_BINDING_INFO)
+ #if (SOL_USERTYPE_TYPE_BINDING_INFO != 0)
+ #define SOL_USERTYPE_TYPE_BINDING_INFO_I_ SOL_ON
+ #else
+ #define SOL_USERTYPE_TYPE_BINDING_INFO_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USERTYPE_TYPE_BINDING_INFO_I_ SOL_DEFAULT_ON
+#endif // We should generate a my_type.__type table with lots of class information for usertypes
+
+#if defined(SOL_AUTOMAGICAL_TYPES_BY_DEFAULT)
+ #if (SOL_AUTOMAGICAL_TYPES_BY_DEFAULT != 0)
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_ON
+ #else
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_OFF
+ #endif
+#elif defined(SOL_DEFAULT_AUTOMAGICAL_USERTYPES)
+ #if (SOL_DEFAULT_AUTOMAGICAL_USERTYPES != 0)
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_ON
+ #else
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_DEFAULT_AUTOMAGICAL_USERTYPES_I_ SOL_DEFAULT_ON
+#endif // make is_automagical on/off by default
+
+#if defined(SOL_STD_VARIANT)
+ #if (SOL_STD_VARIANT != 0)
+ #define SOL_STD_VARIANT_I_ SOL_ON
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_COMPILER_CLANG) && SOL_IS_ON(SOL_PLATFORM_APPLE)
+ #if defined(__has_include)
+ #if __has_include()
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_OFF
+ #endif
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_OFF
+ #endif
+ #else
+ #define SOL_STD_VARIANT_I_ SOL_DEFAULT_ON
+ #endif
+#endif // make is_automagical on/off by default
+
+#if defined(SOL_NOEXCEPT_FUNCTION_TYPE)
+ #if (SOL_NOEXCEPT_FUNCTION_TYPE != 0)
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_ON
+ #else
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_OFF
+ #endif
+#else
+ #if defined(__cpp_noexcept_function_type)
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_COMPILER_VCXX) && (defined(_MSVC_LANG) && (_MSVC_LANG < 201403L))
+ // There is a bug in the VC++ compiler??
+ // on /std:c++latest under x86 conditions (VS 15.5.2),
+ // compiler errors are tossed for noexcept markings being on function types
+ // that are identical in every other way to their non-noexcept marked types function types...
+ // VS 2019: There is absolutely a bug.
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_OFF
+ #else
+ #define SOL_USE_NOEXCEPT_FUNCTION_TYPE_I_ SOL_DEFAULT_ON
+ #endif
+#endif // noexcept is part of a function's type
+
+#if defined(SOL_STACK_STRING_OPTIMIZATION_SIZE) && SOL_STACK_STRING_OPTIMIZATION_SIZE > 0
+ #define SOL_OPTIMIZATION_STRING_CONVERSION_STACK_SIZE_I_ SOL_STACK_STRING_OPTIMIZATION_SIZE
+#else
+ #define SOL_OPTIMIZATION_STRING_CONVERSION_STACK_SIZE_I_ 1024
+#endif
+
+#if defined(SOL_ID_SIZE) && SOL_ID_SIZE > 0
+ #define SOL_ID_SIZE_I_ SOL_ID_SIZE
+#else
+ #define SOL_ID_SIZE_I_ 512
+#endif
+
+#if defined(LUA_IDSIZE) && LUA_IDSIZE > 0
+ #define SOL_FILE_ID_SIZE_I_ LUA_IDSIZE
+#elif defined(SOL_ID_SIZE) && SOL_ID_SIZE > 0
+ #define SOL_FILE_ID_SIZE_I_ SOL_FILE_ID_SIZE
+#else
+ #define SOL_FILE_ID_SIZE_I_ 2048
+#endif
+
+#if defined(SOL_PRINT_ERRORS)
+ #if (SOL_PRINT_ERRORS != 0)
+ #define SOL_PRINT_ERRORS_I_ SOL_ON
+ #else
+ #define SOL_PRINT_ERRORS_I_ SOL_OFF
+ #endif
+#else
+ #if SOL_IS_ON(SOL_ALL_SAFETIES_ON)
+ #define SOL_PRINT_ERRORS_I_ SOL_ON
+ #elif SOL_IS_ON(SOL_DEBUG_BUILD)
+ #define SOL_PRINT_ERRORS_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_PRINT_ERRORS_I_ SOL_OFF
+ #endif
+#endif
+
+#if defined(SOL_DEFAULT_PASS_ON_ERROR)
+ #if (SOL_DEFAULT_PASS_ON_ERROR != 0)
+ #define SOL_DEFAULT_PASS_ON_ERROR_I_ SOL_ON
+ #else
+ #define SOL_DEFAULT_PASS_ON_ERROR_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_DEFAULT_PASS_ON_ERROR_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_USING_CXX_LUA)
+ #if (SOL_USING_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUA_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUA_I_ SOL_OFF
+ #endif
+#elif defined(SOL_USE_CXX_LUA)
+ #if (SOL_USE_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUA_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUA_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_CXX_LUA_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_USING_CXX_LUAJIT)
+ #if (SOL_USING_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_OFF
+ #endif
+#elif defined(SOL_USE_CXX_LUAJIT)
+ #if (SOL_USE_CXX_LUA != 0)
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_ON
+ #else
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_CXX_LUAJIT_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_NO_LUA_HPP)
+ #if (SOL_NO_LUA_HPP != 0)
+ #define SOL_USE_LUA_HPP_I_ SOL_OFF
+ #else
+ #define SOL_USE_LUA_HPP_I_ SOL_ON
+ #endif
+#elif defined(SOL_USING_CXX_LUA)
+ #define SOL_USE_LUA_HPP_I_ SOL_OFF
+#elif defined(__has_include)
+ #if __has_include()
+ #define SOL_USE_LUA_HPP_I_ SOL_ON
+ #else
+ #define SOL_USE_LUA_HPP_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_LUA_HPP_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_CONTAINERS_START)
+ #define SOL_CONTAINER_START_INDEX_I_ SOL_CONTAINERS_START
+#elif defined(SOL_CONTAINERS_START_INDEX)
+ #define SOL_CONTAINER_START_INDEX_I_ SOL_CONTAINERS_START_INDEX
+#elif defined(SOL_CONTAINER_START_INDEX)
+ #define SOL_CONTAINER_START_INDEX_I_ SOL_CONTAINER_START_INDEX
+#else
+ #define SOL_CONTAINER_START_INDEX_I_ 1
+#endif
+
+#if defined (SOL_NO_MEMORY_ALIGNMENT)
+ #if (SOL_NO_MEMORY_ALIGNMENT != 0)
+ #define SOL_ALIGN_MEMORY_I_ SOL_OFF
+ #else
+ #define SOL_ALIGN_MEMORY_I_ SOL_ON
+ #endif
+#else
+ #define SOL_ALIGN_MEMORY_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_USE_BOOST)
+ #if (SOL_USE_BOOST != 0)
+ #define SOL_USE_BOOST_I_ SOL_ON
+ #else
+ #define SOL_USE_BOOST_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_BOOST_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_USE_UNSAFE_BASE_LOOKUP)
+ #if (SOL_USE_UNSAFE_BASE_LOOKUP != 0)
+ #define SOL_USE_UNSAFE_BASE_LOOKUP_I_ SOL_ON
+ #else
+ #define SOL_USE_UNSAFE_BASE_LOOKUP_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_USE_UNSAFE_BASE_LOOKUP_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_INSIDE_UNREAL)
+ #if (SOL_INSIDE_UNREAL != 0)
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_ON
+ #else
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_OFF
+ #endif
+#else
+ #if defined(UE_BUILD_DEBUG) || defined(UE_BUILD_DEVELOPMENT) || defined(UE_BUILD_TEST) || defined(UE_BUILD_SHIPPING) || defined(UE_SERVER)
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_INSIDE_UNREAL_ENGINE_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if defined(SOL_NO_COMPAT)
+ #if (SOL_NO_COMPAT != 0)
+ #define SOL_USE_COMPATIBILITY_LAYER_I_ SOL_OFF
+ #else
+ #define SOL_USE_COMPATIBILITY_LAYER_I_ SOL_ON
+ #endif
+#else
+ #define SOL_USE_COMPATIBILITY_LAYER_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_GET_FUNCTION_POINTER_UNSAFE)
+ #if (SOL_GET_FUNCTION_POINTER_UNSAFE != 0)
+ #define SOL_GET_FUNCTION_POINTER_UNSAFE_I_ SOL_ON
+ #else
+ #define SOL_GET_FUNCTION_POINTER_UNSAFE_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_GET_FUNCTION_POINTER_UNSAFE_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_FUNCTION_CALL_VALUE_SEMANTICS)
+ #if (SOL_FUNCTION_CALL_VALUE_SEMANTICS != 0)
+ #define SOL_FUNCTION_CALL_VALUE_SEMANTICS_I_ SOL_ON
+ #else
+ #define SOL_FUNCTION_CALL_VALUE_SEMANTICS_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_FUNCTION_CALL_VALUE_SEMANTICS_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_MINGW_CCTYPE_IS_POISONED)
+ #if (SOL_MINGW_CCTYPE_IS_POISONED != 0)
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_ON
+ #else
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_OFF
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_MINGW) && defined(__GNUC__) && (__GNUC__ < 6)
+ // MinGW is off its rocker in some places...
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_MINGW_CCTYPE_IS_POISONED_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_CHAR8_T)
+ #if (SOL_CHAR8_T != 0)
+ #define SOL_CHAR8_T_I_ SOL_ON
+ #else
+ #define SOL_CHAR8_T_I_ SOL_OFF
+ #endif
+#else
+ #if defined(__cpp_char8_t)
+ #define SOL_CHAR8_T_I_ SOL_DEFAULT_ON
+ #else
+ #define SOL_CHAR8_T_I_ SOL_DEFAULT_OFF
+ #endif
+#endif
+
+#if SOL_IS_ON(SOL_USE_BOOST)
+ #include
+
+ #if BOOST_VERSION >= 107500 // Since Boost 1.75.0 boost::none is constexpr
+ #define SOL_BOOST_NONE_CONSTEXPR_I_ constexpr
+ #else
+ #define SOL_BOOST_NONE_CONSTEXPR_I_ const
+ #endif // BOOST_VERSION
+#else
+ // assume boost isn't using a garbage version
+ #define SOL_BOOST_NONE_CONSTEXPR_I_ constexpr
+#endif
+
+#if defined(SOL2_CI)
+ #if (SOL2_CI != 0)
+ #define SOL2_CI_I_ SOL_ON
+ #else
+ #define SOL2_CI_I_ SOL_OFF
+ #endif
+#else
+ #define SOL2_CI_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_C_ASSERT)
+ #define SOL_USER_C_ASSERT_I_ SOL_ON
+#else
+ #define SOL_USER_C_ASSERT_I_ SOL_DEFAULT_OFF
+#endif
+
+#if defined(SOL_M_ASSERT)
+ #define SOL_USER_M_ASSERT_I_ SOL_ON
+#else
+ #define SOL_USER_M_ASSERT_I_ SOL_DEFAULT_OFF
+#endif
+
+// beginning of sol/prologue.hpp
+
+#if defined(SOL_PROLOGUE_I_)
+ #error "[sol2] Library Prologue was already included in translation unit and not properly ended with an epilogue."
+#endif
+
+#define SOL_PROLOGUE_I_ 1
+
+#if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ #define _FWD(...) static_cast( __VA_ARGS__ )
+
+ #if SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define _MOVE(...) static_cast<__typeof( __VA_ARGS__ )&&>( __VA_ARGS__ )
+ #else
+ #include
+
+ #define _MOVE(...) static_cast<::std::remove_reference_t<( __VA_ARGS__ )>&&>( __VA_OPT__(,) )
+ #endif
+#endif
+
+// end of sol/prologue.hpp
+
+// beginning of sol/epilogue.hpp
+
+#if !defined(SOL_PROLOGUE_I_)
+ #error "[sol2] Library Prologue is missing from this translation unit."
+#else
+ #undef SOL_PROLOGUE_I_
+#endif
+
+#if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ #undef _FWD
+ #undef _MOVE
+#endif
+
+// end of sol/epilogue.hpp
+
+// beginning of sol/detail/build_version.hpp
+
+#if defined(SOL_DLL)
+ #if (SOL_DLL != 0)
+ #define SOL_DLL_I_ SOL_ON
+ #else
+ #define SOL_DLL_I_ SOL_OFF
+ #endif
+#elif SOL_IS_ON(SOL_COMPILER_VCXX) && (defined(DLL_) || defined(_DLL))
+ #define SOL_DLL_I_ SOL_DEFAULT_ON
+#else
+ #define SOL_DLL_I_ SOL_DEFAULT_OFF
+#endif // DLL definition
+
+#if defined(SOL_HEADER_ONLY)
+ #if (SOL_HEADER_ONLY != 0)
+ #define SOL_HEADER_ONLY_I_ SOL_ON
+ #else
+ #define SOL_HEADER_ONLY_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_HEADER_ONLY_I_ SOL_DEFAULT_OFF
+#endif // Header only library
+
+#if defined(SOL_BUILD)
+ #if (SOL_BUILD != 0)
+ #define SOL_BUILD_I_ SOL_ON
+ #else
+ #define SOL_BUILD_I_ SOL_OFF
+ #endif
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_BUILD_I_ SOL_DEFAULT_OFF
+#else
+ #define SOL_BUILD_I_ SOL_DEFAULT_ON
+#endif
+
+#if defined(SOL_UNITY_BUILD)
+ #if (SOL_UNITY_BUILD != 0)
+ #define SOL_UNITY_BUILD_I_ SOL_ON
+ #else
+ #define SOL_UNITY_BUILD_I_ SOL_OFF
+ #endif
+#else
+ #define SOL_UNITY_BUILD_I_ SOL_DEFAULT_OFF
+#endif // Header only library
+
+#if defined(SOL_C_FUNCTION_LINKAGE)
+ #define SOL_C_FUNCTION_LINKAGE_I_ SOL_C_FUNCTION_LINKAGE
+#else
+ #if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ // C++
+ #define SOL_C_FUNCTION_LINKAGE_I_ extern "C"
+ #else
+ // normal
+ #define SOL_C_FUNCTION_LINKAGE_I_
+ #endif // C++ or not
+#endif // Linkage specification for C functions
+
+#if defined(SOL_API_LINKAGE)
+ #define SOL_API_LINKAGE_I_ SOL_API_LINKAGE
+#else
+ #if SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX) || SOL_IS_ON(SOL_PLATFORM_WINDOWS) || SOL_IS_ON(SOL_PLATFORM_CYGWIN)
+ // MSVC Compiler; or, Windows, or Cygwin platforms
+ #if SOL_IS_ON(SOL_BUILD)
+ // Building the library
+ #if SOL_IS_ON(SOL_COMPILER_GCC)
+ // Using GCC
+ #define SOL_API_LINKAGE_I_ __attribute__((dllexport))
+ #else
+ // Using Clang, MSVC, etc...
+ #define SOL_API_LINKAGE_I_ __declspec(dllexport)
+ #endif
+ #else
+ #if SOL_IS_ON(SOL_COMPILER_GCC)
+ #define SOL_API_LINKAGE_I_ __attribute__((dllimport))
+ #else
+ #define SOL_API_LINKAGE_I_ __declspec(dllimport)
+ #endif
+ #endif
+ #else
+ // extern if building normally on non-MSVC
+ #define SOL_API_LINKAGE_I_ extern
+ #endif
+ #elif SOL_IS_ON(SOL_UNITY_BUILD)
+ // Built-in library, like how stb typical works
+ #if SOL_IS_ON(SOL_HEADER_ONLY)
+ // Header only, so functions are defined "inline"
+ #define SOL_API_LINKAGE_I_ inline
+ #else
+ // Not header only, so seperately compiled files
+ #define SOL_API_LINKAGE_I_ extern
+ #endif
+ #else
+ // Normal static library
+ #if SOL_IS_ON(SOL_BUILD_CXX_MODE)
+ #define SOL_API_LINKAGE_I_
+ #else
+ #define SOL_API_LINKAGE_I_ extern
+ #endif
+ #endif // DLL or not
+#endif // Build definitions
+
+#if defined(SOL_PUBLIC_FUNC_DECL)
+ #define SOL_PUBLIC_FUNC_DECL_I_ SOL_PUBLIC_FUNC_DECL
+#else
+ #define SOL_PUBLIC_FUNC_DECL_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_INTERNAL_FUNC_DECL_)
+ #define SOL_INTERNAL_FUNC_DECL_I_ SOL_INTERNAL_FUNC_DECL_
+#else
+ #define SOL_INTERNAL_FUNC_DECL_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_PUBLIC_FUNC_DEF)
+ #define SOL_PUBLIC_FUNC_DEF_I_ SOL_PUBLIC_FUNC_DEF
+#else
+ #define SOL_PUBLIC_FUNC_DEF_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_INTERNAL_FUNC_DEF)
+ #define SOL_INTERNAL_FUNC_DEF_I_ SOL_INTERNAL_FUNC_DEF
+#else
+ #define SOL_INTERNAL_FUNC_DEF_I_ SOL_API_LINKAGE_I_
+#endif
+
+#if defined(SOL_FUNC_DECL)
+ #define SOL_FUNC_DECL_I_ SOL_FUNC_DECL
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_FUNC_DECL_I_
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_FUNC_DECL_I_ extern __declspec(dllexport)
+ #else
+ #define SOL_FUNC_DECL_I_ extern __declspec(dllimport)
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_FUNC_DECL_I_ extern __attribute__((visibility("default")))
+ #else
+ #define SOL_FUNC_DECL_I_ extern
+ #endif
+#endif
+
+#if defined(SOL_FUNC_DEFN)
+ #define SOL_FUNC_DEFN_I_ SOL_FUNC_DEFN
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_FUNC_DEFN_I_ inline
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_FUNC_DEFN_I_ __declspec(dllexport)
+ #else
+ #define SOL_FUNC_DEFN_I_ __declspec(dllimport)
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_FUNC_DEFN_I_ __attribute__((visibility("default")))
+ #else
+ #define SOL_FUNC_DEFN_I_
+ #endif
+#endif
+
+#if defined(SOL_HIDDEN_FUNC_DECL)
+ #define SOL_HIDDEN_FUNC_DECL_I_ SOL_HIDDEN_FUNC_DECL
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_HIDDEN_FUNC_DECL_I_
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern __declspec(dllexport)
+ #else
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern __declspec(dllimport)
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern __attribute__((visibility("default")))
+ #else
+ #define SOL_HIDDEN_FUNC_DECL_I_ extern
+ #endif
+#endif
+
+#if defined(SOL_HIDDEN_FUNC_DEFN)
+ #define SOL_HIDDEN_FUNC_DEFN_I_ SOL_HIDDEN_FUNC_DEFN
+#elif SOL_IS_ON(SOL_HEADER_ONLY)
+ #define SOL_HIDDEN_FUNC_DEFN_I_ inline
+#elif SOL_IS_ON(SOL_DLL)
+ #if SOL_IS_ON(SOL_COMPILER_VCXX)
+ #if SOL_IS_ON(SOL_BUILD)
+ #define SOL_HIDDEN_FUNC_DEFN_I_
+ #else
+ #define SOL_HIDDEN_FUNC_DEFN_I_
+ #endif
+ #elif SOL_IS_ON(SOL_COMPILER_GCC) || SOL_IS_ON(SOL_COMPILER_CLANG)
+ #define SOL_HIDDEN_FUNC_DEFN_I_ __attribute__((visibility("hidden")))
+ #else
+ #define SOL_HIDDEN_FUNC_DEFN_I_
+ #endif
+#endif
+
+// end of sol/detail/build_version.hpp
+
+// end of sol/version.hpp
+
+#if SOL_IS_ON(SOL_INSIDE_UNREAL_ENGINE)
+#ifdef check
+#pragma push_macro("check")
+#undef check
+#endif
+#endif // Unreal Engine 4 Bullshit
+
+#if SOL_IS_ON(SOL_COMPILER_GCC)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#pragma GCC diagnostic ignored "-Wconversion"
+#if __GNUC__ > 6
+#pragma GCC diagnostic ignored "-Wnoexcept-type"
+#endif
+#elif SOL_IS_ON(SOL_COMPILER_CLANG)
+#elif SOL_IS_ON(SOL_COMPILER_VCXX)
+#pragma warning(push)
+#pragma warning(disable : 4505) // unreferenced local function has been removed GEE THANKS
+#endif // clang++ vs. g++ vs. VC++
+
+// beginning of sol/forward.hpp
+
+#ifndef SOL_FORWARD_HPP
+#define SOL_FORWARD_HPP
+
+#include
+#include
+#include
+
+#if SOL_IS_ON(SOL_USE_CXX_LUA) || SOL_IS_ON(SOL_USE_CXX_LUAJIT)
+struct lua_State;
+#else
+extern "C" {
+struct lua_State;
+}
+#endif // C++ Mangling for Lua vs. Not
+
+namespace sol {
+
+ enum class type;
+
+ class stateless_reference;
+ template
+ class basic_reference;
+ using reference = basic_reference;
+ using main_reference = basic_reference;
+ class stateless_stack_reference;
+ class stack_reference;
+
+ template
+ class basic_bytecode;
+
+ struct lua_value;
+
+ struct proxy_base_tag;
+ template
+ struct proxy_base;
+ template
+ struct table_proxy;
+
+ template
+ class basic_table_core;
+ template
+ using table_core = basic_table_core;
+ template
+ using main_table_core = basic_table_core;
+ template
+ using stack_table_core = basic_table_core;
+ template
+ using basic_table = basic_table_core;
+ using table = table_core;
+ using global_table = table_core;
+ using main_table = main_table_core;
+ using main_global_table = main_table_core;
+ using stack_table = stack_table_core;
+ using stack_global_table = stack_table_core;
+
+ template
+ struct basic_lua_table;
+ using lua_table = basic_lua_table;
+ using stack_lua_table = basic_lua_table;
+
+ template
+ class basic_usertype;
+ template
+ using usertype = basic_usertype;
+ template
+ using stack_usertype = basic_usertype;
+
+ template
+ class basic_metatable;
+ using metatable = basic_metatable;
+ using stack_metatable = basic_metatable;
+
+ template
+ struct basic_environment;
+ using environment = basic_environment;
+ using main_environment = basic_environment;
+ using stack_environment = basic_environment;
+
+ template
+ class basic_function;
+ template
+ class basic_protected_function;
+ using unsafe_function = basic_function;
+ using safe_function = basic_protected_function;
+ using main_unsafe_function = basic_function;
+ using main_safe_function = basic_protected_function;
+ using stack_unsafe_function = basic_function;
+ using stack_safe_function = basic_protected_function;
+ using stack_aligned_unsafe_function = basic_function;
+ using stack_aligned_safe_function = basic_protected_function;
+ using protected_function = safe_function;
+ using main_protected_function = main_safe_function;
+ using stack_protected_function = stack_safe_function;
+ using stack_aligned_protected_function = stack_aligned_safe_function;
+#if SOL_IS_ON(SOL_SAFE_FUNCTION_OBJECTS)
+ using function = protected_function;
+ using main_function = main_protected_function;
+ using stack_function = stack_protected_function;
+ using stack_aligned_function = stack_aligned_safe_function;
+#else
+ using function = unsafe_function;
+ using main_function = main_unsafe_function;
+ using stack_function = stack_unsafe_function;
+ using stack_aligned_function = stack_aligned_unsafe_function;
+#endif
+ using stack_aligned_stack_handler_function = basic_protected_function;
+
+ struct unsafe_function_result;
+ struct protected_function_result;
+ using safe_function_result = protected_function_result;
+#if SOL_IS_ON(SOL_SAFE_FUNCTION_OBJECTS)
+ using function_result = safe_function_result;
+#else
+ using function_result = unsafe_function_result;
+#endif
+
+ template
+ class basic_object_base;
+ template
+ class basic_object;
+ template
+ class basic_userdata;
+ template
+ class basic_lightuserdata;
+ template
+ class basic_coroutine;
+ template
+ class basic_packaged_coroutine;
+ template
+ class basic_thread;
+
+ using object = basic_object;
+ using userdata = basic_userdata;
+ using lightuserdata = basic_lightuserdata;
+ using thread = basic_thread;
+ using coroutine = basic_coroutine;
+ using packaged_coroutine = basic_packaged_coroutine;
+ using main_object = basic_object;
+ using main_userdata = basic_userdata;
+ using main_lightuserdata = basic_lightuserdata;
+ using main_coroutine = basic_coroutine;
+ using stack_object = basic_object;
+ using stack_userdata = basic_userdata;
+ using stack_lightuserdata = basic_lightuserdata;
+ 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;
+ struct this_state;
+ struct this_main_state;
+ struct this_environment;
+
+ class state_view;
+ class state;
+
+ template
+ struct as_table_t;
+ template
+ struct as_container_t;
+ template
+ struct nested;
+ template
+ struct light;
+ template
+ struct user;
+ template
+ struct as_args_t;
+ template
+ struct protect_t;
+ template
+ struct policy_wrapper;
+
+ template
+ struct usertype_traits;
+ template
+ struct unique_usertype_traits;
+
+ template
+ struct types {
+ typedef std::make_index_sequence indices;
+ static constexpr std::size_t size() {
+ return sizeof...(Args);
+ }
+ };
+
+ template
+ struct derive : std::false_type {
+ typedef types<> type;
+ };
+
+ template
+ struct base : std::false_type {
+ typedef types<> type;
+ };
+
+ template
+ struct weak_derive {
+ static bool value;
+ };
+
+ template
+ bool weak_derive::value = false;
+
+ namespace stack {
+ struct record;
+ }
+
+#if SOL_IS_OFF(SOL_USE_BOOST)
+ template
+ class optional;
+
+ template
+ class optional;
+#endif
+
+ using check_handler_type = int(lua_State*, int, type, type, const char*);
+
+} // namespace sol
+
+#define SOL_BASE_CLASSES(T, ...) \
+ namespace sol { \
+ template <> \
+ struct base : std::true_type { \
+ typedef ::sol::types<__VA_ARGS__> type; \
+ }; \
+ } \
+ void a_sol3_detail_function_decl_please_no_collide()
+#define SOL_DERIVED_CLASSES(T, ...) \
+ namespace sol { \
+ template <> \
+ struct derive : std::true_type { \
+ typedef ::sol::types<__VA_ARGS__> type; \
+ }; \
+ } \
+ void a_sol3_detail_function_decl_please_no_collide()
+
+#endif // SOL_FORWARD_HPP
+// end of sol/forward.hpp
+
+// beginning of sol/forward_detail.hpp
+
+#ifndef SOL_FORWARD_DETAIL_HPP
+#define SOL_FORWARD_DETAIL_HPP
+
+// beginning of sol/traits.hpp
+
+// beginning of sol/tuple.hpp
+
+// beginning of sol/base_traits.hpp
+
+#include
+
+namespace sol {
+ namespace detail {
+ struct unchecked_t { };
+ const unchecked_t unchecked = unchecked_t {};
+ } // namespace detail
+
+ namespace meta {
+ using sfinae_yes_t = std::true_type;
+ using sfinae_no_t = std::false_type;
+
+ template
+ using void_t = void;
+
+ template
+ using unqualified = std::remove_cv>;
+
+ template
+ using unqualified_t = typename unqualified::type;
+
+ namespace meta_detail {
+ template
+ struct unqualified_non_alias : unqualified { };
+
+ template class Test, class, class... Args>
+ struct is_detected : std::false_type { };
+
+ template class Test, class... Args>
+ struct is_detected>, Args...> : std::true_type { };
+ } // namespace meta_detail
+
+ template class Trait, class... Args>
+ using is_detected = typename meta_detail::is_detected::type;
+
+ template class Trait, class... Args>
+ constexpr inline bool is_detected_v = is_detected::value;
+
+ template
+ using index_value = std::integral_constant;
+
+ template
+ struct conditional {
+ template
+ using type = T;
+ };
+
+ template <>
+ struct conditional {
+ template
+ using type = U;
+ };
+
+ template