aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/_pch.h1
-rw-r--r--src/debug.h4
-rw-r--r--src/keeper.cpp2
-rw-r--r--src/linda.cpp35
-rw-r--r--src/platform.h6
-rw-r--r--src/threading.cpp13
6 files changed, 37 insertions, 24 deletions
diff --git a/src/_pch.h b/src/_pch.h
index 29a8108..21d862e 100644
--- a/src/_pch.h
+++ b/src/_pch.h
@@ -23,6 +23,7 @@
23#include <thread> 23#include <thread>
24#include <tuple> 24#include <tuple>
25#include <type_traits> 25#include <type_traits>
26#include <utility>
26#include <variant> 27#include <variant>
27 28
28#ifdef __cplusplus 29#ifdef __cplusplus
diff --git a/src/debug.h b/src/debug.h
index e199c3e..e96632d 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -113,8 +113,8 @@ class StackChecker
113 113
114#else // HAVE_LUA_ASSERT() 114#else // HAVE_LUA_ASSERT()
115 115
116#define LUA_ASSERT(L_, c) nullptr // nothing 116#define LUA_ASSERT(L_, c) ((void) 0) // nothing
117#define LUA_ASSERT_CODE(code_) nullptr 117#define LUA_ASSERT_CODE(code_) ((void) 0)
118 118
119#define STACK_CHECK_START_REL(L_, offset_) 119#define STACK_CHECK_START_REL(L_, offset_)
120#define STACK_CHECK_START_ABS(L_, offset_) 120#define STACK_CHECK_START_ABS(L_, offset_)
diff --git a/src/keeper.cpp b/src/keeper.cpp
index cfeebbb..e2df380 100644
--- a/src/keeper.cpp
+++ b/src/keeper.cpp
@@ -721,7 +721,7 @@ void Keeper::operator delete[](void* p_, Universe* U_)
721int Keeper::PushLindaStorage(Linda& linda_, DestState const L_) 721int Keeper::PushLindaStorage(Linda& linda_, DestState const L_)
722{ 722{
723 Keeper* const _keeper{ linda_.whichKeeper() }; 723 Keeper* const _keeper{ linda_.whichKeeper() };
724 KeeperState const _K{ _keeper ? _keeper->K : nullptr }; 724 KeeperState const _K{ _keeper ? _keeper->K : KeeperState{ nullptr } };
725 if (_K == nullptr) { 725 if (_K == nullptr) {
726 return 0; 726 return 0;
727 } 727 }
diff --git a/src/linda.cpp b/src/linda.cpp
index 43fcd20..eb39c0f 100644
--- a/src/linda.cpp
+++ b/src/linda.cpp
@@ -48,7 +48,8 @@ namespace {
48 { 48 {
49 STACK_CHECK_START_REL(L_, 0); 49 STACK_CHECK_START_REL(L_, 0);
50 for (int const _i : std::ranges::iota_view{ start_, end_ + 1 }) { 50 for (int const _i : std::ranges::iota_view{ start_, end_ + 1 }) {
51 switch (LuaType const _t{ luaG_type(L_, _i) }) { 51 LuaType const _t{ luaG_type(L_, _i) };
52 switch (_t) {
52 case LuaType::BOOLEAN: 53 case LuaType::BOOLEAN:
53 case LuaType::NUMBER: 54 case LuaType::NUMBER:
54 case LuaType::STRING: 55 case LuaType::STRING:
@@ -81,6 +82,19 @@ namespace {
81 82
82 // ############################################################################################# 83 // #############################################################################################
83 84
85 template <bool OPT>
86 [[nodiscard]] static inline Linda* ToLinda(lua_State* const L_, int const idx_)
87 {
88 Linda* const _linda{ static_cast<Linda*>(LindaFactory::Instance.toDeep(L_, idx_)) };
89 if constexpr (!OPT) {
90 luaL_argcheck(L_, _linda != nullptr, idx_, "expecting a linda object"); // doesn't return if linda is nullptr
91 LUA_ASSERT(L_, _linda->U == Universe::Get(L_));
92 }
93 return _linda;
94 }
95
96 // #############################################################################################
97
84 /* 98 /*
85 * string = linda:__tostring( linda_ud) 99 * string = linda:__tostring( linda_ud)
86 * 100 *
@@ -109,19 +123,6 @@ namespace {
109 } 123 }
110 124
111 // ############################################################################################# 125 // #############################################################################################
112
113 template <bool OPT>
114 [[nodiscard]] static inline Linda* ToLinda(lua_State* const L_, int const idx_)
115 {
116 Linda* const _linda{ static_cast<Linda*>(LindaFactory::Instance.toDeep(L_, idx_)) };
117 if constexpr (!OPT) {
118 luaL_argcheck(L_, _linda != nullptr, idx_, "expecting a linda object"); // doesn't return if linda is nullptr
119 LUA_ASSERT(L_, _linda->U == Universe::Get(L_));
120 }
121 return _linda;
122 }
123
124 // #############################################################################################
125 // ############################################################################################# 126 // #############################################################################################
126} // namespace 127} // namespace
127// ################################################################################################# 128// #################################################################################################
@@ -195,7 +196,7 @@ int Linda::ProtectedCall(lua_State* const L_, lua_CFunction const f_)
195 196
196 // acquire the keeper 197 // acquire the keeper
197 Keeper* const _keeper{ _linda->acquireKeeper() }; 198 Keeper* const _keeper{ _linda->acquireKeeper() };
198 KeeperState const _K{ _keeper ? _keeper->K : nullptr }; 199 KeeperState const _K{ _keeper ? _keeper->K : KeeperState{ nullptr } };
199 if (_K == nullptr) 200 if (_K == nullptr)
200 return 0; 201 return 0;
201 202
@@ -574,7 +575,7 @@ LUAG_FUNC(linda_receive)
574 575
575 Lane* const _lane{ kLanePointerRegKey.readLightUserDataValue<Lane>(L_) }; 576 Lane* const _lane{ kLanePointerRegKey.readLightUserDataValue<Lane>(L_) };
576 Keeper* const _keeper{ _linda->whichKeeper() }; 577 Keeper* const _keeper{ _linda->whichKeeper() };
577 KeeperState const _K{ _keeper ? _keeper->K : nullptr }; 578 KeeperState const _K{ _keeper ? _keeper->K : KeeperState{ nullptr } };
578 if (_K == nullptr) 579 if (_K == nullptr)
579 return 0; 580 return 0;
580 581
@@ -713,7 +714,7 @@ LUAG_FUNC(linda_send)
713 { 714 {
714 Lane* const _lane{ kLanePointerRegKey.readLightUserDataValue<Lane>(L_) }; 715 Lane* const _lane{ kLanePointerRegKey.readLightUserDataValue<Lane>(L_) };
715 Keeper* const _keeper{ _linda->whichKeeper() }; 716 Keeper* const _keeper{ _linda->whichKeeper() };
716 KeeperState const _K{ _keeper ? _keeper->K : nullptr }; 717 KeeperState const _K{ _keeper ? _keeper->K : KeeperState{ nullptr } };
717 if (_K == nullptr) 718 if (_K == nullptr)
718 return 0; 719 return 0;
719 720
diff --git a/src/platform.h b/src/platform.h
index 5a740e5..b92f7e0 100644
--- a/src/platform.h
+++ b/src/platform.h
@@ -1,12 +1,14 @@
1#pragma once 1#pragma once
2 2
3#ifdef _WIN32_WCE 3#if (defined _WIN32_WCE)
4#define PLATFORM_POCKETPC 4#define PLATFORM_POCKETPC
5#elif defined(_XBOX) 5#elif defined(_XBOX)
6#define PLATFORM_XBOX 6#define PLATFORM_XBOX
7#elif (defined _WIN32) 7#elif (defined _WIN32)
8#define PLATFORM_WIN32 8#define PLATFORM_WIN32
9#if !defined(NOMINMAX)
9#define NOMINMAX 10#define NOMINMAX
11#endif // NOMINMAX
10#elif (defined __linux__) 12#elif (defined __linux__)
11#define PLATFORM_LINUX 13#define PLATFORM_LINUX
12#elif (defined __APPLE__) && (defined __MACH__) 14#elif (defined __APPLE__) && (defined __MACH__)
@@ -17,6 +19,8 @@
17#define PLATFORM_QNX 19#define PLATFORM_QNX
18#elif (defined __CYGWIN__) 20#elif (defined __CYGWIN__)
19#define PLATFORM_CYGWIN 21#define PLATFORM_CYGWIN
22#elif (defined __MINGW32__) || (defined __MINGW64__)
23#define PLATFORM_MINGW
20#else 24#else
21#error "Unknown platform!" 25#error "Unknown platform!"
22#endif 26#endif
diff --git a/src/threading.cpp b/src/threading.cpp
index af2142b..8ef41f5 100644
--- a/src/threading.cpp
+++ b/src/threading.cpp
@@ -134,7 +134,9 @@ void THREAD_SET_PRIORITY(int prio_, [[maybe_unused]] bool sudo_)
134void THREAD_SET_PRIORITY(std::thread& thread_, int prio_, [[maybe_unused]] bool sudo_) 134void THREAD_SET_PRIORITY(std::thread& thread_, int prio_, [[maybe_unused]] bool sudo_)
135{ 135{
136 // prio range [-3,+3] was checked by the caller 136 // prio range [-3,+3] was checked by the caller
137 if (!SetThreadPriority(thread_.native_handle(), gs_prio_remap[prio_ + 3])) { 137 // for some reason when building for mingw, native_handle() is an unsigned long long, but HANDLE is a void*
138 // -> need a strong cast to make g++ happy
139 if (!SetThreadPriority((HANDLE)thread_.native_handle(), gs_prio_remap[prio_ + 3])) {
138 FAIL("THREAD_SET_PRIORITY", GetLastError()); 140 FAIL("THREAD_SET_PRIORITY", GetLastError());
139 } 141 }
140} 142}
@@ -194,7 +196,7 @@ void THREAD_SETNAME(std::string_view const& name_)
194#include <errno.h> 196#include <errno.h>
195#include <sched.h> 197#include <sched.h>
196 198
197#if (defined(__MINGW32__) || defined(__MINGW64__)) && defined pthread_attr_setschedpolicy 199#if (defined PLATFORM_MINGW) && defined pthread_attr_setschedpolicy
198#if pthread_attr_setschedpolicy(A, S) == ENOTSUP 200#if pthread_attr_setschedpolicy(A, S) == ENOTSUP
199// from the mingw-w64 team: 201// from the mingw-w64 team:
200// Well, we support pthread_setschedparam by which you can specify 202// Well, we support pthread_setschedparam by which you can specify
@@ -327,10 +329,15 @@ static int const gs_prio_remap[] = {
327#define _PRIO_0 15 329#define _PRIO_0 15
328#define _PRIO_LO 1 330#define _PRIO_LO 1
329 331
330#elif defined(PLATFORM_CYGWIN) 332#elif defined(PLATFORM_CYGWIN) || defined(PLATFORM_MINGW)
331// 333//
332// TBD: Find right values for Cygwin 334// TBD: Find right values for Cygwin
333// 335//
336#define _PRIO_MODE SCHED_OTHER
337#define _PRIO_SCOPE PTHREAD_SCOPE_PROCESS
338#define _PRIO_HI 31
339#define _PRIO_0 15
340#define _PRIO_LO 1
334#else 341#else
335#error "Unknown OS: not implemented!" 342#error "Unknown OS: not implemented!"
336#endif 343#endif