preproc: add %eval() function, add back %isn*()
preproc: add %eval() function, add back %isn*()

Add the %eval() preprocessor function. It evaluates each of its
arguments like a number and expands to a comma-separated lists of the
evaluated arguments.

To support this, add the concept of "true varadic" macros, which are
only used internally. True varadic macros differ from greedy macros in
that the parameter list is still parsed as individual parameters and
provided to the expansion function. As this isn't meaningful for
user-defined macros, there is no way to specify it from a directive.

Add back the %isnfoo() functions. Although one could just as well write
!%isfoo(), it doesn't cost much to provide them, and might help avoid
programmer confusion.

Signed-off-by: H. Peter Anvin (Intel) <8a453bad9912ffe59bc0f0b8abe03df9be19379e@zytor.com>

techkey/nasm,techkey/nasm,techkey/nasm,techkey/nasm,techkey/nasm