diff --git a/doc/changes.src b/doc/changes.src index 8fc53f98..e48aa5dc 100644 --- a/doc/changes.src +++ b/doc/changes.src @@ -12,11 +12,11 @@ since 2007. \b A number of enhancements/fixes in macros area. -\b Support for arbitrarily terminating macro expansions \c{%exitmacro}. - See \k{exitmacro}. +\#\b Support for arbitrarily terminating macro expansions \c{%exitmacro}. +\# See \k{exitmacro}. -\b Support for recursive macro expansion \c{%rmacro}/\c{%irmacro}. - See \k{mlrmacro}. +\#\b Support for recursive macro expansion \c{%rmacro}/\c{%irmacro}. +\# See \k{mlrmacro}. \b Support for converting strings to tokens. See \k{deftok}. diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src index 92363385..75001c61 100644 --- a/doc/nasmdoc.src +++ b/doc/nasmdoc.src @@ -2403,21 +2403,20 @@ things like \c silly {13,10}, crlf ; crlf: db 13,10 -\S{mlrmacro} \i{Recursive Multi-Line Macros}: \I\c{%irmacro}\i\c{%rmacro} - -A multi-line macro cannot be referenced within itself, in order to -prevent accidental infinite recursion. - -Recursive multi-line macros allow for self-referencing, with the -caveat that the user is aware of the existence, use and purpose of -recursive multi-line macros. There is also a generous, but sane, upper -limit to the number of recursions, in order to prevent run-away memory -consumption in case of accidental infinite recursion. - -As with non-recursive multi-line macros, recursive multi-line macros are -\i{case-sensitive}, unless you define them using the alternative -directive \c{%irmacro}. - +\#\S{mlrmacro} \i{Recursive Multi-Line Macros}: \I\c{%irmacro}\i\c{%rmacro} +\# +\#A multi-line macro cannot be referenced within itself, in order to +\#prevent accidental infinite recursion. +\# +\#Recursive multi-line macros allow for self-referencing, with the +\#caveat that the user is aware of the existence, use and purpose of +\#recursive multi-line macros. There is also a generous, but sane, upper +\#limit to the number of recursions, in order to prevent run-away memory +\#consumption in case of accidental infinite recursion. +\# +\#As with non-recursive multi-line macros, recursive multi-line macros are +\#\i{case-sensitive}, unless you define them using the alternative +\#directive \c{%irmacro}. \S{mlmacover} Overloading Multi-Line Macros\I{overloading, multi-line macros} @@ -2827,20 +2826,20 @@ does \e{not} remove the macro \c{bar}, since the argument specification does not match exactly. -\S{exitmacro} Exiting Multi-Line Macros: \i\c{%exitmacro} - -Multi-line macro expansions can be arbitrarily terminated with -the \c{%exitmacro} directive. - -For example: - -\c %macro foo 1-3 -\c ; Do something -\c %if -\c %exitmacro -\c %endif -\c ; Do something -\c %endmacro +\#\S{exitmacro} Exiting Multi-Line Macros: \i\c{%exitmacro} +\# +\#Multi-line macro expansions can be arbitrarily terminated with +\#the \c{%exitmacro} directive. +\# +\#For example: +\# +\#\c %macro foo 1-3 +\#\c ; Do something +\#\c %if +\#\c %exitmacro +\#\c %endif +\#\c ; Do something +\#\c %endmacro \H{condasm} \i{Conditional Assembly}\I\c{%if} diff --git a/preproc.c b/preproc.c index aa171e9b..c076066e 100644 --- a/preproc.c +++ b/preproc.c @@ -2080,6 +2080,17 @@ static int do_directive(Token * tline) i = pp_token_hash(tline->text); + /* + * FIXME: We zap execution of PP_RMACRO, PP_IRMACRO, PP_EXITMACRO + * since they are known to be buggy at moment, we need to fix them + * in future release (2.09-2.10) + */ + if (i == PP_RMACRO || i == PP_RMACRO || i == PP_EXITMACRO) { + error(ERR_NONFATAL, "unknown preprocessor directive `%s'", + tline->text); + return NO_DIRECTIVE_FOUND; + } + /* * If we're in a non-emitting branch of a condition construct, * or walking to the end of an already terminated %rep block,