| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |
As with all compiler switch variables, the value of this variable
can be t
, nil
, or a
function object that accepts five arguments and returns t
or nil
. The arguments
passed to the function will be the values of the safety, space, speed,
debug, and compilation-speed optimization qualities, in that order. nil
is equivalent to a function that always returns
nil
and t
to a
function that always returns t
. When the
value is a function and we say t
(or true) or
nil
(or false) in the text below, we mean
that the function returns, respectively, t
or
nil
.
If this switch is true, the compiler will generate code that assumes the
sums and differences of declared fixnums are fixnums and that the
negative of a single declared fixnum is a fixnum. This switch
affects +
(e.g. (+ x y)
) and also + analogs like 1+ and incf, and - (e.g. (- x y)
or (- x)
) and also - analogs like 1-, decf and abs.
No assumptions are made about the results of multiplication, division, shifting, or any operation other than + and - and their analogs.
Initially true only if speed is 3 and safety is 0. Non-compliance note: having this switch be true is not compliant with ANSI Common Lisp, which requires that fixnum arithmetic work correctly in all cases. You may turn this switch off entirely by evaluating:
(setf comp:declared-fixnums-remain-fixnums-switch nil)
Warning: if this switch returns true during
compilation but the result of the sum or difference of declared
fixnums or of changing the sign of a single declared fixnum is not a
fixnum, the compiled code will silently produce erroneous
results. Changing the sign includes applying abs to a negative value
-- (abs most-negative-fixum)
which
equals (- most-negative-fixnum)
is a bignum.
See Declared
fixnums example for examples of incorrect results silently
produced because the results of operations on declared fixnums are
bignums.
See compiling.htm for information on the compiler.
Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |