mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 11:42:45 +00:00 
			
		
		
		
	AK+Everywhere: Do not implicitly copy variables in TRY macros
For example, consider cases where we want to propagate errors only in
specific instances:
    auto result = read_data(); // something like ErrorOr<ByteBuffer>
    if (result.is_error() && result.error().code() != EINTR)
        continue;
    auto bytes = TRY(result);
The TRY invocation will currently copy the byte buffer when the
expression (in this case, just a local variable) is stored into
_temporary_result.
This patch binds the expression to a reference to prevent such copies.
In less trival invocations (such as TRY(some_function()), this will
incur only temporary lifetime extensions, i.e. no functional change.
			
			
This commit is contained in:
		
							parent
							
								
									4a916cd379
								
							
						
					
					
						commit
						604d5f5bca
					
				
					 11 changed files with 15 additions and 15 deletions
				
			
		|  | @ -44,7 +44,7 @@ namespace Web::Fetch::Fetching { | |||
| 
 | ||||
| #define TRY_OR_IGNORE(expression)                                                                    \ | ||||
|     ({                                                                                               \ | ||||
|         auto _temporary_result = (expression);                                                       \ | ||||
|         auto&& _temporary_result = (expression);                                                     \ | ||||
|         if (_temporary_result.is_error())                                                            \ | ||||
|             return;                                                                                  \ | ||||
|         static_assert(!::AK::Detail::IsLvalueReference<decltype(_temporary_result.release_value())>, \ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy Flynn
						Timothy Flynn