diff options
author | H. Peter Anvin (Intel) <hpa@zytor.com> | 2019-04-25 18:00:32 -0700 |
---|---|---|
committer | H. Peter Anvin (Intel) <hpa@zytor.com> | 2019-04-25 18:00:32 -0700 |
commit | 41e9682efed7cd1df133b1b4ac806e07723f1486 (patch) | |
tree | 001a3ef33fa108a5aac02318526f401e9c4d0e71 /include | |
parent | 61891333636f2bda70f28c7cc5324f808412de58 (diff) | |
download | nasm-41e9682efed7cd1df133b1b4ac806e07723f1486.tar.gz |
preproc: massive cleanup of smacro expansion
The smacro expansion code was virtually impossible to understand, and
was leading to very strange failures. Clean it up, and do much better
handling of magic macros. This should also allow for recursive
macros, but recursive macros are extremely tricky in that it is very
hard to keep them from recursing forever, unless there is at least one
argument which is never expanded. They are not currently implemented.
Even so, I believe token pasting makes it possible to create infinite
loops; e.g.:
%define foo foo %+
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/nasmlib.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/nasmlib.h b/include/nasmlib.h index c41a5bad..a5994528 100644 --- a/include/nasmlib.h +++ b/include/nasmlib.h @@ -42,6 +42,19 @@ #include "bytesex.h" /* + * Useful construct for private values + */ +union intorptr { + int64_t i; + uint64_t u; + size_t s; + void *p; + const void *cp; + uintptr_t up; +}; +typedef union intorptr intorptr; + +/* * Wrappers around malloc, realloc, free and a few more. nasm_malloc * will fatal-error and die rather than return NULL; nasm_realloc will * do likewise, and will also guarantee to work right on being passed |