mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04:00 
			
		
		
		
	Merge branch 'nasm-2.09.xx'
This commit is contained in:
		| @@ -29,6 +29,10 @@ To force a specific form, use the \c{STRICT} keyword, see \k{strict}. | ||||
|  | ||||
| \b Fix typo in documentation. | ||||
|  | ||||
| \b Compound context local preprocessor single line macro identifiers | ||||
|   were not expanded early enough and as result lead to unresolved | ||||
|   symbols. | ||||
|  | ||||
|  | ||||
| \S{cl-2.09.01} Version 2.09.01 | ||||
|  | ||||
|   | ||||
							
								
								
									
										30
									
								
								preproc.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								preproc.c
									
									
									
									
									
								
							| @@ -3659,6 +3659,7 @@ static bool paste_tokens(Token **head, bool handle_paste_tokens) | ||||
|             } | ||||
|             break; | ||||
|         case TOK_ID: | ||||
|         case TOK_PREPROC_ID: | ||||
|         case TOK_NUMBER: | ||||
|         case TOK_FLOAT: | ||||
|         { | ||||
| @@ -3971,6 +3972,35 @@ static Token *expand_mmac_params(Token * tline) | ||||
|             } | ||||
|             delete_Token(t); | ||||
|             changed = true; | ||||
|         } else if (tline->type == TOK_PREPROC_ID                && | ||||
|                    tline->text[0] == '%'                        && | ||||
|                    tline->text[1] == '$'                        && | ||||
|                    !tok_type_(tline->next, TOK_WHITESPACE)      && | ||||
|                    (tok_type_(tline->next, TOK_ID)              || | ||||
|                     tok_type_(tline->next, TOK_PREPROC_ID)      || | ||||
|                     tok_type_(tline->next, TOK_NUMBER)          || | ||||
|                     tok_type_(tline->next, TOK_OTHER)           || | ||||
|                     tok_type_(tline->next, TOK_FLOAT))) { | ||||
|             /* | ||||
|              * In a sake of backward compatibility we allow | ||||
|              * to expand local single macro that early before | ||||
|              * pasting token code have place | ||||
|              * | ||||
|              * NOTE: that new code MUST use %+ macro to obtain | ||||
|              * same result | ||||
|              */ | ||||
|             t = tline; | ||||
|             tline = tline->next; | ||||
|             tt = tokenize(t->text); | ||||
|             tt = expand_smacro(tt); | ||||
|             *tail = tt; | ||||
|             while (tt) { | ||||
|                 tt->a.mac = NULL; | ||||
|                 tail = &tt->next; | ||||
|                 tt = tt->next; | ||||
|             } | ||||
|             delete_Token(t); | ||||
|             changed = true; | ||||
|         } else { | ||||
|             t = *tail = tline; | ||||
|             tline = tline->next; | ||||
|   | ||||
							
								
								
									
										68
									
								
								test/br3066383.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								test/br3066383.asm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| ; | ||||
| ; this is a for BR3005117 | ||||
| ; http://sourceforge.net/tracker/?func=detail&aid=3005117&group_id=6208&atid=106208 | ||||
| ; | ||||
| %macro b_struc 1-* | ||||
|     %push foo | ||||
|         %define %$strucname %1 | ||||
| %%top_%$strucname: | ||||
|         %rep %0 - 1 | ||||
|             %rotate 1 | ||||
|             resb %{$strucname}%1 - ($ - %%top_%$strucname) | ||||
| %1: | ||||
|         %endrep | ||||
|         resb %{$strucname}_size - ($ - %%top_%$strucname) | ||||
|     %pop | ||||
| %endmacro | ||||
|  | ||||
| struc timeval | ||||
|     .tv_sec     resd    1 | ||||
|     .tv_usec    resd    1 | ||||
| endstruc | ||||
|  | ||||
| section .text | ||||
|     mov [timeval_struct.tv_sec], eax | ||||
|  | ||||
| section .bss | ||||
|     timeval_struct b_struc timeval, .tv_sec, .tv_usec | ||||
|         timeval_struct_len equ $ - timeval_struct | ||||
|  | ||||
| section .text | ||||
|  | ||||
| ; | ||||
| ; this is a test for BR3026808 | ||||
| ; http://sourceforge.net/tracker/?func=detail&aid=3026808&group_id=6208&atid=106208 | ||||
| ; | ||||
| %imacro proc 1 | ||||
|     %push proc | ||||
|     %assign %$arg 1 | ||||
| %endmacro | ||||
|  | ||||
| %imacro arg 0-1 1 | ||||
|     %assign %$arg %1+%$arg | ||||
| %endmacro | ||||
|  | ||||
| %imacro endproc 0 | ||||
|     %pop | ||||
| %endmacro | ||||
|  | ||||
| proc Test | ||||
|     %$ARG arg | ||||
| endproc | ||||
|  | ||||
| ; | ||||
| ; this is a test for BR3066383 | ||||
| ; http://sourceforge.net/tracker/?func=detail&aid=3066383&group_id=6208&atid=106208 | ||||
| ; | ||||
| %macro pp_local 1 | ||||
|     %push | ||||
|         %assign %$_uses 0 | ||||
|         %rep 4 | ||||
|             %assign %$_ur%$_uses %$_uses | ||||
|             mov ecx, %$_ur%$_uses | ||||
|             %assign %$_uses %$_uses+1 | ||||
|         %endrep | ||||
|     %pop | ||||
| %endmacro | ||||
|  | ||||
| pp_local 1 | ||||
		Reference in New Issue
	
	Block a user