diff --git a/.github/workflows/build_lib.yml b/.github/workflows/build_lib.yml deleted file mode 100644 index 74b9487..0000000 --- a/.github/workflows/build_lib.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: "Build d-SEAMS yodaLib" -on: [push, pull_request] -jobs: - build_lib: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Install Conda environment from environment.yml - uses: mamba-org/provision-with-micromamba@main - - - name: Build library with meson - shell: bash -l {0} - run: | - mkdir bbdir - meson setup bbdir - meson compile -C bbdir diff --git a/.github/workflows/build_meson.yml b/.github/workflows/build_meson.yml new file mode 100644 index 0000000..a0e17e4 --- /dev/null +++ b/.github/workflows/build_meson.yml @@ -0,0 +1,43 @@ +name: "[meson] test yodaLib, yodaStruct" +on: [push, pull_request] +jobs: + build_lib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - uses: mamba-org/setup-micromamba@v1 + with: + generate-run-shell: true + environment-file: environment.yml + cache-environment: true + cache-downloads: false + + - name: Build library with meson + shell: micromamba-shell {0} + run: | + mkdir bbdir + meson setup bbdir + meson compile -C bbdir + + build_pkg: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - uses: mamba-org/setup-micromamba@v1 + with: + generate-run-shell: true + environment-file: environment.yml + cache-environment: true + cache-downloads: false + + - name: Test application with meson + shell: micromamba-shell {0} + run: | + mkdir bbdir + meson setup bbdir -Dwith_lua=True \ + -Dwith_tests=True --prefix $CONDA_PREFIX + meson install -C bbdir + export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + $CONDA_PREFIX/bin/yodaStruct -c lua_inputs/config.yml diff --git a/.gitignore b/.gitignore index 652ef93..c6f0c65 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ shellBuild/ doxyYoda doxyYoda_* run* +bbdir/ # Manual updates ONLY spack.yml /.spack-env/ @@ -336,4 +337,4 @@ TSWLatexianTemp* .history .ionide -# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode \ No newline at end of file +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode diff --git a/environment.yml b/environment.yml index 416abac..0a6b631 100644 --- a/environment.yml +++ b/environment.yml @@ -17,9 +17,10 @@ dependencies: - cmake - meson - cmake + - pkgconfig # - lua-luafilesystem - luarocks # Pinned - - fmt==9.0.0 + - fmt==9.1.0 - eigen==3.4.0 - - lua==5.4.4 + - lua==5.3.* diff --git a/meson.build b/meson.build index e67df5f..3388fc2 100644 --- a/meson.build +++ b/meson.build @@ -15,7 +15,7 @@ # The project is seams-core, the executable is yodaStruct project('seams-core', 'cpp', version : '1.0.1', - default_options : ['warning_level=3', 'cpp_std=c++17']) + default_options : ['warning_level=3', 'cpp_std=c++14']) host_system = host_machine.system() @@ -33,7 +33,7 @@ if host_system == 'darwin' # Workaround for # error: aligned allocation function of # type 'void *(unsigned long, enum std::align_val_t)' is only available on macOS 10.13 or newer - add_global_arguments(['-faligned-allocation', '-ggdb', '-Og', '-fno-inline-functions'], language: 'cpp') + add_project_arguments(['-faligned-allocation', '-ggdb', '-Og', '-fno-inline-functions'], language: 'cpp') endif cppc = meson.get_compiler('cpp') @@ -45,14 +45,13 @@ _deps += m_dep _deps += [declare_dependency(link_args: '-lstdc++')] # All of which can be installed with meson wrap install originally -subproject('eigen') eigen_dep = dependency('eigen3', version: '3.4.0', required: true) _deps += [ eigen_dep ] fmt_dep = dependency('fmt', - version: '9.0.0', + version: '9.1.0', required: true) _deps += [ fmt_dep ] @@ -95,6 +94,7 @@ ydsl_sources = [ 'src/ring.cpp', 'src/seams_input.cpp', 'src/seams_output.cpp', + 'src/selection.cpp', 'src/shapeMatch.cpp', 'src/topo_bulk.cpp', 'src/topo_one_dim.cpp', @@ -109,6 +109,13 @@ ydslib = library('yodaLib', install: true ) +yds_dep = declare_dependency( + link_with: [ydslib, _linkto], + include_directories: _incdirs, + compile_args: _args, + dependencies: _deps) + + # -------------------- Executable # Only when not a subproject @@ -116,33 +123,15 @@ if (not meson.is_subproject()) # Lua is only used in the executable if get_option('with_lua') lua_dep = dependency('lua', - version : '5.4.6', - required : false) - if lua_dep.found() + version : '<5.4', + required : true) _deps += [ lua_dep ] - endif - if (not lua_dep.found()) - message('Trying with subproject lua, but luafilesystem might be problematic') - subproject('lua') - lua_dep = dependency('lua', - version : '5.4.4', - required : false) - if lua_dep.found() - _deps += [ lua_dep ] - endif - else - message('Lua not found, will assume spack is present') - # Assume spack - lua_spack_dep = cppc.find_library('lua', dirs: - meson.source_root()+'/../.spack-env/view/lib', - required: true) - _deps += [ lua_spack_dep ] - endif # Build the executable yds = executable('yodaStruct', - ['src/main.cpp'], + ['src/main.cpp', + 'src/opt_parser.cpp'], link_with : _linkto, - dependencies: _deps, + dependencies: [_deps, yds_dep], cpp_args : _args, include_directories : _incdirs, install : true) diff --git a/src/include/external/sol/config.hpp b/src/include/external/sol/config.hpp deleted file mode 100644 index 2fe437c..0000000 --- a/src/include/external/sol/config.hpp +++ /dev/null @@ -1,53 +0,0 @@ -// 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/src/include/external/sol/forward.hpp b/src/include/external/sol/forward.hpp deleted file mode 100644 index f8ebaf1..0000000 --- a/src/include/external/sol/forward.hpp +++ /dev/null @@ -1,1321 +0,0 @@ -// 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/src/include/external/sol/sol.hpp b/src/include/external/sol/sol.hpp index 0bb68eb..30cb4f4 100644 --- a/src/include/external/sol/sol.hpp +++ b/src/include/external/sol/sol.hpp @@ -1,6 +1,6 @@ // The MIT License (MIT) -// Copyright (c) 2013-2020 Rapptz, ThePhD and contributors +// Copyright (c) 2013-2018 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 @@ -20,1223 +20,338 @@ // 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) +// Generated 2018-11-28 08:50:22.534324 UTC +// This header was generated with sol v2.20.6 (revision 9b782ff) // https://github.com/ThePhD/sol2 #ifndef SOL_SINGLE_INCLUDE_HPP #define SOL_SINGLE_INCLUDE_HPP -// beginning of sol/sol.hpp +// beginning of sol.hpp #ifndef SOL_HPP #define SOL_HPP -// beginning of sol/version.hpp +#if defined(UE_BUILD_DEBUG) || defined(UE_BUILD_DEVELOPMENT) || defined(UE_BUILD_TEST) || defined(UE_BUILD_SHIPPING) || defined(UE_SERVER) +#define SOL_INSIDE_UNREAL 1 +#endif // Unreal Engine 4 bullshit -#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_INSIDE_UNREAL) && SOL_INSIDE_UNREAL +#ifdef check +#define SOL_INSIDE_UNREAL_REMOVED_CHECK 1 +#undef check +#endif +#endif // Unreal Engine 4 Bullshit -#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 +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wshadow" +#pragma GCC diagnostic ignored "-Wconversion" +#if __GNUC__ > 6 +#pragma GCC diagnostic ignored "-Wnoexcept-type" #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 +#elif defined _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4324 ) // structure was padded due to alignment specifier +#pragma warning( disable : 4503 ) // decorated name horse shit +#pragma warning( disable : 4702 ) // unreachable code +#pragma warning( disable: 4127 ) // 'conditional expression is constant' yeah that's the point your old compilers don't have `if constexpr` you jerk +#pragma warning( disable: 4505 ) // some other nonsense warning +#endif // clang++ vs. g++ vs. VC++ -#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 +// beginning of sol/forward.hpp -#define SOL_PLATFORM_ARM32_I_ SOL_OFF -#define SOL_PLATFORM_ARM64_I_ SOL_OFF +// beginning of sol/feature_test.hpp -#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(__cplusplus) && __cplusplus == 201703L) || (defined(_MSC_VER) && _MSC_VER > 1900 && ((defined(_HAS_CXX17) && _HAS_CXX17 == 1) || (defined(_MSVC_LANG) && (_MSVC_LANG > 201402L)))) +#ifndef SOL_CXX17_FEATURES +#define SOL_CXX17_FEATURES 1 +#endif // C++17 features macro +#endif // C++17 features check -#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 +#if defined(SOL_CXX17_FEATURES) && SOL_CXX17_FEATURES +#if defined(__cpp_noexcept_function_type) || ((defined(_MSC_VER) && _MSC_VER > 1911) && (defined(_MSVC_LANG) && ((_MSVC_LANG >= 201403L)))) +#ifndef SOL_NOEXCEPT_FUNCTION_TYPE +#define SOL_NOEXCEPT_FUNCTION_TYPE 1 +#endif // noexcept is part of a function's type +#endif // compiler-specific checks +#if defined(__clang__) && defined(__APPLE__) +#if defined(__has_include) +#if __has_include() +#define SOL_STD_VARIANT 1 +#endif // has include nonsense +#endif // __has_include #else - #define SOL_PLATFORM_CYGWIN_I_ SOL_DEFAULT_OFF -#endif +#define SOL_STD_VARIANT 1 +#endif // Clang screws up variant +#endif // C++17 only -#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 +// beginning of sol/config.hpp -#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 +#ifdef _MSC_VER + #if defined(_DEBUG) && !defined(NDEBUG) -#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 + #ifndef SOL_IN_DEBUG_DETECTED + #define SOL_IN_DEBUG_DETECTED 1 #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 + #endif // VC++ Debug macros -#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 + #ifndef _CPPUNWIND + #ifndef SOL_NO_EXCEPTIONS + #define SOL_NO_EXCEPTIONS 1 #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 + #endif // Automatic Exceptions -#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 + #ifndef _CPPRTTI + #ifndef SOL_NO_RTTI + #define SOL_NO_RTTI 1 #endif -#else - #define SOL_ALL_SAFETIES_ON_I_ SOL_DEFAULT_OFF -#endif + #endif // Automatic RTTI +#elif defined(__GNUC__) || defined(__clang__) -#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(NDEBUG) && !defined(__OPTIMIZE__) -#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 + #ifndef SOL_IN_DEBUG_DETECTED + #define SOL_IN_DEBUG_DETECTED 1 #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 + #endif // Not Debug && g++ optimizer flag -#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 + #ifndef __EXCEPTIONS + #ifndef SOL_NO_EXCEPTIONS + #define SOL_NO_EXCEPTIONS 1 #endif -#endif + #endif // No Exceptions -#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 + #ifndef __GXX_RTTI + #ifndef SOL_NO_RTII + #define SOL_NO_RTTI 1 #endif -#endif + #endif // No RTTI -#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 +#endif // vc++ || clang++/g++ -#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_CHECK_ARGUMENTS) && SOL_CHECK_ARGUMENTS -#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 + // Checks low-level getter function + // (and thusly, affects nearly entire framework) + #if !defined(SOL_SAFE_GETTER) + #define SOL_SAFE_GETTER 1 #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 + // Checks access on usertype functions + // local my_obj = my_type.new() + // my_obj.my_member_function() + // -- bad syntax and crash + #if !defined(SOL_SAFE_USERTYPE) + #define SOL_SAFE_USERTYPE 1 #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 + // Checks sol::reference derived boundaries + // sol::function ref(L, 1); + // sol::userdata sref(L, 2); + #if !defined(SOL_SAFE_REFERENCES) + #define SOL_SAFE_REFERENCES 1 #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 + // Changes all typedefs of sol::function to point to the + // protected_function version, instead of unsafe_function + #if !defined(SOL_SAFE_FUNCTION) + #define SOL_SAFE_FUNCTION 1 #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 + // Checks function parameters and + // returns upon call into/from Lua + // local a = 1 + // local b = "woof" + // my_c_function(a, b) + #if !defined(SOL_SAFE_FUNCTION_CALLS) + #define SOL_SAFE_FUNCTION_CALLS 1 #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 + // Checks conversions + // int v = lua["bark"]; + // int v2 = my_sol_function(); + #if !defined(SOL_SAFE_PROXIES) + #define SOL_SAFE_PROXIES 1 #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 + // Check overflowing number conversions + // for things like 64 bit integers that don't fit in a typical lua_Number + // for Lua 5.1 and 5.2 + #if !defined(SOL_SAFE_NUMERICS) + #define SOL_SAFE_NUMERICS 1 #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 + // Turn off Number Precision Checks + // if this is defined, we do not do range + // checks on integers / unsigned integers that might + // be bigger than what Lua can represent + #if !defined(SOL_NO_CHECK_NUMBER_PRECISION) + // off by default + #define SOL_NO_CHECK_NUMBER_PRECISION 0 #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 +#endif // Turn on Safety for all if top-level macro is defined -#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_IN_DEBUG_DETECTED) && SOL_IN_DEBUG_DETECTED -#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 + #if !defined(SOL_SAFE_REFERENCES) + // Ensure that references are forcefully type-checked upon construction + #define SOL_SAFE_REFERENCES 1 #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 + // Safe usertypes checks for errors such as + // obj = my_type.new() + // obj.f() -- note the '.' instead of ':' + // usertypes should be safe no matter what + #if !defined(SOL_SAFE_USERTYPE) + #define SOL_SAFE_USERTYPE 1 #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 + #if !defined(SOL_SAFE_FUNCTION_CALLS) + // Function calls from Lua should be automatically safe in debug mode + #define SOL_SAFE_FUNCTION_CALLS 1 #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 + // Print any exceptions / errors that occur + // in debug mode to the default error stream / console + #if !defined(SOL_PRINT_ERRORS) + #define SOL_PRINT_ERRORS 1 #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 +#endif // DEBUG: Turn on all debug safety features for VC++ / g++ / clang++ and similar -#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 +#if !defined(SOL_PRINT_ERRORS) +#define SOL_PRINT_ERRORS 0 #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 +#if !defined(SOL_DEFAULT_PASS_ON_ERROR) +#define SOL_DEFAULT_PASS_ON_ERROR 0 #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 +#if !defined(SOL_ENABLE_INTEROP) +#define SOL_ENABLE_INTEROP 0 #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 +#if defined(__MAC_OS_X_VERSION_MAX_ALLOWED) || defined(__OBJC__) || defined(nil) +#if !defined(SOL_NO_NIL) +#define SOL_NO_NIL 1 #endif +#endif // avoiding nil defines / keywords -#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_USE_BOOST) && SOL_USE_BOOST +#ifndef SOL_UNORDERED_MAP_COMPATIBLE_HASH +#define SOL_UNORDERED_MAP_COMPATIBLE_HASH 1 +#endif // SOL_UNORDERED_MAP_COMPATIBLE_HASH +#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 +#ifndef SOL_STACK_STRING_OPTIMIZATION_SIZE +#define SOL_STACK_STRING_OPTIMIZATION_SIZE 1024 +#endif // Optimized conversion routines using a KB or so off the stack -#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 +// end of sol/config.hpp -#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 +// beginning of sol/config_setup.hpp -#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 +// end of sol/config_setup.hpp -#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 +// end of sol/feature_test.hpp -#if SOL_IS_ON(SOL_USE_BOOST) - #include +namespace sol { - #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 + template + class basic_reference; + using reference = basic_reference; + using main_reference = basic_reference; + class stack_reference; -#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 + struct proxy_base_tag; + template + struct proxy_base; + template + struct proxy; -#if defined(SOL_C_ASSERT) - #define SOL_USER_C_ASSERT_I_ SOL_ON + template + class usertype; + template + class simple_usertype; + 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; + typedef table_core table; + typedef table_core global_table; + typedef main_table_core main_table; + typedef main_table_core main_global_table; + typedef stack_table_core stack_table; + typedef stack_table_core stack_global_table; + 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 defined(SOL_SAFE_FUNCTION) && SOL_SAFE_FUNCTION + using function = protected_function; + using main_function = main_protected_function; + using stack_function = stack_protected_function; #else - #define SOL_USER_C_ASSERT_I_ SOL_DEFAULT_OFF + using function = unsafe_function; + using main_function = main_unsafe_function; + using stack_function = stack_unsafe_function; #endif + using stack_aligned_function = stack_aligned_unsafe_function; + using stack_aligned_stack_handler_function = basic_protected_function; -#if defined(SOL_M_ASSERT) - #define SOL_USER_M_ASSERT_I_ SOL_ON + struct unsafe_function_result; + struct protected_function_result; + using safe_function_result = protected_function_result; +#if defined(SOL_SAFE_FUNCTION) && SOL_SAFE_FUNCTION + using function_result = safe_function_result; #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." + using function_result = unsafe_function_result; #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; + template + class basic_object; + template + class basic_userdata; + template + class basic_lightuserdata; + template + class basic_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; @@ -1256,9 +371,6 @@ namespace sol { struct this_main_state; struct this_environment; - class state_view; - class state; - template struct as_table_t; template @@ -1273,101 +385,98 @@ namespace sol { struct as_args_t; template struct protect_t; - template - struct policy_wrapper; + template + struct filter_wrapper; template struct usertype_traits; template struct unique_usertype_traits; +} // namespace sol - template - struct types { - typedef std::make_index_sequence indices; - static constexpr std::size_t size() { - return sizeof...(Args); - } - }; +// end of sol/forward.hpp - template - struct derive : std::false_type { - typedef types<> type; - }; +// beginning of sol/state.hpp - template - struct base : std::false_type { - typedef types<> type; - }; +// beginning of sol/state_view.hpp - template - struct weak_derive { - static bool value; - }; +// beginning of sol/error.hpp - template - bool weak_derive::value = false; +#include +#include - namespace stack { - struct record; - } +namespace sol { + namespace detail { + struct direct_error_tag {}; + const auto direct_error = direct_error_tag{}; + } // namespace detail -#if SOL_IS_OFF(SOL_USE_BOOST) - template - class optional; + class error : public std::runtime_error { + private: + // Because VC++ is upsetting, most of the time! + std::string w; - template - class optional; -#endif + public: + error(const std::string& str) + : error(detail::direct_error, "lua: error: " + str) { + } + error(std::string&& str) + : error(detail::direct_error, "lua: error: " + std::move(str)) { + } + error(detail::direct_error_tag, const std::string& str) + : std::runtime_error(""), w(str) { + } + error(detail::direct_error_tag, std::string&& str) + : std::runtime_error(""), w(std::move(str)) { + } + + error(const error& e) = default; + error(error&& e) = default; + error& operator=(const error& e) = default; + error& operator=(error&& e) = default; - using check_handler_type = int(lua_State*, int, type, type, const char*); + virtual const char* what() const noexcept override { + return w.c_str(); + } + }; } // 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 +// end of sol/error.hpp -// beginning of sol/forward_detail.hpp +// beginning of sol/table.hpp -#ifndef SOL_FORWARD_DETAIL_HPP -#define SOL_FORWARD_DETAIL_HPP +// beginning of sol/table_core.hpp + +// beginning of sol/proxy.hpp // beginning of sol/traits.hpp // beginning of sol/tuple.hpp -// beginning of sol/base_traits.hpp - -#include +#include +#include namespace sol { namespace detail { - struct unchecked_t { }; - const unchecked_t unchecked = unchecked_t {}; + using swallow = std::initializer_list; } // namespace detail + template + struct types { + typedef std::make_index_sequence indices; + static constexpr std::size_t size() { + return sizeof...(Args); + } + }; namespace meta { - using sfinae_yes_t = std::true_type; - using sfinae_no_t = std::false_type; + namespace detail { + template + struct tuple_types_ { typedef types type; }; - template - using void_t = void; + template + struct tuple_types_> { typedef types type; }; + } // namespace detail template using unqualified = std::remove_cv>; @@ -1375,133 +484,29 @@ namespace sol { template using unqualified_t = typename unqualified::type; - namespace meta_detail { - template - struct unqualified_non_alias : unqualified { }; - - template