mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Added log_dump() API
This commit is contained in:
		
							parent
							
								
									c904f5e197
								
							
						
					
					
						commit
						2ee3ac4ba3
					
				
					 1 changed files with 54 additions and 0 deletions
				
			
		
							
								
								
									
										54
									
								
								kernel/log.h
									
										
									
									
									
								
							
							
						
						
									
										54
									
								
								kernel/log.h
									
										
									
									
									
								
							|  | @ -93,4 +93,58 @@ struct PerformanceTimer | |||
| #endif | ||||
| }; | ||||
| 
 | ||||
| // simple API for quickly dumping values when debugging
 | ||||
| 
 | ||||
| static inline void log_dump_val_worker(int v) { log("%d", v); } | ||||
| static inline void log_dump_val_worker(size_t v) { log("%zd", v); } | ||||
| static inline void log_dump_val_worker(long int v) { log("%ld", v); } | ||||
| static inline void log_dump_val_worker(long long int v) { log("%lld", v); } | ||||
| static inline void log_dump_val_worker(char c) { log(c >= 32 && c < 127 ? "'%c'" : "'\\x%02x'", c); } | ||||
| static inline void log_dump_val_worker(bool v) { log("%s", v ? "true" : "false"); } | ||||
| static inline void log_dump_val_worker(double v) { log("%f", v); } | ||||
| static inline void log_dump_val_worker(const char *v) { log("%s", v); } | ||||
| static inline void log_dump_val_worker(std::string v) { log("%s", v.c_str()); } | ||||
| static inline void log_dump_val_worker(RTLIL::SigSpec v) { log("%s", log_signal(v)); } | ||||
| static inline void log_dump_args_worker(const char *p) { log_assert(*p == 0); } | ||||
| 
 | ||||
| template <typename T, typename ... Args> | ||||
| void log_dump_args_worker(const char *p, T first, Args ... args) | ||||
| { | ||||
| 	int next_p_state = 0; | ||||
| 	const char *next_p = p; | ||||
| 	while (*next_p && (next_p_state != 0 || *next_p != ',')) { | ||||
| 		if (*next_p == '"') | ||||
| 			do { | ||||
| 				next_p++; | ||||
| 				while (*next_p == '\\' && *(next_p + 1)) | ||||
| 					next_p += 2; | ||||
| 			} while (*next_p && *next_p != '"'); | ||||
| 		if (*next_p == '\'') { | ||||
| 			next_p++; | ||||
| 			if (*next_p == '\\') | ||||
| 				next_p++; | ||||
| 			if (*next_p) | ||||
| 				next_p++; | ||||
| 		} | ||||
| 		if (*next_p == '(' || *next_p == '[' || *next_p == '{') | ||||
| 			next_p_state++; | ||||
| 		if ((*next_p == ')' || *next_p == ']' || *next_p == '}') && next_p_state > 0) | ||||
| 			next_p_state--; | ||||
| 		next_p++; | ||||
| 	} | ||||
| 	log("\n\t%.*s => ", int(next_p - p), p); | ||||
| 	if (*next_p == ',') | ||||
| 		next_p++; | ||||
| 	while (*next_p == ' ' || *next_p == '\t' || *next_p == '\r' || *next_p == '\n') | ||||
| 		next_p++; | ||||
| 	log_dump_val_worker(first); | ||||
| 	log_dump_args_worker(next_p, args ...); | ||||
| } | ||||
| 
 | ||||
| #define log_dump(...) do { \ | ||||
| 	log("DEBUG DUMP IN %s AT %s:%d:", __PRETTY_FUNCTION__, __FILE__, __LINE__); \ | ||||
| 	log_dump_args_worker(#__VA_ARGS__, __VA_ARGS__); \ | ||||
| 	log("\n"); \ | ||||
| } while (0) | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue