mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-21 03:14:19 +08:00
8b26247442
All directives which create single-line macros now have %i... variants to define case-insensitive versions. Case insensitive rather sucks, but at least this way it is consistent. Single-line macro parameters can now be evaluated as a number, as done by %assign. To do so, declare a parameter starting with =, for example: %define foo(x,=y) mov [x],macro_array_y ... would evaluate y as a number but leave x as a string. NOTE: it would arguably be better to have this as a per-instance basis, but it is easily handled by having a secondary macro called with the same argument twice. Finally, add a more consistent method for defining "magic" macros, which need to be evaluated at runtime. For now, it is only used by the special macros __FILE__, __LINE__, __BITS__, __PTR__, and __PASS__. __PTR__ is a new macro which evaluates to word, dword or qword matching the value of __BITS__. The magic macro framework, however, provides a natural hook for a future plug-in infrastructure to hook into a scripting language. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
101 lines
2.3 KiB
Plaintext
101 lines
2.3 KiB
Plaintext
## --------------------------------------------------------------------------
|
|
##
|
|
## Copyright 1996-2019 The NASM Authors - All Rights Reserved
|
|
## See the file AUTHORS included with the NASM distribution for
|
|
## the specific copyright holders.
|
|
##
|
|
## Redistribution and use in source and binary forms, with or without
|
|
## modification, are permitted provided that the following
|
|
## conditions are met:
|
|
##
|
|
## * Redistributions of source code must retain the above copyright
|
|
## notice, this list of conditions and the following disclaimer.
|
|
## * Redistributions in binary form must reproduce the above
|
|
## copyright notice, this list of conditions and the following
|
|
## disclaimer in the documentation and/or other materials provided
|
|
## with the distribution.
|
|
##
|
|
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
## CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
## EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
##
|
|
## --------------------------------------------------------------------------
|
|
|
|
#
|
|
# A * at the end indicates a condition; the list of conditions are
|
|
# on lines starting with *; the negatives are auto-generated
|
|
#
|
|
*
|
|
*ctx
|
|
*def
|
|
*empty
|
|
*env
|
|
*id
|
|
*idn
|
|
*idni
|
|
*macro
|
|
*num
|
|
*str
|
|
*token
|
|
%arg
|
|
%assign
|
|
%clear
|
|
%define
|
|
%defstr
|
|
%deftok
|
|
%depend
|
|
%elif*
|
|
%else
|
|
%endif
|
|
%endm
|
|
%endmacro
|
|
%endrep
|
|
%error
|
|
%exitmacro
|
|
%exitrep
|
|
%fatal
|
|
%iassign
|
|
%idefine
|
|
%idefstr
|
|
%ideftok
|
|
%if*
|
|
%imacro
|
|
%include
|
|
%ipathsearch
|
|
%irmacro
|
|
%istrcat
|
|
%istrlen
|
|
%isubstr
|
|
%ixdefine
|
|
%line
|
|
%local
|
|
%macro
|
|
%pathsearch
|
|
%pop
|
|
%pragma
|
|
%push
|
|
%rep
|
|
%repl
|
|
%rmacro
|
|
%rotate
|
|
%stacksize
|
|
%strcat
|
|
%strlen
|
|
%substr
|
|
%undef
|
|
%unimacro
|
|
%unmacro
|
|
%use
|
|
%warning
|
|
%xdefine
|