Variable | Package: compiler | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version

## declared-fixnums-remain-fixnums-switch

As with most 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-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
This page was not revised from the 10.0 page.
Created 2019.8.20.

|  | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version