The fast-generic-functions Reference Manual
Table of Contents
The fast-generic-functions Reference Manual
This is the fast-generic-functions Reference Manual,
generated automatically by Declt version 3.0 "Montgomery Scott"
on Tue Dec 22 13:26:23 2020 GMT+0.
1 Introduction
#+TITLE: Fast Generic Functions
This library introduces /fast generic functions/, i.e., functions that
behave just like regular generic functions, except that the can be sealed
on certain domains. If the compiler can then statically detect that the
arguments to a fast generic function fall within such a domain, it will
perform a variety of optimizations.
* Example 1 - Generic Find
This example illustrates how one can define a (hopefully) fast method
for finding items in a sequence.
The first step is to define a generic function whose generic function class
is =fast-generic-function=.
#+BEGIN_SRC lisp
(defgeneric generic-find (item sequence &key test)
(:generic-function-class fast-generic-functions:fast-generic-function))
#+END_SRC
Once this definition is loaded (and only then, so you shouldn't put the
next snippets in the same file as the defgeneric form), it is possible to
add methods to it in the usual way.
#+BEGIN_SRC lisp
(defmethod generic-find (item (list list) &key (test #'eql))
(and (member item list :test test)
t))
(defmethod generic-find (item (vector vector) &key (test #'eql))
(cl:find item vector :test test))
(seal-domain #'generic-find '(t list))
(seal-domain #'generic-find '(t vector))
#+END_SRC
The novelty are the two calls to =seal-domain=. These calls seal the
specified part of the function domain, and at the same time install
compiler optimizations for calls to that generic function.
Whenever the compiler can detect that the arguments of a call to a fast
generic function fall within such a sealed domain, the entire call can be
optimized in a variety of ways. By default, the call to the fast generic
function's discriminating function will be replaced by a direct call to a
custom effective method function. This means that there will be zero
overhead for determining the generic function's behavior. The following
example illustrates this:
#+BEGIN_SRC lisp
(defun small-prime-p (x)
(generic-find x '(2 3 5 7 11)))
;; The call to GENERIC-FIND should have been replaced by a direct call to
;; the appropriate effective method function.
(disassemble #'small-prime-p)
#+END_SRC
It is even possible to inline the entire effective method into the call
site. However, to avoid code bloat, this feature is disabled by default.
To enable it, each method withing the sealed domain must contain an
appropriate declaration, as shown in the next example.
* Example 2 - Extensible Number Functions
#+BEGIN_SRC lisp
(defgeneric binary-+ (x y)
(:generic-function-class fast-generic-function))
(defmethod binary-+ ((x number) (y number))
(declare (method-properties inlineable))
(+ x y))
(seal-domain #'binary-+ '(number number))
#+END_SRC
It is easy to generalize such a binary function to a function that accepts
any number of arguments:
#+BEGIN_SRC lisp
(defun generic-+ (&rest things)
(cond ((null things) 0)
((null (rest things)) (first things))
(t (reduce #'binary-+ things))))
(define-compiler-macro generic-+ (&rest things)
(cond ((null things) 0)
((null (rest things)) (first things))
(t (reduce (lambda (a b) `(binary-+ ,a ,b)) things))))
#+END_SRC
With all this in place, we can use our =generic-+= function much like
Common Lisp's built-in =+= without worrying about performance. The next
code snippet shows that in fact, each call to =generic-+= is inlined and
turned into a single =addss= instruction.
#+BEGIN_SRC lisp
(disassemble
(compile nil
'(lambda (x y z)
(declare (single-float x y z))
(generic-+ x y z))))
;; disassembly for (lambda (x y z))
;; Size: 38 bytes. Origin: #x52FD9354
;; 54: 498B4510 mov RAX, [R13+16]
;; 58: 488945F8 mov [RBP-8], RAX
;; 5C: 0F28CC movaps XMM1, XMM4
;; 5F: F30F58CB addss XMM1, XMM3
;; 63: F30F58CA addss XMM1, XMM2
;; 67: 660F7ECA movd EDX, XMM1
;; 6B: 48C1E220 shl RDX, 32
;; 6F: 80CA19 or DL, 25
;; 72: 488BE5 mov RSP, RBP
;; 75: F8 clc
;; 76: 5D pop RBP
;; 77: C3 ret
;; 78: CC10 int3 16
#+END_SRC
Once a fast generic function has been sealed, it is not possible to add,
remove, or redefine methods within the sealed domain. However, outside of
the sealed domain, it behaves just like a standard generic function. That
means we can extend its behavior, e.g., to allow addition of strings:
#+BEGIN_SRC lisp
(defmethod binary-+ ((x string) (y string))
(concatenate 'string x y))
(generic-+ "foo" "bar" "baz")
;; => "foobarbaz"
#+END_SRC
* Specializing on a User-Defined Class
By default, only built-in classes and structure classes can appear as
specializers of a method within a sealed domain of a fast generic function.
However, it is also possible to define custom sealable classes. This
example illustrates how.
Since this example has plenty of dependencies (metaobject definition and
use, generic function definition and method defintion, sealing and use of a
sealed function), each of the following snippets of code should be put into
its own file.
In the first snippet, we define sealable standard class, that is both a
sealable class and a standard class.
#+BEGIN_SRC lisp
(defclass sealable-standard-class
(sealable-metaobjects:sealable-class standard-class)
())
(defmethod validate-superclass
((class sealable-standard-class)
(superclass standard-class))
t)
#+END_SRC
In the next snippet, we define a class =foo= whose metaclass is our newly
introduced =sealable-standard-class=. Because the implementation of fast
generic functions uses literal instances to find an optimized effective
method function at load time, each sealable class must also have a suitable
method on =make-load-form=.
#+BEGIN_SRC lisp
(defclass foo ()
((x :reader x :initarg :x))
(:metaclass sealable-standard-class))
(defmethod make-load-form ((foo foo) &optional env)
(make-load-form-saving-slots foo :slot-names '(x) :environment env))
#+END_SRC
In the next snippet, we define a fast generic function =op=.
#+BEGIN_SRC lisp
(defgeneric op (foo)
(:generic-function-class fast-generic-functions:fast-generic-function))
#+END_SRC
Once we have loaded the definition of =op=, we can add individual methods
and seal some of them. In particular, we can add a method that specializes
on the =foo= class.
We could also have defined this method without =foo= being a sealable
class, but then the call to =seal-domain= would have signaled an error.
#+BEGIN_SRC lisp
(defmethod op ((foo foo))
(* 2 (x foo)))
(sealable-metaobjects:seal-domain #'op '(foo))
#+END_SRC
Finally, we have everything in place for having optimized calls to =op= in
the case where its argument is of type =foo=.
#+BEGIN_SRC lisp
(defun bar ()
(let ((foo (make-instance 'foo :x 42)))
(declare (foo foo))
(op foo)))
#+END_SRC
If this example is too intimidating for you, please remember that you can
always specialize fast methods on built-in classes (like integer and
simple-vector) or structure classes (everything defined via =defstruct=).
2 Systems
The main system appears first, followed by any subsystem dependency.
2.1 fast-generic-functions
- Author
Marco Heisig <marco.heisig@fau.de>
- License
MIT
- Description
Seal your generic functions for an extra boost in performance.
- Dependencies
- closer-mop
- trivial-macroexpand-all
- sealable-metaobjects
- Source
fast-generic-functions.asd (file)
- Components
-
3 Files
Files are sorted by type and then listed depth-first from the systems
components trees.
3.1 Lisp
3.1.1 fast-generic-functions.asd
- Location
fast-generic-functions.asd
- Systems
fast-generic-functions (system)
3.1.2 fast-generic-functions/packages.lisp
- Parent
fast-generic-functions (system)
- Location
packages.lisp
- Packages
fast-generic-functions
3.1.3 fast-generic-functions/utilities.lisp
- Dependency
packages.lisp (file)
- Parent
fast-generic-functions (system)
- Location
utilities.lisp
- Internal Definitions
-
3.1.4 fast-generic-functions/lambda-lists.lisp
- Dependency
utilities.lisp (file)
- Parent
fast-generic-functions (system)
- Location
lambda-lists.lisp
- Internal Definitions
-
3.1.5 fast-generic-functions/expand-effective-method-body.lisp
- Dependency
lambda-lists.lisp (file)
- Parent
fast-generic-functions (system)
- Location
expand-effective-method-body.lisp
- Internal Definitions
-
3.1.6 fast-generic-functions/generic-functions.lisp
- Dependency
expand-effective-method-body.lisp (file)
- Parent
fast-generic-functions (system)
- Location
generic-functions.lisp
- Exported Definitions
-
- Internal Definitions
optimize-function-call (generic function)
3.1.7 fast-generic-functions/fast-method.lisp
- Dependency
generic-functions.lisp (file)
- Parent
fast-generic-functions (system)
- Location
fast-method.lisp
- Exported Definitions
fast-method (class)
- Internal Definitions
-
3.1.8 fast-generic-functions/fast-generic-function.lisp
- Dependency
fast-method.lisp (file)
- Parent
fast-generic-functions (system)
- Location
fast-generic-function.lisp
- Exported Definitions
fast-generic-function (class)
- Internal Definitions
-
3.1.9 fast-generic-functions/optimize-function-call.lisp
- Dependency
fast-generic-function.lisp (file)
- Parent
fast-generic-functions (system)
- Location
optimize-function-call.lisp
- Internal Definitions
-
3.1.10 fast-generic-functions/default.lisp
- If Feature
(not (or sbcl ccl))
- Dependency
optimize-function-call.lisp (file)
- Parent
fast-generic-functions (system)
- Location
default.lisp
3.1.11 fast-generic-functions/sbcl.lisp
- If Feature
sbcl
- Dependency
default.lisp (file)
- Parent
fast-generic-functions (system)
- Location
sbcl.lisp
3.1.12 fast-generic-functions/ccl.lisp
- If Feature
ccl
- Dependency
sbcl.lisp (file)
- Parent
fast-generic-functions (system)
- Location
ccl.lisp
4 Packages
Packages are listed by definition order.
4.1 fast-generic-functions
- Source
packages.lisp (file)
- Use List
closer-common-lisp
- Exported Definitions
-
- Internal Definitions
-
5 Definitions
Definitions are sorted by export status, category, package, and then by
lexicographic order.
5.1 Exported definitions
5.1.1 Generic functions
- Generic Function: no-primary-method GENERIC-FUNCTION &rest ARGUMENTS
-
- Package
fast-generic-functions
- Source
generic-functions.lisp (file)
- Methods
- Method: no-primary-method (GENERIC-FUNCTION generic-function) &rest ARGUMENTS
-
5.1.2 Classes
- Class: fast-generic-function ()
-
- Package
fast-generic-functions
- Source
fast-generic-function.lisp (file)
- Direct superclasses
sealable-standard-generic-function (class)
- Direct methods
-
- Direct slots
- Slot: %full-effective-method-cache
-
- Initform
(quote nil)
- Readers
full-effective-method-cache (generic function)
- Writers
(setf full-effective-method-cache) (generic function)
- Slot: %flat-effective-method-cache
-
- Initform
(quote nil)
- Readers
flat-effective-method-cache (generic function)
- Writers
(setf flat-effective-method-cache) (generic function)
- Direct Default Initargs
Initarg | Value |
:method-class | (find-class (quote fast-generic-functions:fast-method)) |
- Class: fast-method ()
-
- Package
fast-generic-functions
- Source
fast-method.lisp (file)
- Direct superclasses
potentially-sealable-standard-method (class)
- Direct methods
-
- Direct slots
- Slot: %lambda
-
- Initargs
fast-generic-functions::.lambda.
- Initform
(fast-generic-functions::required-argument (quote fast-generic-functions::.lambda.))
- Readers
fast-method-lambda (generic function)
5.2 Internal definitions
5.2.1 Functions
- Function: anonymize-auxiliary-info INFO
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: anonymize-keyword-info INFO
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: anonymize-optional-info INFO
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: anonymize-ordinary-lambda-list LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: anonymize-required-info INFO
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: block-name FUNCTION-NAME
-
- Package
fast-generic-functions
- Source
utilities.lisp (file)
- Function: call-fast-method-lambda METHOD LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
- Function: coerce-to-fast-method METHOD LAMBDA-LIST METHOD-CLASS
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
- Function: compute-effective-method-lambda-list GENERIC-FUNCTION APPLICABLE-METHODS
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: effective-method-lambda GENERIC-FUNCTION STATIC-CALL-SIGNATURE FLATTEN-ARGUMENTS
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: expand-call-method METHOD NEXT-METHODS LAMBDA-LIST METHOD-CLASS
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
- Function: expand-effective-method-body EFFECTIVE-METHOD GENERIC-FUNCTION LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
- Function: inlineable-method-p METHOD
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: lambda-list-apply-arguments LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: lambda-list-variables LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: lookup-flat-effective-method GENERIC-FUNCTION STATIC-CALL-SIGNATURE
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: lookup-full-effective-method GENERIC-FUNCTION STATIC-CALL-SIGNATURE
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: make-fast-method-lambda GENERIC-FUNCTION METHOD LAMBDA ENVIRONMENT
-
- Package
fast-generic-functions
- Source
fast-method.lisp (file)
- Function: merge-allow-other-keys G-ALLOW-OTHER-KEYS M-ALLOW-OTHER-KEYS-LIST
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: merge-keyword-infos G-KEYWORD M-KEYWORDS
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: merge-optional-infos G-OPTIONAL M-OPTIONALS
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: merge-required-infos G-REQUIRED M-REQUIREDS
-
- Package
fast-generic-functions
- Source
optimize-function-call.lisp (file)
- Function: normalize-ordinary-lambda-list LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: null-lexical-environement-p ENVIRONMENT
-
- Package
fast-generic-functions
- Source
utilities.lisp (file)
- Function: parse-auxiliary-item ITEM
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: parse-keyword-item ITEM
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: parse-optional-item ITEM
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: parse-ordinary-lambda-list LAMBDA-LIST
-
Returns six values:
1. A list of REQUIRED-INFO instances, one for each required argument.
2. A list of OPTIONAL-INFO instances, one for each optional argument.
3. The name of the rest variable, or NIL, if there is none.
4. A list of KEYWORD-INFO instances, one for each keyword argument.
5. A boolean, indicating whether &allow-other-keys is present.
6. A list of AUXILIARY-INFO instances, one for each auxiliary argument.
Can parse all but specialized lambda lists.
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: parse-reqired-item ITEM
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: required-argument NAME
-
- Package
fast-generic-functions
- Source
utilities.lisp (file)
- Function: starts-with ITEM
-
- Package
fast-generic-functions
- Source
utilities.lisp (file)
- Function: unparse-auxiliary AUXILIARY
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: unparse-keyword KEYWORD ALLOW-OTHER-KEYS-P
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: unparse-optional OPTIONAL
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: unparse-ordinary-lambda-list REQUIRED OPTIONAL REST-VAR KEYWORD ALLOW-OTHER-KEYS-P AUXILIARY
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: unparse-required REQUIRED
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: unparse-rest REST-VAR
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Function: wrap-in-call-method-macrolet FORM GENERIC-FUNCTION LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
- Function: wrap-in-next-methods FORM NEXT-METHODS LAMBDA-LIST METHOD-CLASS
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
- Function: wrap-in-reinitialize-arguments FORM LAMBDA-LIST
-
- Package
fast-generic-functions
- Source
expand-effective-method-body.lisp (file)
5.2.2 Generic functions
- Generic Function: auxiliary-info-initform OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: auxiliary-info-initform (AUXILIARY-INFO auxiliary-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: auxiliary-info-variable OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: auxiliary-info-variable (AUXILIARY-INFO auxiliary-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: fast-method-lambda OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: fast-method-lambda (FAST-METHOD fast-method)
-
automatically generated reader method
- Source
fast-method.lisp (file)
- Generic Function: flat-effective-method-cache OBJECT
-
- Generic Function: (setf flat-effective-method-cache) NEW-VALUE OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: flat-effective-method-cache (FAST-GENERIC-FUNCTION fast-generic-function)
-
automatically generated reader method
- Source
fast-generic-function.lisp (file)
- Method: (setf flat-effective-method-cache) NEW-VALUE (FAST-GENERIC-FUNCTION fast-generic-function)
-
automatically generated writer method
- Source
fast-generic-function.lisp (file)
- Generic Function: full-effective-method-cache OBJECT
-
- Generic Function: (setf full-effective-method-cache) NEW-VALUE OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: full-effective-method-cache (FAST-GENERIC-FUNCTION fast-generic-function)
-
automatically generated reader method
- Source
fast-generic-function.lisp (file)
- Method: (setf full-effective-method-cache) NEW-VALUE (FAST-GENERIC-FUNCTION fast-generic-function)
-
automatically generated writer method
- Source
fast-generic-function.lisp (file)
- Generic Function: gensymify OBJECT
-
- Package
fast-generic-functions
- Source
utilities.lisp (file)
- Methods
- Method: gensymify (STRING string)
-
- Method: gensymify (SYMBOL symbol)
-
- Method: gensymify OBJECT
-
- Generic Function: keyword-info-initform OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: keyword-info-initform (KEYWORD-INFO keyword-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: keyword-info-keyword OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: keyword-info-keyword (KEYWORD-INFO keyword-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: keyword-info-suppliedp OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: keyword-info-suppliedp (KEYWORD-INFO keyword-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: keyword-info-variable OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: keyword-info-variable (KEYWORD-INFO keyword-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: optimize-function-call GENERIC-FUNCTION STATIC-CALL-SIGNATURE
-
- Package
fast-generic-functions
- Source
generic-functions.lisp (file)
- Methods
- Method: optimize-function-call (FAST-GENERIC-FUNCTION fast-generic-function) (STATIC-CALL-SIGNATURE static-call-signature)
-
- Source
optimize-function-call.lisp (file)
- Method: optimize-function-call (FAST-GENERIC-FUNCTION fast-generic-function) (STATIC-CALL-SIGNATURE static-call-signature) around
-
- Source
optimize-function-call.lisp (file)
- Generic Function: optional-info-initform OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: optional-info-initform (OPTIONAL-INFO optional-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: optional-info-suppliedp OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: optional-info-suppliedp (OPTIONAL-INFO optional-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: optional-info-variable OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: optional-info-variable (OPTIONAL-INFO optional-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
- Generic Function: required-info-variable OBJECT
-
- Package
fast-generic-functions
- Methods
- Method: required-info-variable (REQUIRED-INFO required-info)
-
automatically generated reader method
- Source
lambda-lists.lisp (file)
5.2.3 Classes
- Class: auxiliary-info ()
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Direct superclasses
standard-object (class)
- Direct methods
-
- Direct slots
- Slot: %variable
-
- Type
fast-generic-functions::local-variable
- Initargs
:variable
- Initform
(fast-generic-functions::required-argument :variable)
- Readers
auxiliary-info-variable (generic function)
- Slot: %initform
-
- Initargs
:initform
- Readers
auxiliary-info-initform (generic function)
- Class: keyword-info ()
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Direct superclasses
standard-object (class)
- Direct methods
-
- Direct slots
- Slot: %keyword
-
- Type
keyword
- Initargs
:keyword
- Initform
(fast-generic-functions::required-argument :keyword)
- Readers
keyword-info-keyword (generic function)
- Slot: %variable
-
- Type
fast-generic-functions::local-variable
- Initargs
:variable
- Initform
(fast-generic-functions::required-argument :variable)
- Readers
keyword-info-variable (generic function)
- Slot: %initform
-
- Initargs
:initform
- Readers
keyword-info-initform (generic function)
- Slot: %suppliedp
-
- Type
(or null fast-generic-functions::local-variable)
- Initargs
:suppliedp
- Readers
keyword-info-suppliedp (generic function)
- Class: optional-info ()
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Direct superclasses
standard-object (class)
- Direct methods
-
- Direct slots
- Slot: %variable
-
- Type
fast-generic-functions::local-variable
- Initargs
:variable
- Initform
(fast-generic-functions::required-argument :variable)
- Readers
optional-info-variable (generic function)
- Slot: %initform
-
- Initargs
:initform
- Readers
optional-info-initform (generic function)
- Slot: %suppliedp
-
- Type
(or null fast-generic-functions::local-variable)
- Initargs
:suppliedp
- Readers
optional-info-suppliedp (generic function)
- Class: required-info ()
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
- Direct superclasses
standard-object (class)
- Direct methods
required-info-variable (method)
- Direct slots
- Slot: %variable
-
- Type
fast-generic-functions::local-variable
- Initargs
:variable
- Initform
(fast-generic-functions::required-argument :variable)
- Readers
required-info-variable (generic function)
5.2.4 Types
- Type: local-variable ()
-
- Package
fast-generic-functions
- Source
lambda-lists.lisp (file)
Appendix A Indexes
A.1 Concepts
| Index Entry | | Section |
|
F | | |
| fast-generic-functions.asd: | | The fast-generic-functions․asd file |
| fast-generic-functions/ccl.lisp: | | The fast-generic-functions/ccl․lisp file |
| fast-generic-functions/default.lisp: | | The fast-generic-functions/default․lisp file |
| fast-generic-functions/expand-effective-method-body.lisp: | | The fast-generic-functions/expand-effective-method-body․lisp file |
| fast-generic-functions/fast-generic-function.lisp: | | The fast-generic-functions/fast-generic-function․lisp file |
| fast-generic-functions/fast-method.lisp: | | The fast-generic-functions/fast-method․lisp file |
| fast-generic-functions/generic-functions.lisp: | | The fast-generic-functions/generic-functions․lisp file |
| fast-generic-functions/lambda-lists.lisp: | | The fast-generic-functions/lambda-lists․lisp file |
| fast-generic-functions/optimize-function-call.lisp: | | The fast-generic-functions/optimize-function-call․lisp file |
| fast-generic-functions/packages.lisp: | | The fast-generic-functions/packages․lisp file |
| fast-generic-functions/sbcl.lisp: | | The fast-generic-functions/sbcl․lisp file |
| fast-generic-functions/utilities.lisp: | | The fast-generic-functions/utilities․lisp file |
| File, Lisp, fast-generic-functions.asd: | | The fast-generic-functions․asd file |
| File, Lisp, fast-generic-functions/ccl.lisp: | | The fast-generic-functions/ccl․lisp file |
| File, Lisp, fast-generic-functions/default.lisp: | | The fast-generic-functions/default․lisp file |
| File, Lisp, fast-generic-functions/expand-effective-method-body.lisp: | | The fast-generic-functions/expand-effective-method-body․lisp file |
| File, Lisp, fast-generic-functions/fast-generic-function.lisp: | | The fast-generic-functions/fast-generic-function․lisp file |
| File, Lisp, fast-generic-functions/fast-method.lisp: | | The fast-generic-functions/fast-method․lisp file |
| File, Lisp, fast-generic-functions/generic-functions.lisp: | | The fast-generic-functions/generic-functions․lisp file |
| File, Lisp, fast-generic-functions/lambda-lists.lisp: | | The fast-generic-functions/lambda-lists․lisp file |
| File, Lisp, fast-generic-functions/optimize-function-call.lisp: | | The fast-generic-functions/optimize-function-call․lisp file |
| File, Lisp, fast-generic-functions/packages.lisp: | | The fast-generic-functions/packages․lisp file |
| File, Lisp, fast-generic-functions/sbcl.lisp: | | The fast-generic-functions/sbcl․lisp file |
| File, Lisp, fast-generic-functions/utilities.lisp: | | The fast-generic-functions/utilities․lisp file |
|
L | | |
| Lisp File, fast-generic-functions.asd: | | The fast-generic-functions․asd file |
| Lisp File, fast-generic-functions/ccl.lisp: | | The fast-generic-functions/ccl․lisp file |
| Lisp File, fast-generic-functions/default.lisp: | | The fast-generic-functions/default․lisp file |
| Lisp File, fast-generic-functions/expand-effective-method-body.lisp: | | The fast-generic-functions/expand-effective-method-body․lisp file |
| Lisp File, fast-generic-functions/fast-generic-function.lisp: | | The fast-generic-functions/fast-generic-function․lisp file |
| Lisp File, fast-generic-functions/fast-method.lisp: | | The fast-generic-functions/fast-method․lisp file |
| Lisp File, fast-generic-functions/generic-functions.lisp: | | The fast-generic-functions/generic-functions․lisp file |
| Lisp File, fast-generic-functions/lambda-lists.lisp: | | The fast-generic-functions/lambda-lists․lisp file |
| Lisp File, fast-generic-functions/optimize-function-call.lisp: | | The fast-generic-functions/optimize-function-call․lisp file |
| Lisp File, fast-generic-functions/packages.lisp: | | The fast-generic-functions/packages․lisp file |
| Lisp File, fast-generic-functions/sbcl.lisp: | | The fast-generic-functions/sbcl․lisp file |
| Lisp File, fast-generic-functions/utilities.lisp: | | The fast-generic-functions/utilities․lisp file |
|
A.2 Functions
| Index Entry | | Section |
|
( | | |
| (setf flat-effective-method-cache) : | | Internal generic functions |
| (setf flat-effective-method-cache) : | | Internal generic functions |
| (setf full-effective-method-cache) : | | Internal generic functions |
| (setf full-effective-method-cache) : | | Internal generic functions |
|
A | | |
| anonymize-auxiliary-info : | | Internal functions |
| anonymize-keyword-info : | | Internal functions |
| anonymize-optional-info : | | Internal functions |
| anonymize-ordinary-lambda-list : | | Internal functions |
| anonymize-required-info : | | Internal functions |
| auxiliary-info-initform : | | Internal generic functions |
| auxiliary-info-initform : | | Internal generic functions |
| auxiliary-info-variable : | | Internal generic functions |
| auxiliary-info-variable : | | Internal generic functions |
|
B | | |
| block-name : | | Internal functions |
|
C | | |
| call-fast-method-lambda : | | Internal functions |
| coerce-to-fast-method : | | Internal functions |
| compute-effective-method-lambda-list : | | Internal functions |
|
E | | |
| effective-method-lambda : | | Internal functions |
| expand-call-method : | | Internal functions |
| expand-effective-method-body : | | Internal functions |
|
F | | |
| fast-method-lambda : | | Internal generic functions |
| fast-method-lambda : | | Internal generic functions |
| flat-effective-method-cache : | | Internal generic functions |
| flat-effective-method-cache : | | Internal generic functions |
| full-effective-method-cache : | | Internal generic functions |
| full-effective-method-cache : | | Internal generic functions |
| Function, anonymize-auxiliary-info : | | Internal functions |
| Function, anonymize-keyword-info : | | Internal functions |
| Function, anonymize-optional-info : | | Internal functions |
| Function, anonymize-ordinary-lambda-list : | | Internal functions |
| Function, anonymize-required-info : | | Internal functions |
| Function, block-name : | | Internal functions |
| Function, call-fast-method-lambda : | | Internal functions |
| Function, coerce-to-fast-method : | | Internal functions |
| Function, compute-effective-method-lambda-list : | | Internal functions |
| Function, effective-method-lambda : | | Internal functions |
| Function, expand-call-method : | | Internal functions |
| Function, expand-effective-method-body : | | Internal functions |
| Function, inlineable-method-p : | | Internal functions |
| Function, lambda-list-apply-arguments : | | Internal functions |
| Function, lambda-list-variables : | | Internal functions |
| Function, lookup-flat-effective-method : | | Internal functions |
| Function, lookup-full-effective-method : | | Internal functions |
| Function, make-fast-method-lambda : | | Internal functions |
| Function, merge-allow-other-keys : | | Internal functions |
| Function, merge-keyword-infos : | | Internal functions |
| Function, merge-optional-infos : | | Internal functions |
| Function, merge-required-infos : | | Internal functions |
| Function, normalize-ordinary-lambda-list : | | Internal functions |
| Function, null-lexical-environement-p : | | Internal functions |
| Function, parse-auxiliary-item : | | Internal functions |
| Function, parse-keyword-item : | | Internal functions |
| Function, parse-optional-item : | | Internal functions |
| Function, parse-ordinary-lambda-list : | | Internal functions |
| Function, parse-reqired-item : | | Internal functions |
| Function, required-argument : | | Internal functions |
| Function, starts-with : | | Internal functions |
| Function, unparse-auxiliary : | | Internal functions |
| Function, unparse-keyword : | | Internal functions |
| Function, unparse-optional : | | Internal functions |
| Function, unparse-ordinary-lambda-list : | | Internal functions |
| Function, unparse-required : | | Internal functions |
| Function, unparse-rest : | | Internal functions |
| Function, wrap-in-call-method-macrolet : | | Internal functions |
| Function, wrap-in-next-methods : | | Internal functions |
| Function, wrap-in-reinitialize-arguments : | | Internal functions |
|
G | | |
| Generic Function, (setf flat-effective-method-cache) : | | Internal generic functions |
| Generic Function, (setf full-effective-method-cache) : | | Internal generic functions |
| Generic Function, auxiliary-info-initform : | | Internal generic functions |
| Generic Function, auxiliary-info-variable : | | Internal generic functions |
| Generic Function, fast-method-lambda : | | Internal generic functions |
| Generic Function, flat-effective-method-cache : | | Internal generic functions |
| Generic Function, full-effective-method-cache : | | Internal generic functions |
| Generic Function, gensymify : | | Internal generic functions |
| Generic Function, keyword-info-initform : | | Internal generic functions |
| Generic Function, keyword-info-keyword : | | Internal generic functions |
| Generic Function, keyword-info-suppliedp : | | Internal generic functions |
| Generic Function, keyword-info-variable : | | Internal generic functions |
| Generic Function, no-primary-method : | | Exported generic functions |
| Generic Function, optimize-function-call : | | Internal generic functions |
| Generic Function, optional-info-initform : | | Internal generic functions |
| Generic Function, optional-info-suppliedp : | | Internal generic functions |
| Generic Function, optional-info-variable : | | Internal generic functions |
| Generic Function, required-info-variable : | | Internal generic functions |
| gensymify : | | Internal generic functions |
| gensymify : | | Internal generic functions |
| gensymify : | | Internal generic functions |
| gensymify : | | Internal generic functions |
|
I | | |
| inlineable-method-p : | | Internal functions |
|
K | | |
| keyword-info-initform : | | Internal generic functions |
| keyword-info-initform : | | Internal generic functions |
| keyword-info-keyword : | | Internal generic functions |
| keyword-info-keyword : | | Internal generic functions |
| keyword-info-suppliedp : | | Internal generic functions |
| keyword-info-suppliedp : | | Internal generic functions |
| keyword-info-variable : | | Internal generic functions |
| keyword-info-variable : | | Internal generic functions |
|
L | | |
| lambda-list-apply-arguments : | | Internal functions |
| lambda-list-variables : | | Internal functions |
| lookup-flat-effective-method : | | Internal functions |
| lookup-full-effective-method : | | Internal functions |
|
M | | |
| make-fast-method-lambda : | | Internal functions |
| merge-allow-other-keys : | | Internal functions |
| merge-keyword-infos : | | Internal functions |
| merge-optional-infos : | | Internal functions |
| merge-required-infos : | | Internal functions |
| Method, (setf flat-effective-method-cache) : | | Internal generic functions |
| Method, (setf full-effective-method-cache) : | | Internal generic functions |
| Method, auxiliary-info-initform : | | Internal generic functions |
| Method, auxiliary-info-variable : | | Internal generic functions |
| Method, fast-method-lambda : | | Internal generic functions |
| Method, flat-effective-method-cache : | | Internal generic functions |
| Method, full-effective-method-cache : | | Internal generic functions |
| Method, gensymify : | | Internal generic functions |
| Method, gensymify : | | Internal generic functions |
| Method, gensymify : | | Internal generic functions |
| Method, keyword-info-initform : | | Internal generic functions |
| Method, keyword-info-keyword : | | Internal generic functions |
| Method, keyword-info-suppliedp : | | Internal generic functions |
| Method, keyword-info-variable : | | Internal generic functions |
| Method, no-primary-method : | | Exported generic functions |
| Method, optimize-function-call : | | Internal generic functions |
| Method, optimize-function-call : | | Internal generic functions |
| Method, optional-info-initform : | | Internal generic functions |
| Method, optional-info-suppliedp : | | Internal generic functions |
| Method, optional-info-variable : | | Internal generic functions |
| Method, required-info-variable : | | Internal generic functions |
|
N | | |
| no-primary-method : | | Exported generic functions |
| no-primary-method : | | Exported generic functions |
| normalize-ordinary-lambda-list : | | Internal functions |
| null-lexical-environement-p : | | Internal functions |
|
O | | |
| optimize-function-call : | | Internal generic functions |
| optimize-function-call : | | Internal generic functions |
| optimize-function-call : | | Internal generic functions |
| optional-info-initform : | | Internal generic functions |
| optional-info-initform : | | Internal generic functions |
| optional-info-suppliedp : | | Internal generic functions |
| optional-info-suppliedp : | | Internal generic functions |
| optional-info-variable : | | Internal generic functions |
| optional-info-variable : | | Internal generic functions |
|
P | | |
| parse-auxiliary-item : | | Internal functions |
| parse-keyword-item : | | Internal functions |
| parse-optional-item : | | Internal functions |
| parse-ordinary-lambda-list : | | Internal functions |
| parse-reqired-item : | | Internal functions |
|
R | | |
| required-argument : | | Internal functions |
| required-info-variable : | | Internal generic functions |
| required-info-variable : | | Internal generic functions |
|
S | | |
| starts-with : | | Internal functions |
|
U | | |
| unparse-auxiliary : | | Internal functions |
| unparse-keyword : | | Internal functions |
| unparse-optional : | | Internal functions |
| unparse-ordinary-lambda-list : | | Internal functions |
| unparse-required : | | Internal functions |
| unparse-rest : | | Internal functions |
|
W | | |
| wrap-in-call-method-macrolet : | | Internal functions |
| wrap-in-next-methods : | | Internal functions |
| wrap-in-reinitialize-arguments : | | Internal functions |
|
A.3 Variables
| Index Entry | | Section |
|
% | | |
| %flat-effective-method-cache : | | Exported classes |
| %full-effective-method-cache : | | Exported classes |
| %initform : | | Internal classes |
| %initform : | | Internal classes |
| %initform : | | Internal classes |
| %keyword : | | Internal classes |
| %lambda : | | Exported classes |
| %suppliedp : | | Internal classes |
| %suppliedp : | | Internal classes |
| %variable : | | Internal classes |
| %variable : | | Internal classes |
| %variable : | | Internal classes |
| %variable : | | Internal classes |
|
S | | |
| Slot, %flat-effective-method-cache : | | Exported classes |
| Slot, %full-effective-method-cache : | | Exported classes |
| Slot, %initform : | | Internal classes |
| Slot, %initform : | | Internal classes |
| Slot, %initform : | | Internal classes |
| Slot, %keyword : | | Internal classes |
| Slot, %lambda : | | Exported classes |
| Slot, %suppliedp : | | Internal classes |
| Slot, %suppliedp : | | Internal classes |
| Slot, %variable : | | Internal classes |
| Slot, %variable : | | Internal classes |
| Slot, %variable : | | Internal classes |
| Slot, %variable : | | Internal classes |
|
A.4 Data types