mirror of
https://github.com/citra-emu/citra-canary.git
synced 2024-12-23 13:05:29 +00:00
Handle cases when std::optional does not contain a value
This commit is contained in:
parent
d37a2270d6
commit
2306af3600
|
@ -317,7 +317,7 @@ void ConfigureInput::setPollingResult(const Common::ParamPackage& params, bool a
|
|||
poller->Stop();
|
||||
}
|
||||
|
||||
if (!abort) {
|
||||
if (!abort && input_setter) {
|
||||
(*input_setter)(params);
|
||||
}
|
||||
|
||||
|
|
|
@ -116,6 +116,7 @@ System::ResultStatus System::Load(EmuWindow& emu_window, const std::string& file
|
|||
}
|
||||
}
|
||||
|
||||
ASSERT(system_mode.first);
|
||||
ResultStatus init_result{Init(emu_window, *system_mode.first)};
|
||||
if (init_result != ResultStatus::Success) {
|
||||
LOG_CRITICAL(Core, "Failed to initialize system (Error {})!",
|
||||
|
|
|
@ -147,7 +147,9 @@ ResultCode SharedMemory::Map(Process* target_process, VAddr address, MemoryPermi
|
|||
|
||||
if (base_address == 0 && target_address == 0) {
|
||||
// Calculate the address at which to map the memory block.
|
||||
target_address = *Memory::PhysicalToVirtualAddress(linear_heap_phys_address);
|
||||
auto maybe_vaddr = Memory::PhysicalToVirtualAddress(linear_heap_phys_address);
|
||||
ASSERT(maybe_vaddr);
|
||||
target_address = *maybe_vaddr;
|
||||
}
|
||||
|
||||
// Map the memory block into the target process
|
||||
|
|
|
@ -142,7 +142,6 @@ public:
|
|||
|
||||
private:
|
||||
/// Parameter data to be returned in the next call to Glance/ReceiveParameter.
|
||||
/// TODO(Subv): Use std::optional once we migrate to C++17.
|
||||
std::optional<MessageParameter> next_parameter;
|
||||
|
||||
static constexpr std::size_t NumAppletSlot = 4;
|
||||
|
|
|
@ -205,8 +205,10 @@ void Module::Interface::GetSharedFont(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
// The shared font has to be relocated to the new address before being passed to the
|
||||
// application.
|
||||
VAddr target_address =
|
||||
*Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address);
|
||||
auto maybe_vaddr =
|
||||
Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address);
|
||||
ASSERT(maybe_vaddr);
|
||||
VAddr target_address = *maybe_vaddr;
|
||||
if (!apt->shared_font_relocated) {
|
||||
BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address);
|
||||
apt->shared_font_relocated = true;
|
||||
|
|
|
@ -433,7 +433,9 @@ void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode) {
|
|||
VAddr overlap_start = std::max(start, region_start);
|
||||
VAddr overlap_end = std::min(end, region_end);
|
||||
|
||||
PAddr physical_start = *TryVirtualToPhysicalAddress(overlap_start);
|
||||
auto maybe_paddr = TryVirtualToPhysicalAddress(overlap_start);
|
||||
ASSERT(maybe_paddr);
|
||||
PAddr physical_start = *maybe_paddr;
|
||||
u32 overlap_size = overlap_end - overlap_start;
|
||||
|
||||
auto* rasterizer = VideoCore::g_renderer->Rasterizer();
|
||||
|
|
|
@ -42,7 +42,7 @@ public:
|
|||
std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage& params) override {
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(status->update_mutex);
|
||||
status->touch_calibration.reset();
|
||||
status->touch_calibration.emplace();
|
||||
// These default values work well for DS4 but probably not other touch inputs
|
||||
status->touch_calibration->min_x = params.Get("min_x", 100);
|
||||
status->touch_calibration->min_y = params.Get("min_y", 50);
|
||||
|
|
|
@ -948,6 +948,7 @@ Surface FindMatch(const SurfaceCache& surface_cache, const SurfaceParams& params
|
|||
return std::make_pair(surface->CanSubRect(params), surface->GetInterval());
|
||||
});
|
||||
IsMatch_Helper(std::integral_constant<MatchFlags, MatchFlags::Copy>{}, [&] {
|
||||
ASSERT(validate_interval);
|
||||
auto copy_interval =
|
||||
params.FromInterval(*validate_interval).GetCopyableInterval(surface);
|
||||
bool matched = boost::icl::length(copy_interval & *validate_interval) != 0 &&
|
||||
|
|
|
@ -600,6 +600,7 @@ void JitShader::Compile_BREAKC(Instruction instr) {
|
|||
Compile_Assert(looping, "BREAKC must be inside a LOOP");
|
||||
if (looping) {
|
||||
Compile_EvaluateCondition(instr);
|
||||
ASSERT(loop_break_label);
|
||||
jnz(*loop_break_label);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue