mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Handle cases when std::optional does not contain a value
This commit is contained in:
		
							parent
							
								
									d37a2270d6
								
							
						
					
					
						commit
						2306af3600
					
				
					 9 changed files with 15 additions and 7 deletions
				
			
		|  | @ -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); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue