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 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
|
\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;
|
break;
|
||||||
case TOK_ID:
|
case TOK_ID:
|
||||||
|
case TOK_PREPROC_ID:
|
||||||
case TOK_NUMBER:
|
case TOK_NUMBER:
|
||||||
case TOK_FLOAT:
|
case TOK_FLOAT:
|
||||||
{
|
{
|
||||||
@@ -3971,6 +3972,35 @@ static Token *expand_mmac_params(Token * tline)
|
|||||||
}
|
}
|
||||||
delete_Token(t);
|
delete_Token(t);
|
||||||
changed = true;
|
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 {
|
} else {
|
||||||
t = *tail = tline;
|
t = *tail = tline;
|
||||||
tline = tline->next;
|
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