diff options
author | H. Peter Anvin (Intel) <hpa@zytor.com> | 2019-10-23 12:59:06 -0700 |
---|---|---|
committer | H. Peter Anvin (Intel) <hpa@zytor.com> | 2019-10-23 12:59:06 -0700 |
commit | e91f5cc1322eed4da0de81656276e021bf352c3d (patch) | |
tree | 0043393b0084e7e50ae31909d29b3ab98a486803 /test | |
parent | 0741eb600481a97c3baddb290e0ab1a33a9e4921 (diff) | |
download | nasm-e91f5cc1322eed4da0de81656276e021bf352c3d.tar.gz |
preproc: fix %undef of macro aliases, and add %ifdefalias
Macro aliases can legitimately point to nonexistent
macros. Furthermore, %undef should remove the pointed-at macro, not
the alias. This led to an infinite loop in the existing code; fix
that.
Add an %ifdefalias directive to test for the existence of an alias.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/defalias.asm | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/defalias.asm b/test/defalias.asm new file mode 100644 index 00000000..1641a1f1 --- /dev/null +++ b/test/defalias.asm @@ -0,0 +1,52 @@ +%defalias foo bar +%ifdef foo + %error "foo should not be defined here!" +%endif + +%define foo 33 +%ifndef foo + %error "foo should be defined here!" +%endif +%ifndef bar + %error "bar should be defined here!" +%endif +%if bar != 33 + %error "bar should have the value 33 here" +%endif + +%define bar 34 +%if foo != 34 + %error "foo should have the value 34 here" +%endif + +%undef foo +%ifdef foo + %error "foo should not be defined here!" +%endif +%ifdef bar + %error "bar should not be defined here!" +%endif + +%ifndefalias foo + %error "foo was removed as an alias!" +%endif + +%define bar 35 +%if foo != 35 + %error "foo should have the value 35 here" +%endif + +%define foo 36 +%if bar != 36 + %error "bar should have the value 36 here" +%endif + +%undefalias foo +%ifdef foo + %error "foo is still defined after %undefalias" +%elifdefalias foo + %error "foo is undefined, but still an alias" +%endif +%ifndef bar + %error "bar disappeared after %undefalias foo" +%endif |