Subject: Re: bug#31715: cl-incf and cl-decf error out when passed a nil-valued variable as 'offset'

From: Noam Postavsky <[email-masked]>
Date: Mon, 04 Jun 2018 20:12:33 -0400

Michael Heerdegen <[email-masked]> writes:

> Noam Postavsky <[email-masked]> writes:
>
>> X is an optional macro parameter, so the "optionalness" applies at
>> compile time.
>
> Are you sure we always treat optional macro parameters like this?

Do DOCSTRING and DECL count?

    (defun NAME ARGLIST &optional DOCSTRING DECL &rest BODY)

Since they're obviously not evaluated, it doesn't quite feel the same.
I couldn't find any other cases of optional parameters in core macros.

There is the special form defvar's INITVALUE, but that is treated even
more specially, since it distinguishes nil from omitted.

>> I think that would approximately double the cost of cl-incf in the
>> simple case [...]

Actually, checking again, I seem to be wrong about this; the compiler
knows to elide the extra test if the increment is a constant expression,
so it would only add runtime when incrementing by a computed amount.