Handle cases when std::optional does not contain a value
This commit is contained in:
		| @@ -317,7 +317,7 @@ void ConfigureInput::setPollingResult(const Common::ParamPackage& params, bool a | |||||||
|         poller->Stop(); |         poller->Stop(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!abort) { |     if (!abort && input_setter) { | ||||||
|         (*input_setter)(params); |         (*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)}; |     ResultStatus init_result{Init(emu_window, *system_mode.first)}; | ||||||
|     if (init_result != ResultStatus::Success) { |     if (init_result != ResultStatus::Success) { | ||||||
|         LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", |         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) { |     if (base_address == 0 && target_address == 0) { | ||||||
|         // Calculate the address at which to map the memory block. |         // 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 |     // Map the memory block into the target process | ||||||
|   | |||||||
| @@ -142,7 +142,6 @@ public: | |||||||
|  |  | ||||||
| private: | private: | ||||||
|     /// Parameter data to be returned in the next call to Glance/ReceiveParameter. |     /// 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; |     std::optional<MessageParameter> next_parameter; | ||||||
|  |  | ||||||
|     static constexpr std::size_t NumAppletSlot = 4; |     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 |     // The shared font has to be relocated to the new address before being passed to the | ||||||
|     // application. |     // application. | ||||||
|     VAddr target_address = |     auto maybe_vaddr = | ||||||
|         *Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address); |         Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address); | ||||||
|  |     ASSERT(maybe_vaddr); | ||||||
|  |     VAddr target_address = *maybe_vaddr; | ||||||
|     if (!apt->shared_font_relocated) { |     if (!apt->shared_font_relocated) { | ||||||
|         BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address); |         BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address); | ||||||
|         apt->shared_font_relocated = true; |         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_start = std::max(start, region_start); | ||||||
|         VAddr overlap_end = std::min(end, region_end); |         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; |         u32 overlap_size = overlap_end - overlap_start; | ||||||
|  |  | ||||||
|         auto* rasterizer = VideoCore::g_renderer->Rasterizer(); |         auto* rasterizer = VideoCore::g_renderer->Rasterizer(); | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ public: | |||||||
|     std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage& params) override { |     std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage& params) override { | ||||||
|         { |         { | ||||||
|             std::lock_guard<std::mutex> guard(status->update_mutex); |             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 |             // 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_x = params.Get("min_x", 100); | ||||||
|             status->touch_calibration->min_y = params.Get("min_y", 50); |             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()); |                 return std::make_pair(surface->CanSubRect(params), surface->GetInterval()); | ||||||
|             }); |             }); | ||||||
|             IsMatch_Helper(std::integral_constant<MatchFlags, MatchFlags::Copy>{}, [&] { |             IsMatch_Helper(std::integral_constant<MatchFlags, MatchFlags::Copy>{}, [&] { | ||||||
|  |                 ASSERT(validate_interval); | ||||||
|                 auto copy_interval = |                 auto copy_interval = | ||||||
|                     params.FromInterval(*validate_interval).GetCopyableInterval(surface); |                     params.FromInterval(*validate_interval).GetCopyableInterval(surface); | ||||||
|                 bool matched = boost::icl::length(copy_interval & *validate_interval) != 0 && |                 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"); |     Compile_Assert(looping, "BREAKC must be inside a LOOP"); | ||||||
|     if (looping) { |     if (looping) { | ||||||
|         Compile_EvaluateCondition(instr); |         Compile_EvaluateCondition(instr); | ||||||
|  |         ASSERT(loop_break_label); | ||||||
|         jnz(*loop_break_label); |         jnz(*loop_break_label); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 B3n30
					B3n30