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

## verify-format-argument-count-switch

This compiler switch can direct the compiler to examine format statemnts being compiled to check whether the number of arguments supplied in the format statement corresponds to the number called for in the format control string.

Format statements may have the exact number of arguments called for:

    (format t "~d days left for a ~d percent discount~%" 10 20)

Too few arguments:

      (format t "~d days left for a ~d percent discount~%" 10 )

Or too many arguments:

      (format t "~d days left for a ~d percent discount~%" 10 20 30 40)

Having exactly the number of arguments called for is normal practice. It is not an error (indeed it is explicilty permitted) to have more than are called for. Having too few is not in itself an error but if the form is ever evaluated, an error will be signaled.

This compiler switch variable differs from other in that its value can be one of the integers 0, 1, 2, 3, and 4, as well as `nil` (equivalent to 0) and `t` (equivalent to 2). Actually, any non-`nil` value other than 0, 1, 2, 3, and 4 is equivalent to `t` (which, again, is equivalent to 2).

When the value of this switch is 1, 2 (or `t`), 3, or 4, then when a format form is compiled, information is collected on whether the number of arguments supplied is less than, equal to, or more than the number called for in the format string. If the format string is too complex to analyse (perhaps because it will not be known until run time whether or not there are enough arguments), that information is also collected. Finally, if certain errors in the format form are detected, that information is collected.

Like other switches, this one can be set or bound to one of the legal values, or set or bound to a function object that accepts five arguments and returns `t` or `nil` or 0, 1, 2, 3, or 4. The arguments passed to the function will be the values of the safety, space, speed, debug, and compilation-speed optimization qualities, in that order.

Here is the behavior for the various values of the switch:

- 0 or `nil`: Collect no statistics, signal no warning or compiler notes.
- `t`, 1, 2, 3, or 4: Collect statistics about format argument counts compared to what is called for in format strings; about format strings too complex to analyze; and about syntactic errors in format forms.
- 1: Gather statistics only. Signal no warnings or compiler notes.
- `t` or 2: Gather statistics, signal style-warning if not enough arguments.
- 3: Like 2, but signal a compiler-note when too many arguments are detected. (It is not an error to supply too many arguments, but a compiler-note can be useful if that is not what is intended.)
- 4: Like 3, but also signal a compiler-note when a format string is too complex to analyse.

Statistics are only kept if the value of the variable `*format-arg-count-stats*` is a list of six fixnums (representing all, missing args, args equal in number to needed, args more than needed, too complex, and syntax error). These numbers are incremented appropriately as format forms are analysed. Warnings and compiler-notes are printed if the switch value calls for them. The function format-arg-count-stats prints the collected statistics.

This switch is initially bound to a function which returns 1 for safety 0 and compilation-speed 0 or 1; returns 2 for safety 1, 2 or 3 and compilation-speed 0 or 1; and returns 0 for compilation speed 2 or 3. The initial values of safety and compilation-speed are both 1, so initially this switch returns 2.

See Checking format forms during compilation in miscellaneous.htm for more information.

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