Squashed 'deps/nostalgia/' changes from 791b7746..a3d6a58c
a3d6a58c [nostalgia/core/studio] Fix library cpp file ownership e598e7fe [nostalgia,keel] Add ability to types Obj to Obj ba9e720f [ox/model] Fix ModelTypeName_v to use requireModelTypeName 8e816a26 [nostalgia/core/studio] Cleanup, fix possible TileSheet fill tool failure 5b9929ab [keel] Add detail to preload logging ceb54b3f [nostalgia/core/opengl] Cleanup 87644447 [nostalgia/core] Add clearCbb functions ce9a0b1f [nostalgia/core/opengl] Cleanup memcpys f7a468ea [ox/std] Add spancpy 861d177a [studio] Cleanup 3936756b [nostalgia/developer-handbook] Update error handling to reflect the enablement of exceptions for GBA build 3e78ec3f [studio] Cleanup 3c3d53b4 [studio] Ensure Editor tabs do first draw immediately, fix shift key being missed with tab shortcuts 151d7c57 [nostalgia/core/gba] Fix partial tilesheet loading overrun 4e4d8d2c [nostalgia/core/gba] Make panic use standard abort call 03d1fd28 [ox/std] Add and integrate standard abort call 6701decc [gbabuildcore] Enable exceptions 6cff5266 [teagba] Add symbols needed for enabling exceptions dd50bd02 [studio] Remap toggle explorer keyboard shortcut, add Ctrl+1-0 mappings for jumping between tabs 55a16602 [nostalgia/core] Fix TileSheet validation/repair to ensure pixels gets cleared if there are subsheets ed365dfe [studio] Fix new project menu to return an appropriately sized string for name 23a09e4a [nostalgia/core/studio] Fix SubSheet editor to return an appropriately sized string b69e7ebb [nostalgia/core/studio/tilesheeteditor] Fix select all not to go beyond end 418d6e3f [nostalgia/core/studio] Fix crash that occurs when a non-leaf node subsheet is selected c44d8678 [nostalgia/core/studio] Fix tile insert to correct input when inserting past the last tile eb4cd710 [nostalgia/core/studio] Fix tile insert to work on last tile d259770f Merge commit '4ea4a61d542777a270c4e2c283e0e986fc9eec9c' 80bad608 [keel] Fix reloadAsset 2bce9a2b [ox/std] Add non-const SmallMap::pairs git-subtree-dir: deps/nostalgia git-subtree-split: a3d6a58cc898f88434e8901aacb579c819fac3e6
This commit is contained in:
6
deps/ox/src/ox/model/typenamecatcher.hpp
vendored
6
deps/ox/src/ox/model/typenamecatcher.hpp
vendored
@ -140,16 +140,16 @@ constexpr Str getModelTypeName() noexcept {
|
||||
return out;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
template<typename T, typename Str = const char*>
|
||||
[[nodiscard]]
|
||||
consteval auto requireModelTypeName() noexcept {
|
||||
constexpr auto name = getModelTypeName<T>();
|
||||
constexpr auto name = getModelTypeName<T, Str>();
|
||||
static_assert(ox::StringView{name}.len(), "Type lacks required TypeName");
|
||||
return name;
|
||||
}
|
||||
|
||||
template<typename T, typename Str = const char*>
|
||||
constexpr auto ModelTypeName_v = getModelTypeName<T, Str>();
|
||||
constexpr auto ModelTypeName_v = requireModelTypeName<T, Str>();
|
||||
|
||||
template<typename T, typename Str = const char*>
|
||||
constexpr auto ModelTypeVersion_v = requireModelTypeVersion<T>();
|
||||
|
27
deps/ox/src/ox/std/assert.cpp
vendored
27
deps/ox/src/ox/std/assert.cpp
vendored
@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include "fmt.hpp"
|
||||
#include "realstd.hpp"
|
||||
#include "stacktrace.hpp"
|
||||
#include "trace.hpp"
|
||||
|
||||
@ -14,7 +15,7 @@
|
||||
|
||||
namespace ox {
|
||||
|
||||
void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err) noexcept {
|
||||
void panic(StringViewCR file, int const line, StringViewCR panicMsg, Error const&err) noexcept {
|
||||
oxErrf("\033[31;1;1mPANIC:\033[0m [{}:{}]: {}\n", file, line, panicMsg);
|
||||
if (err.msg) {
|
||||
oxErrf("\tError Message:\t{}\n", err.msg);
|
||||
@ -32,16 +33,19 @@ void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err)
|
||||
#endif
|
||||
}
|
||||
|
||||
void panic(const char *file, int line, const char *panicMsg, const Error &err) noexcept {
|
||||
void panic(const char *file, int const line, char const*panicMsg, Error const&err) noexcept {
|
||||
panic(StringView{file}, line, StringView{panicMsg}, err);
|
||||
}
|
||||
|
||||
void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept {
|
||||
void assertFailFuncRuntime(
|
||||
StringViewCR file,
|
||||
int const line,
|
||||
StringViewCR assertTxt,
|
||||
StringViewCR msg) noexcept {
|
||||
#ifdef OX_USE_STDLIB
|
||||
auto output = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
|
||||
output += genStackTrace(2);
|
||||
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
|
||||
std::abort();
|
||||
auto const st = genStackTrace(2);
|
||||
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]:\n{}", msg, assertTxt, file, line, st);
|
||||
abort();
|
||||
#else
|
||||
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
|
||||
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
|
||||
@ -49,7 +53,12 @@ void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt,
|
||||
#endif
|
||||
}
|
||||
|
||||
void assertFailFuncRuntime(StringViewCR file, int line, [[maybe_unused]] const Error &err, StringViewCR, StringViewCR assertMsg) noexcept {
|
||||
void assertFailFuncRuntime(
|
||||
StringViewCR file,
|
||||
int const line,
|
||||
[[maybe_unused]] Error const&err,
|
||||
StringViewCR,
|
||||
StringViewCR assertMsg) noexcept {
|
||||
#if defined(OX_USE_STDLIB)
|
||||
auto msg = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, assertMsg);
|
||||
if (err.msg) {
|
||||
@ -62,7 +71,7 @@ void assertFailFuncRuntime(StringViewCR file, int line, [[maybe_unused]] const E
|
||||
msg += genStackTrace(2);
|
||||
oxErr(msg);
|
||||
oxTracef("assert", "Failed assert: {} [{}:{}]", assertMsg, file, line);
|
||||
std::abort();
|
||||
abort();
|
||||
#else
|
||||
constexprPanic(file, line, assertMsg);
|
||||
#endif
|
||||
|
43
deps/ox/src/ox/std/assert.hpp
vendored
43
deps/ox/src/ox/std/assert.hpp
vendored
@ -22,9 +22,15 @@
|
||||
|
||||
namespace ox {
|
||||
|
||||
void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept;
|
||||
[[noreturn]]
|
||||
void panic(StringViewCR file, int line, StringViewCR panicMsg, Error const&err = {}) noexcept;
|
||||
|
||||
constexpr void constexprPanic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept {
|
||||
[[noreturn]]
|
||||
constexpr void constexprPanic(
|
||||
StringViewCR file,
|
||||
int const line,
|
||||
StringViewCR panicMsg,
|
||||
Error const&err = {}) noexcept {
|
||||
if (!std::is_constant_evaluated()) {
|
||||
panic(file, line, panicMsg, err);
|
||||
} else {
|
||||
@ -32,10 +38,24 @@ constexpr void constexprPanic(StringViewCR file, int line, StringViewCR panicMsg
|
||||
}
|
||||
}
|
||||
|
||||
void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept;
|
||||
void assertFailFuncRuntime(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept;
|
||||
void assertFailFuncRuntime(
|
||||
StringViewCR file,
|
||||
int line,
|
||||
StringViewCR assertTxt,
|
||||
StringViewCR msg) noexcept;
|
||||
void assertFailFuncRuntime(
|
||||
StringViewCR file,
|
||||
int line,
|
||||
Error const&err,
|
||||
StringViewCR,
|
||||
StringViewCR assertMsg) noexcept;
|
||||
|
||||
constexpr void assertFunc(StringViewCR file, int line, bool pass, [[maybe_unused]]StringViewCR assertTxt, [[maybe_unused]]StringViewCR msg) noexcept {
|
||||
constexpr void assertFunc(
|
||||
StringViewCR file,
|
||||
int const line,
|
||||
bool const pass,
|
||||
[[maybe_unused]]StringViewCR assertTxt,
|
||||
[[maybe_unused]]StringViewCR msg) noexcept {
|
||||
if (!pass) {
|
||||
if (!std::is_constant_evaluated()) {
|
||||
assertFailFuncRuntime(file, line, assertTxt, msg);
|
||||
@ -45,7 +65,12 @@ constexpr void assertFunc(StringViewCR file, int line, bool pass, [[maybe_unused
|
||||
}
|
||||
}
|
||||
|
||||
constexpr void assertFunc(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept {
|
||||
constexpr void assertFunc(
|
||||
StringViewCR file,
|
||||
int const line,
|
||||
Error const&err,
|
||||
StringViewCR,
|
||||
StringViewCR assertMsg) noexcept {
|
||||
if (err) {
|
||||
if (!std::is_constant_evaluated()) {
|
||||
assertFailFuncRuntime(file, line, err, {}, assertMsg);
|
||||
@ -55,7 +80,11 @@ constexpr void assertFunc(StringViewCR file, int line, const Error &err, StringV
|
||||
}
|
||||
}
|
||||
|
||||
constexpr void expect(StringViewCR file, int line, const auto &actual, const auto &expected) noexcept {
|
||||
constexpr void expect(
|
||||
StringViewCR file,
|
||||
int const line,
|
||||
auto const&actual,
|
||||
auto const&expected) noexcept {
|
||||
if (actual != expected) {
|
||||
if (!std::is_constant_evaluated()) {
|
||||
#if defined(OX_USE_STDLIB)
|
||||
|
7
deps/ox/src/ox/std/error.hpp
vendored
7
deps/ox/src/ox/std/error.hpp
vendored
@ -80,13 +80,13 @@ struct Exception: public std::exception {
|
||||
ox::CString msg = nullptr;
|
||||
ErrorCode errCode = 0;
|
||||
|
||||
explicit inline Exception(
|
||||
explicit Exception(
|
||||
ErrorCode const errCode,
|
||||
std::source_location const&src = std::source_location::current()) noexcept:
|
||||
src{src},
|
||||
errCode{errCode} {}
|
||||
|
||||
explicit inline Exception(
|
||||
explicit Exception(
|
||||
ErrorCode const errCode,
|
||||
ox::CString msg,
|
||||
std::source_location const&src = std::source_location::current()) noexcept:
|
||||
@ -94,7 +94,7 @@ struct Exception: public std::exception {
|
||||
msg{msg},
|
||||
errCode{errCode} {}
|
||||
|
||||
explicit inline Exception(Error const&err) noexcept:
|
||||
explicit Exception(Error const&err) noexcept:
|
||||
src{err.src},
|
||||
msg{err.msg ? err.msg : ""},
|
||||
errCode{err.errCode} {}
|
||||
@ -109,6 +109,7 @@ struct Exception: public std::exception {
|
||||
}
|
||||
};
|
||||
|
||||
[[noreturn]]
|
||||
void panic(char const*file, int line, char const*panicMsg, Error const&err) noexcept;
|
||||
|
||||
template<typename T>
|
||||
|
9
deps/ox/src/ox/std/realstd.hpp
vendored
9
deps/ox/src/ox/std/realstd.hpp
vendored
@ -12,4 +12,13 @@
|
||||
#include <cassert>
|
||||
#else
|
||||
#define assert(e) while (!(e));
|
||||
#endif
|
||||
|
||||
#if __has_include(<cstdlib>)
|
||||
#include <cstdlib>
|
||||
#else
|
||||
extern "C" {
|
||||
[[noreturn]]
|
||||
void abort();
|
||||
}
|
||||
#endif
|
5
deps/ox/src/ox/std/smallmap.hpp
vendored
5
deps/ox/src/ox/std/smallmap.hpp
vendored
@ -85,6 +85,11 @@ class SmallMap {
|
||||
return m_pairs;
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
constexpr ox::Span<Pair> pairs() noexcept {
|
||||
return m_pairs;
|
||||
}
|
||||
|
||||
constexpr void clear();
|
||||
|
||||
private:
|
||||
|
20
deps/ox/src/ox/std/span.hpp
vendored
20
deps/ox/src/ox/std/span.hpp
vendored
@ -14,7 +14,7 @@
|
||||
#include "iterator.hpp"
|
||||
#include "vector.hpp"
|
||||
|
||||
OX_CLANG_NOWARN_BEGIN(-Wunsafe-buffer-usage)
|
||||
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
|
||||
|
||||
namespace ox {
|
||||
|
||||
@ -133,7 +133,7 @@ class Span {
|
||||
return m_items[i];
|
||||
}
|
||||
|
||||
constexpr const T &operator[](std::size_t i) const noexcept {
|
||||
constexpr T const&operator[](std::size_t i) const noexcept {
|
||||
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Span access overflow");
|
||||
return m_items[i];
|
||||
}
|
||||
@ -168,8 +168,20 @@ class Span {
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
using SpanView = Span<const T>;
|
||||
using SpanView = Span<T const>;
|
||||
|
||||
template<typename T>
|
||||
constexpr void spancpy(ox::Span<T> const dst, ox::SpanView<T> const src) noexcept {
|
||||
auto const sz = ox::min(dst.size(), src.size());
|
||||
if (std::is_constant_evaluated() || std::is_trivially_copyable_v<T>) {
|
||||
for (size_t i{}; i < sz; ++i) {
|
||||
dst.data()[i] = src.data()[i];
|
||||
}
|
||||
} else {
|
||||
memcpy(dst.data(), src.data(), sz * sizeof(T));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
OX_CLANG_NOWARN_END
|
||||
OX_ALLOW_UNSAFE_BUFFERS_END
|
||||
|
10
deps/ox/src/ox/std/typetraits.hpp
vendored
10
deps/ox/src/ox/std/typetraits.hpp
vendored
@ -19,12 +19,15 @@
|
||||
namespace std {
|
||||
|
||||
template<typename T>
|
||||
constexpr bool is_union_v = __is_union(T);
|
||||
inline constexpr bool is_union_v = __is_union(T);
|
||||
|
||||
constexpr bool is_constant_evaluated() noexcept {
|
||||
inline constexpr bool is_constant_evaluated() noexcept {
|
||||
return __builtin_is_constant_evaluated();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(T);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -156,6 +159,9 @@ static_assert(is_class<int>::value == false);
|
||||
template<typename T>
|
||||
constexpr bool is_class_v = is_class<T>();
|
||||
|
||||
template<typename T>
|
||||
inline constexpr bool is_trivially_copyable_v = std::is_trivially_copyable_v<T>;
|
||||
|
||||
template<typename T>
|
||||
constexpr bool is_signed_v = integral_constant<bool, T(-1) < T(0)>::value;
|
||||
|
||||
|
Reference in New Issue
Block a user