INCF on THE variable calls SI::DELTA function twice
Describe the problem here.
CL-USER> (defparameter *foo* 1)
*FOO*
CL-USER> (defun foo ()
(incf *foo*))
FOO
CL-USER> (let ((foo 0))
(incf (the fixnum foo) (foo)))
3
CL-USER> *foo*
3
CL-USER> (let ((foo 0))
(incf foo (foo)))
4
The last line is what I would expect, (foo)
being called only once. But if I wrap the reference with THE
, it ends up executing (foo)
twice.
CL-USER> (lisp-implementation-version)
"16.1.3"
CL-USER> (ext:lisp-implementation-vcs-id)
"UNKNOWN"
CL-USER> (software-type)
"Linux"
CL-USER> (software-version)
"4.12.10-300.vanilla.knurd.1.fc26.x86_64"
CL-USER> (machine-type)
"x86_64"
CL-USER> *features*
(:QUICKLISP
:CL-UNICODE CFFI-FEATURES:FLAT-NAMESPACE CFFI-FEATURES:X86-64
CFFI-FEATURES:UNIX :CFFI CFFI-SYS::FLAT-NAMESPACE :X86-64 :CL-PPCRE
:ASDF-PACKAGE-SYSTEM :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-UNIX
:NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :SWANK :SERVE-EVENT :PROFILE :WALKER
:CDR-1 :CDR-5 :LINUX :FORMATTER :CDR-7 :ECL-WEAK-HASH :LITTLE-ENDIAN
:ECL-READ-WRITE-LOCK :LONG-LONG :UINT64-T :UINT32-T :UINT16-T
:RELATIVE-PACKAGE-NAMES :LONG-FLOAT :UNICODE :DFFI :CLOS-STREAMS :CMU-FORMAT
:UNIX :ECL-PDE :DLOPEN :CLOS :THREADS :BOEHM-GC :ANSI-CL :COMMON-LISP
:IEEE-FLOATING-POINT :CDR-14 :PREFIXED-API :FFI :X86_64 :COMMON :ECL)
CL-USER>
This is on the 16.1.3 release tag.