BAN: Add {TRY,MUST}_REF for references
It is annoying that we have to have separate macros for these but I can't find a way to cleanly return lvalue reference from statement expression. Currently we cast the reference to pointer and return unreference the pointer outside of the expression. This feature will probably not be used any time soon, but atleas it is implemented if I need it one day
This commit is contained in:
		
							parent
							
								
									121f4bc1dd
								
							
						
					
					
						commit
						3ca623349a
					
				|  | @ -9,12 +9,15 @@ | |||
| #if defined(__is_kernel) | ||||
| 	#include <kernel/Panic.h> | ||||
| 	#include <kernel/Errors.h> | ||||
| 	#define MUST(expr)	({ auto&& e = expr; if (e.is_error()) Kernel::panic("{}", e.error()); e.release_value(); }) | ||||
| 	#define MUST(expr)		 ({ auto&& e = expr; if (e.is_error()) Kernel::panic("{}", e.error()); e.release_value(); }) | ||||
| 	#define MUST_REF(expr)	*({ auto&& e = expr; if (e.is_error()) Kernel::panic("{}", e.error()); &e.release_value(); }) | ||||
| #else | ||||
| 	#define MUST(expr)	({ auto&& e = expr; assert(!e.is_error()); e.release_value(); }) | ||||
| 	#define MUST(expr)		 ({ auto&& e = expr; assert(!e.is_error()); e.release_value(); }) | ||||
| 	#define MUST_REF(expr)	*({ auto&& e = expr; assert(!e.is_error()); &e.release_value(); }) | ||||
| #endif | ||||
| 
 | ||||
| #define TRY(expr) ({ auto&& e = expr; if (e.is_error()) return e.release_error(); e.release_value(); }) | ||||
| #define TRY(expr)		 ({ auto&& e = expr; if (e.is_error()) return e.release_error(); e.release_value(); }) | ||||
| #define TRY_REF(expr)	*({ auto&& e = expr; if (e.is_error()) return e.release_error(); &e.release_value(); }) | ||||
| 
 | ||||
| namespace BAN | ||||
| { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue