0
0
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:
Cyrill Gorcunov
2010-09-18 02:59:08 +04:00
4 changed files with 103 additions and 1 deletions

View File

@@ -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

View File

@@ -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
View 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

View File

@@ -1 +1 @@
2.09.01 2.09.02