mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	This patch should support things like `define foo(a, b = 3, c) a+b+c `foo(1, ,2) which will evaluate to 1+3+2. It also spots mistakes like `foo(1) (the 3rd argument doesn't have a default value, so a call site is required to set it). Most of the patch is a simple parser for the format in preproc.cc, but I've also taken the opportunity to wrap up the "name -> definition" map in a type, rather than use multiple std::map's. Since this type needs to be visible to code that touches defines, I've pulled it (and the frontend_verilog_preproc declaration) out into a new file at frontends/verilog/preproc.h and included that where necessary. Finally, the patch adds a few tests in tests/various to check that we are parsing everything correctly.
		
			
				
	
	
		
			7 lines
		
	
	
	
		
			307 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			7 lines
		
	
	
	
		
			307 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Check that we don't allow passing too few arguments (and, while we're at it, check that passing "no"
 | |
| # arguments actually passes 1 empty argument).
 | |
| logger -expect error "Cannot expand macro `foo by giving only 1 argument \(argument 2 has no default\)." 1
 | |
| read_verilog <<EOT
 | |
| `define foo(x=1, y)
 | |
| `foo()
 | |
| EOT
 |