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