mirror of
				https://gitlab.winehq.org/wine/vkd3d.git
				synced 2025-09-12 18:50:22 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			320 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| [preproc]
 | |
| #define KEY pass
 | |
| KEY
 | |
| 
 | |
| [preproc]
 | |
| #define KEY fail
 | |
| pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) a
 | |
| KEY(pass, fail)
 | |
| 
 | |
| [preproc]
 | |
| /* Make sure argument expansion replaces the right tokens. */
 | |
| #define KEY(pass, fail) fail
 | |
| KEY(fail, pass)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY (pass)
 | |
| KEY(a,b)
 | |
| 
 | |
| [preproc]
 | |
| #define FUNC(a) pass
 | |
| #define LEFT FUNC(
 | |
| LEFT fail)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) a
 | |
| KEY(
 | |
| pass
 | |
| ,
 | |
| fail
 | |
| )
 | |
| 
 | |
| [preproc]
 | |
| /* Function-like macros which cannot be expanded (due to argument count mismatch
 | |
|  * or other parse errors) emit only the macro name and nothing else. In the case
 | |
|  * of unterminated macro lists, nothing after the macro name is emitted. */
 | |
| #define pass(a, b) a b fail
 | |
| pass(fail, fail
 | |
| fail
 | |
| 
 | |
| [preproc]
 | |
| #define pass(a, b) fail
 | |
| pass(fail, fail, fail)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) fail
 | |
| KEY(fail, fail, fail)
 | |
| pass
 | |
| 
 | |
| [preproc]
 | |
| #define pass(a, b) fail
 | |
| pass
 | |
| (a, b)
 | |
| 
 | |
| [preproc]
 | |
| #define FUNC(a) pass
 | |
| #define KEY FUNC
 | |
| KEY (fail)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) a ## b
 | |
| KEY  (  pa  ,  ss  )
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) pa ## ss
 | |
| KEY(fail, fail)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a) a ## ss
 | |
| KEY(pa)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a) pa ## a
 | |
| KEY(ss)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(x) p \
 | |
|  ## \
 | |
|  x \
 | |
|  ## \
 | |
|  ss
 | |
| KEY(
 | |
| a
 | |
| )
 | |
| 
 | |
| [preproc]
 | |
| /* Concatenation is only parsed if the macro has arguments. */
 | |
| #define KEY fa ## il
 | |
| KEY pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a) a
 | |
| KEY(pa ## ss)
 | |
| 
 | |
| [preproc]
 | |
| fa ## il
 | |
| pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY1 KEY2
 | |
| #define KEY2 pass
 | |
| KEY1
 | |
| 
 | |
| [preproc]
 | |
| #define KEY2 pass
 | |
| #define KEY1 KEY2
 | |
| KEY1
 | |
| 
 | |
| [preproc]
 | |
| #define KEY fail
 | |
| #undef KEY
 | |
| KEY pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a,b) fail
 | |
| #undef KEY
 | |
| KEY(pass, pass)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY1 KEY2
 | |
| #define KEY2 fail
 | |
| #undef KEY2
 | |
| KEY1 pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY2 fail
 | |
| #define KEY1 KEY2
 | |
| #undef KEY2
 | |
| KEY1 pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY1(a, b) a
 | |
| #define KEY2 pass
 | |
| #define KEY3 fail
 | |
| KEY1(KEY2, KEY3)
 | |
| 
 | |
| [preproc]
 | |
| #define a b
 | |
| #define KEY(a) b
 | |
| KEY(fail)
 | |
| pass
 | |
| 
 | |
| [preproc]
 | |
| #define a b
 | |
| #define KEY(a) a
 | |
| KEY(pass)
 | |
| 
 | |
| [preproc]
 | |
| #define OP==
 | |
| #if 2 OP 3
 | |
| fail
 | |
| #elif 2 OP 2
 | |
| pass
 | |
| #endif
 | |
| 
 | |
| [preproc]
 | |
| #define KEY 1
 | |
| #if KEY == 1
 | |
| pass
 | |
| #endif
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) (a < b)
 | |
| #if KEY(2, 1)
 | |
| fail
 | |
| #elif KEY(1, 2)
 | |
| pass
 | |
| #endif
 | |
| 
 | |
| [preproc]
 | |
| #define KEY fail
 | |
| #define KEY pass
 | |
| KEY
 | |
| 
 | |
| [preproc]
 | |
| /* Identifiers are not expanded in the LHS of #define statements. */
 | |
| #define KEY pass
 | |
| #define KEY fail
 | |
| pass
 | |
| 
 | |
| [preproc]
 | |
| #undef KEY
 | |
| pass
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) b
 | |
| KEY("fail,fail",pass)
 | |
| 
 | |
| [preproc]
 | |
| #define \
 | |
| KEY( \
 | |
| a \
 | |
| , \
 | |
| b \
 | |
| ) \
 | |
| a
 | |
| KEY(pass, fail)
 | |
| 
 | |
| [preproc]
 | |
| #define \
 | |
| KEY \
 | |
| pass
 | |
| KEY
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) b
 | |
| KEY(multiline
 | |
| argument,pass)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) b
 | |
| KEY(
 | |
| multiline
 | |
| #define fail pass
 | |
| argument, fail)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) a
 | |
| KEY((pass,pass),(fail,fail))
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) b
 | |
| KEY((,,fail,,fail,,),(,,pass,,pass,,))
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) b
 | |
| KEY([,,fail,,fail,,],[,,pass,,pass,,])
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) b
 | |
| KEY({,,fail,,fail,,},{,,pass,,pass,,})
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) pass
 | |
| KEY((),())
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a, b) pass
 | |
| KEY((,),(,))
 | |
| 
 | |
| [preproc]
 | |
| /* Unbalanced parentheses result in an unterminated macro. */
 | |
| #define pass(a, b) fail
 | |
| pass((),()
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a,a) a
 | |
| KEY(pass,fail)
 | |
| 
 | |
| [preproc]
 | |
| /* Macro arguments suffer their own macro expansion only after the macro has
 | |
|  * been completely parsed. */
 | |
| #define KEY(a) a
 | |
| KEY(fail
 | |
| #define fail pass
 | |
| )
 | |
| 
 | |
| [preproc]
 | |
| /* The same applies to #if. */
 | |
| #define KEY(a) a
 | |
| KEY(
 | |
| #define OBJ
 | |
| #ifdef OBJ
 | |
| pass
 | |
| #endif
 | |
| )
 | |
| 
 | |
| [preproc]
 | |
| #define KEY(a) a
 | |
| KEY(pass
 | |
| #ifdef OBJ
 | |
| fail
 | |
| #endif
 | |
| #define OBJ
 | |
| )
 | |
| 
 | |
| [preproc]
 | |
| /* Directives inside of macro arguments are always evaluated. */
 | |
| #define FUNC(a) value
 | |
| FUNC(fail
 | |
| #define KEY pass
 | |
| )
 | |
| KEY
 | |
| 
 | |
| [preproc]
 | |
| #define FUNC1(a) a ## ss
 | |
| #define FUNC2(a, b) a < b
 | |
| 
 | |
| FUNC1(
 | |
| #if FUNC2(3, 2)
 | |
| fail
 | |
| #elif FUNC2(2, 3)
 | |
| pa
 | |
| #else
 | |
| fail
 | |
| #endif
 | |
| )
 | |
| 
 | |
| [preproc]
 | |
| #define __LINE__ pass
 | |
| __LINE__
 | |
| 
 | |
| [preproc]
 | |
| #define KEY pass
 | |
| apple # KEY
 | |
| 
 | |
| [preproc]
 | |
| #define KEY2(x) x ## ss
 | |
| #define KEY(a) KEY2(a)
 | |
| 
 | |
| KEY(pa)
 | |
| 
 | |
| [preproc]
 | |
| #define KEY2(x) x
 | |
| #define KEY KEY2(fa il)
 | |
| KEY
 | |
| pass
 |