48 lines
		
	
	
		
			819 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			819 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #pragma once
 | |
| /**
 | |
|  * @brief Solana assert and panic utilities
 | |
|  */
 | |
| 
 | |
| #include <sol/types.h>
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Panics
 | |
|  *
 | |
|  * Prints the line number where the panic occurred and then causes
 | |
|  * the BPF VM to immediately halt execution. No accounts' data are updated
 | |
|  */
 | |
| void sol_panic_(const char *, uint64_t, uint64_t, uint64_t);
 | |
| #define sol_panic() sol_panic_(__FILE__, sizeof(__FILE__), __LINE__, 0)
 | |
| 
 | |
| /**
 | |
|  * Asserts
 | |
|  */
 | |
| #define sol_assert(expr)  \
 | |
| if (!(expr)) {          \
 | |
|   sol_panic(); \
 | |
| }
 | |
| 
 | |
| #ifdef SOL_TEST
 | |
| /**
 | |
|  * Stub functions when building tests
 | |
|  */
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| void sol_panic_(const char *file, uint64_t len, uint64_t line, uint64_t column) {
 | |
|   printf("Panic in %s at %d:%d\n", file, line, column);
 | |
|   abort();
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| /**@}*/
 |