NASM - The Netwide Assembler
NASM Forum => Using NASM => Topic started by: nobody on March 09, 2005, 09:45:57 AM
-
Hi!
I have a questions about NASM preprocessing:
I want to write a marco like this
%macro ohh 2
%ifdef %1_n%2
do anything
%endif
%endmacro
ohh crt,Proc
with should do something if crt_nProc is defined.
But NASM preprocessor quits with an error-message
'%ifdef' expects macro identifiers
How could I get this work?
Cheers!
-
Ah yes, you want a means for preventing the
expansion of an smac that you are handing to
an mmac as an argument, so that the mmac is
going to see the smac identifier, instead of
the smac expansion.
See SF RFE #829879 -- in NASM64 I addressed
this need via %#.
-
Hi!
I got the nasm 0.98-version and tried to do the changes
you described in SF RFE #829879 but a wasn't able to get things work.
(I'm a pascal-ian and not too familiar neighter with C
nor with the nasm-code...)
Could you give me a hint what to do?
I used the free Borland C++ 5.5 compiler under Win98 and
managed to compile the nasm form the original 0.38-code.
Then I changed preproc.c. As you said in step 5 I added
skip = FALSE;
if (tline->type == TOK_SMAC_SKIP ){
t = tline;
tline = tline->next;
nasm_free(t->text);
nasm_free(t);
if (tline){
skip = TRUE;
} else {
break;
}
}
in the expand_smacro() just before
if (tline->type == TOK_SMAC_END) {
tline->mac->in_progress = FALSE;
t = tline;
tline = tline->next;
nasm_free (t);
} else {
...
But then I get the error-message
Misplaced break in function expand_smacro
Did I insert that at the wrong place?
Thanks a lot!
-
> Did I insert that at the wrong place?
Here is how it looks in my pp_nasm.c. (The
TOK_SEP part is for SF RFE #839215.)
...
continue; /* main token loop */
}
}
}
if ( tline->type == TOK_SMAC_SKIP ) {
t = tline;
tline = tline->next;
nasm_free ( t->text );
nasm_free ( t );
if ( tline ) {
skip = TRUE;
if (
( tline->type == TOK_SMAC_SKIP ) ||
( tline->type == TOK_SEP )
) {
continue;
}
} else {
break;
}
}
if (tline->type == TOK_SMAC_END) {
...