summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2010-02-28 11:52:53 +0300
committerCyrill Gorcunov <gorcunov@gmail.com>2010-02-28 12:24:20 +0300
commitf09116f44582d31321dd2b6d0e203f1714644d05 (patch)
tree246daa414b3a80ddaaaaeaded577a747b993db22
parent3031bb8ee252675e692cc9ee66249e975b47c00f (diff)
downloadnasm-f09116f44582d31321dd2b6d0e203f1714644d05.tar.gz
preproc.c: Turn off rmacro,exitmacro support
We've a problem in supporting [i]rmacro, exitmacro facilities at moment. In a sake of not holding new NASM release any longer these directives are just marked as being "forbidden". This allow us to not squash much changes in current source code base but remain on a safe side same time. Reviewed-by: Keith Kanios <keith@kanios.net> Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
-rw-r--r--doc/changes.src8
-rw-r--r--doc/nasmdoc.src57
-rw-r--r--preproc.c11
3 files changed, 43 insertions, 33 deletions
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<condition>
-\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<condition>
+\#\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
@@ -2081,6 +2081,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,
* we should ignore all directives except for condition