Results: Implement namespaced, type-safe results.

Because I was working on multiple things at once, this commit also:
- Adds wrappers for/linker flags to wrap CXX exceptions to make them
  abort. This saves ~0x8000 of memory in every system module.
- Broadly replaces lines of the pattern if (cond) { return ResultX; }
  with R_UNLESS(!cond, ResultX());.
- Reworks the R_TRY_CATCH macros (and the result macros in general).
This commit is contained in:
Michael Scire 2019-10-24 01:40:44 -07:00 committed by SciresM
parent 15773e4755
commit 4059dc6187
169 changed files with 2172 additions and 1868 deletions

View file

@ -49,29 +49,25 @@ namespace sts::ldr::args {
}
Result Set(ncm::TitleId title_id, const void *args, size_t args_size) {
if (args_size >= ArgumentSizeMax) {
return ResultLoaderTooLongArgument;
}
R_UNLESS(args_size < ArgumentSizeMax, ldr::ResultTooLongArgument());
ArgumentInfo *arg_info = FindArgumentInfo(title_id);
if (arg_info == nullptr) {
arg_info = FindFreeArgumentInfo();
}
if (arg_info == nullptr) {
return ResultLoaderTooManyArguments;
}
R_UNLESS(arg_info != nullptr, ldr::ResultTooManyArguments());
arg_info->title_id = title_id;
arg_info->args_size = args_size;
std::memcpy(arg_info->args, args, args_size);
return ResultSuccess;
return ResultSuccess();
}
Result Clear() {
for (size_t i = 0; i < MaxArgumentInfos; i++) {
g_argument_infos[i].title_id = FreeTitleId;
}
return ResultSuccess;
return ResultSuccess();
}
}