This is the cl-annot-revisit Reference Manual, generated automatically by Declt version 4.0 beta 2 "William Riker" on Sun Dec 15 04:39:14 2024 GMT+0.
cl-annot-revisit/cl-annot-revisit.asd
cl-annot-revisit/package.lisp
cl-annot-revisit/at-macro/package.lisp
cl-annot-revisit/at-macro/condition.lisp
cl-annot-revisit/at-macro/util.lisp
cl-annot-revisit/at-macro/eval-when.lisp
cl-annot-revisit/at-macro/form-traversal.lisp
cl-annot-revisit/at-macro/declaration.lisp
cl-annot-revisit/at-macro/declamation.lisp
cl-annot-revisit/at-macro/documentation.lisp
cl-annot-revisit/at-macro/export.lisp
cl-annot-revisit/at-macro/defclass.lisp
cl-annot-revisit/at-macro/defstruct.lisp
cl-annot-revisit/at-macro/slot.lisp
cl-annot-revisit/at-syntax/package.lisp
cl-annot-revisit/at-syntax/defmethods.lisp
cl-annot-revisit/at-syntax/reader.lisp
The main system appears first, followed by any subsystem dependency.
cl-annot-revisit
Re-implementation of ’cl-annot’, an annotation syntax library for Common Lisp.
YOKOTA Yuki <y2q.actionman@gmail.com>
WTFPL
alexandria
(system).
named-readtables
(system).
package.lisp
(file).
at-macro
(module).
at-syntax
(module).
Modules are listed depth-first from the system components tree.
cl-annot-revisit/at-macro
package.lisp
(file).
cl-annot-revisit
(system).
package.lisp
(file).
condition.lisp
(file).
util.lisp
(file).
eval-when.lisp
(file).
form-traversal.lisp
(file).
declaration.lisp
(file).
declamation.lisp
(file).
documentation.lisp
(file).
export.lisp
(file).
defclass.lisp
(file).
defstruct.lisp
(file).
slot.lisp
(file).
cl-annot-revisit/at-syntax
at-macro
(module).
cl-annot-revisit
(system).
package.lisp
(file).
defmethods.lisp
(file).
reader.lisp
(file).
Files are sorted by type and then listed depth-first from the systems components trees.
cl-annot-revisit/cl-annot-revisit.asd
cl-annot-revisit/package.lisp
cl-annot-revisit/at-macro/package.lisp
cl-annot-revisit/at-macro/condition.lisp
cl-annot-revisit/at-macro/util.lisp
cl-annot-revisit/at-macro/eval-when.lisp
cl-annot-revisit/at-macro/form-traversal.lisp
cl-annot-revisit/at-macro/declaration.lisp
cl-annot-revisit/at-macro/declamation.lisp
cl-annot-revisit/at-macro/documentation.lisp
cl-annot-revisit/at-macro/export.lisp
cl-annot-revisit/at-macro/defclass.lisp
cl-annot-revisit/at-macro/defstruct.lisp
cl-annot-revisit/at-macro/slot.lisp
cl-annot-revisit/at-syntax/package.lisp
cl-annot-revisit/at-syntax/defmethods.lisp
cl-annot-revisit/at-syntax/reader.lisp
cl-annot-revisit/cl-annot-revisit.asd
cl-annot-revisit
(system).
cl-annot-revisit/at-macro/condition.lisp
package.lisp
(file).
at-macro
(module).
*at-macro-verbose*
(special variable).
at-macro-condition
(condition).
at-macro-error
(condition).
at-macro-runtime-error
(condition).
at-macro-style-warning
(condition).
at-macro-syntax-error
(condition).
cl-annot-revisit/at-macro/util.lisp
package.lisp
(file).
at-macro
(module).
lambda-expression-p
(function).
ensure-list-with
(function).
function-name-p
(function).
macroexpand-convention
(macro).
mv-cond-let-n
(macro).
mv-cond-let2
(macro).
split-list-at
(function).
cl-annot-revisit/at-macro/eval-when.lisp
package.lisp
(file).
at-macro
(module).
eval-always
(macro).
eval-when-compile
(macro).
eval-when-execute
(macro).
eval-when-load
(macro).
cl-annot-revisit/at-macro/form-traversal.lisp
package.lisp
(file).
at-macro
(module).
allow-macroexpand-internal-form-p
(generic function).
find-name-to-be-defined
(function).
find-name-to-be-defined-using-head
(generic function).
function-definition-operator-p
(generic function).
variable-definition-operator-p
(generic function).
+standard-definiton-form-list+
(constant).
+standard-function-definiton-form-list+
(constant).
+standard-variable-definiton-form-list+
(constant).
apply-at-macro-for-each-form
(function).
apply-at-macro-to-multiple-forms
(function).
apply-at-macro-to-special-toplevel-form
(function).
cl-annot-revisit/at-macro/declaration.lisp
util.lisp
(file).
form-traversal.lisp
(file).
at-macro
(module).
dynamic-extent
(macro).
expand-add-declaration
(function).
expand-add-declaration-using-head
(generic function).
ignorable
(macro).
ignore
(macro).
operator-accept-docstring-p
(generic function).
operator-body-location
(generic function).
valid-proclamation-identifier-p
(generic function).
%expand-at-declaration
(function).
+standard-operators-accept-docstring-in-body+
(constant).
add-declaration
(macro).
ignore-name-p
(function).
insert-declaration-to-body
(function).
insert-declaration-to-nth-body
(function).
parse-define-method-combination-long-form
(function).
parse-defmethod-form
(function).
cl-annot-revisit/at-macro/declamation.lisp
declaration.lisp
(file).
at-macro
(module).
declaration
(macro).
expand-incompleted-declamation
(function).
expand-incompleted-declamation-using-head
(generic function).
ftype
(macro).
incompleted-declamation-applicable-p
(generic function).
inline
(macro).
notinline
(macro).
optimize
(macro).
special
(macro).
type
(macro).
%expand-ambiguous-declamation
(function).
+standard-optimize-quality-symbols+
(constant).
add-declaim-to-definiton-form
(function).
apply-incompleted-declamation
(macro).
common-lisp-package-p
(function).
complete-declaration-specifier
(function).
declaration-argument-like-p
(function).
expand-to-declaim-form
(function).
optimize-quality-p
(function).
cl-annot-revisit/at-macro/documentation.lisp
util.lisp
(file).
form-traversal.lisp
(file).
at-macro
(module).
doc
(macro).
documentation
(macro).
expand-documentation
(function).
expand-documentation-using-head
(generic function).
operator-doc-type
(generic function).
expand-doc-macro-to-assign
(function).
cl-annot-revisit/at-macro/export.lisp
util.lisp
(file).
form-traversal.lisp
(file).
at-macro
(module).
expand-export-form
(function).
expand-export-form-using-head
(generic function).
export
(macro).
add-export
(function).
cl-annot-revisit/at-macro/defclass.lisp
export.lisp
(file).
at-macro
(module).
*slot-accessor-option-names*
(special variable).
expand-export-accessors
(function).
expand-export-accessors-using-head
(generic function).
expand-export-slots
(function).
expand-export-slots-using-head
(generic function).
expand-metaclass
(function).
expand-metaclass-using-head
(generic function).
export-accessors
(macro).
export-class
(macro).
export-slots
(macro).
metaclass
(macro).
expand-export-class
(function).
expand-export-class-using-head
(generic function).
pick-defclass-options
(function).
pick-defclass-slots
(function).
cl-annot-revisit/at-macro/defstruct.lisp
defclass.lisp
(file).
documentation.lisp
(file).
at-macro
(module).
expand-documentation-using-head
(method).
expand-export-accessors-using-head
(method).
expand-export-constructors
(function).
expand-export-constructors-using-head
(generic function).
expand-export-structure
(function).
expand-export-structure-using-head
(generic function).
export-constructors
(macro).
export-structure
(macro).
find-name-to-be-defined-using-head
(method).
parse-defstruct-form
(function).
parse-defstruct-option
(function).
pick-names-of-defstruct-form
(function).
cl-annot-revisit/at-macro/slot.lisp
package.lisp
(file).
at-macro
(module).
at-required-precondition-error
(condition).
at-required-precondition-error-slot-name
(reader method).
at-required-runtime-error
(condition).
at-required-runtime-error-initarg
(reader method).
at-required-runtime-error-slot-name
(reader method).
optional
(macro).
required
(macro).
raise-required-slot-error
(function).
read-new-value
(function).
split-slot-specifier
(function).
cl-annot-revisit/at-syntax/defmethods.lisp
package.lisp
(file).
at-syntax
(module).
count-lambda-list-required-arguments
(function).
expand-at-read-time-p
(generic function).
find-at-syntax-arity
(generic function).
resolve-at-syntax-alias
(generic function).
cl-annot-revisit/at-syntax/reader.lisp
defmethods.lisp
(file).
at-syntax
(module).
*cl-annot-compatibility*
(special variable).
read-at
(function).
read-at-syntax
(function).
read-delimited-list-no-eof
(function).
read-sharp-at
(function).
Packages are listed by definition order.
cl-annot-revisit-at-macro
The at-macros of cl-annot-revisit.
alexandria
.
common-lisp
.
*slot-accessor-option-names*
(special variable).
allow-macroexpand-internal-form-p
(generic function).
at-required-precondition-error
(condition).
at-required-precondition-error-slot-name
(generic reader).
at-required-runtime-error
(condition).
at-required-runtime-error-initarg
(generic reader).
at-required-runtime-error-slot-name
(generic reader).
expand-add-declaration
(function).
expand-add-declaration-using-head
(generic function).
expand-documentation
(function).
expand-documentation-using-head
(generic function).
expand-export-accessors
(function).
expand-export-accessors-using-head
(generic function).
expand-export-constructors
(function).
expand-export-constructors-using-head
(generic function).
expand-export-form
(function).
expand-export-form-using-head
(generic function).
expand-export-slots
(function).
expand-export-slots-using-head
(generic function).
expand-export-structure
(function).
expand-export-structure-using-head
(generic function).
expand-incompleted-declamation
(function).
expand-incompleted-declamation-using-head
(generic function).
expand-metaclass
(function).
expand-metaclass-using-head
(generic function).
find-name-to-be-defined
(function).
find-name-to-be-defined-using-head
(generic function).
function-definition-operator-p
(generic function).
incompleted-declamation-applicable-p
(generic function).
lambda-expression-p
(function).
operator-accept-docstring-p
(generic function).
operator-body-location
(generic function).
operator-doc-type
(generic function).
valid-proclamation-identifier-p
(generic function).
variable-definition-operator-p
(generic function).
%expand-ambiguous-declamation
(function).
%expand-at-declaration
(function).
+standard-definiton-form-list+
(constant).
+standard-function-definiton-form-list+
(constant).
+standard-operators-accept-docstring-in-body+
(constant).
+standard-optimize-quality-symbols+
(constant).
+standard-variable-definiton-form-list+
(constant).
add-declaim-to-definiton-form
(function).
add-declaration
(macro).
add-export
(function).
apply-at-macro-for-each-form
(function).
apply-at-macro-to-multiple-forms
(function).
apply-at-macro-to-special-toplevel-form
(function).
apply-incompleted-declamation
(macro).
common-lisp-package-p
(function).
complete-declaration-specifier
(function).
declaration-argument-like-p
(function).
ensure-list-with
(function).
expand-doc-macro-to-assign
(function).
expand-export-class
(function).
expand-export-class-using-head
(generic function).
expand-to-declaim-form
(function).
form
(slot).
function-name-p
(function).
ignore-name-p
(function).
insert-declaration-to-body
(function).
insert-declaration-to-nth-body
(function).
macroexpand-convention
(macro).
message
(slot).
mv-cond-let-n
(macro).
mv-cond-let2
(macro).
optimize-quality-p
(function).
parse-define-method-combination-long-form
(function).
parse-defmethod-form
(function).
parse-defstruct-form
(function).
parse-defstruct-option
(function).
pick-defclass-options
(function).
pick-defclass-slots
(function).
pick-names-of-defstruct-form
(function).
raise-required-slot-error
(function).
read-new-value
(function).
split-list-at
(function).
split-slot-specifier
(function).
cl-annot-revisit
cl-annot-revisit root package.
*at-macro-verbose*
(special variable).
at-macro-condition
(condition).
at-macro-error
(condition).
at-macro-runtime-error
(condition).
at-macro-style-warning
(condition).
at-macro-syntax-error
(condition).
declaration
(macro).
doc
(macro).
documentation
(macro).
dynamic-extent
(macro).
eval-always
(macro).
eval-when-compile
(macro).
eval-when-execute
(macro).
eval-when-load
(macro).
export
(macro).
export-accessors
(macro).
export-class
(macro).
export-constructors
(macro).
export-slots
(macro).
export-structure
(macro).
find-at-syntax-arity
(generic function).
ftype
(macro).
ignorable
(macro).
ignore
(macro).
inline
(macro).
metaclass
(macro).
notinline
(macro).
optimize
(macro).
optional
(macro).
required
(macro).
special
(macro).
type
(macro).
cl-annot-revisit-at-syntax
The at-syntax reader macro of cl-annot-revisit.
alexandria
.
common-lisp
.
editor-hints.named-readtables
.
*cl-annot-compatibility*
(special variable).
count-lambda-list-required-arguments
(function).
expand-at-read-time-p
(generic function).
resolve-at-syntax-alias
(generic function).
read-at
(function).
read-at-syntax
(function).
read-delimited-list-no-eof
(function).
read-sharp-at
(function).
Definitions are sorted by export status, category, package, and then by lexicographic order.
When true, at-macros raise style-warnings.
Just a shorthand of (declaim (declaration ...))
Just an alias of (cl-annot-revisit:documentation ...)
Insert DOCSTRING into FORMS.
Adds ‘dynamic-extent’ declaration into BODY.
If BODY is nil, it is expanded to ’(declare (dynamic-extent ...)), to embed it as a declaration using ’#.’
Just an alias of (eval-when (:compile-toplevel :load-toplevel :execute) ...)
Just an alias of (eval-when (:compile-toplevel) ...)
Just an alias of (eval-when (:execute) ...)
Just an alias of (eval-when (:load-toplevel) ...)
‘export’ the defined names in FORMS.
For ‘defclass’ and ‘define-conditions’, just an alias of nested ‘cl-annot-revisit:export-slots’, ‘cl-annot-revisit:export-accessors’ and ‘cl-annot-revisit:export’.
‘Export’ constructors of the structure will be defined in FORMS.
‘Export’ the name, constructors, copier, predicate, slot-names and accessors of the structure will be defined in FORMS.
Adds ‘ftype’ declaration or proclamation into BODY.
How this is expanded is described in ‘cl-annot-revisit:special’ docstring.
Next example is "2. Adding a proclamation" case:
(cl-annot-revisit:ftype (function (integer integer) integer)
(defun foo (x y) (+ x y)))
It is equivalent to:
(progn (declaim (ftype (function (integer integer) integer) foo))
(defun foo (x y)
(+ x y)))
Adds ‘ignorable’ declaration into BODY.
If BODY is nil, it is expanded to ’(declare (ignorable ...)), to embed it as a declaration using ’#.’
Adds ‘ignore’ declaration into BODY.
If BODY is nil, it is expanded to ’(declare (ignore ...)), to embed it as a declaration using ’#.’
Adds ‘inline’ declaration or proclamation into BODY.
How this is expanded is described in ‘cl-annot-revisit:special’ docstring.
Next example is "3. Toplevel declamation" case:
(cl-annot-revisit:inline (foo))
It is equivalent to:
(progn (declaim (inline foo))
’(declare (inline foo)))
Adds ‘notinline’ declaration or proclamation into BODY.
How this is expanded is described in ‘cl-annot-revisit:special’ docstring.
Expands to ‘optimize’ declaration or proclamation.
* If BODY is not null, it add a ‘declare’ into BODY.
(cl-annot-revisit:optimize (speed safety)
(defun foo (x) (1+ x)))
ot is equivalent to
(defun foo (x)
(declare (optimize speed safety))
(1+ x))
* If BODY is null, it is expanded to ‘declaim’ and quoted ‘declare’
form.
(cl-annot-revisit:optimize ((speed 3) (safety 0) (debug 0)))
is expanded to
(progn (declaim (optimize (speed 3) (safety 0) (debug 0))) ’(declare (optimize (speed 3) (safety 0) (debug 0))))
Refer ‘cl-annot-revisit:special’ docstring to see why both ‘declaim’ and ‘declare’ appeared.
Works like as ’@optional’ of cl-annot. This is intended to used with ’#.’
Works like as ’@required’ of cl-annot. This is intended to used with ’#.’
Adds ‘special’ declaration or proclamation into BODY.
* If the first arg is a variable name or a list of names and BODY is
not null, it adds a ‘declare’.
(cl-annot-revisit:special *x*
(defun foo (*x*) 100))
is equivalent to
(defun foo (*x*)
(declare (special *x*))
100)
* If the first arg is not names, it tries to add ‘declaim’:
(cl-annot-revisit:special
(defvar *x* 1)
(defvar *y* 2)
(defun foo (x) 100))
is equivalent to
(progn (declaim (special *x*))
(defvar *x* 1)
(declaim (special *y*))
(defvar *y* 2)
(defun foo (x) 100))
* If the first arg is a name or a list of names and BODY is null,
it is expanded to ‘declaim’ and quoted ‘declare’ form.
(cl-annot-revisit:special (*x* *y*))
is expanded to
(progn (declaim (special *x* *y*))
’(declare (special *x* *y*)))
This works as ‘declaim’ at toplevel and can be embed as declarations
using ’#.’.
(defun foo (*x*)
#.(cl-annot-revisit:special (*x*))
100)
is equivalent to
(defun foo (*x*)
(declare (special *x*))
100)
Adds ‘type’ declaration or proclamation into BODY.
How this is expanded is described in ‘cl-annot-revisit:special’ docstring.
Next example is "1. Adding a declaration" case:
(cl-annot-revisit:type integer x
(defun foo (x) 100))
It is equivalent to:
(defun foo (x)
(declare (type integer x))
100)
Counts required arguments in LAMBDA-LIST.
Insert DECL-SPECIFIER into FORM.
If expansion successed, returns (values <expansion> t).
If failed, returns (values <original-form> nil).
Insert DOCSTRING into FORM.
If insertion successed, returns (values <expansion> t).
If failed, returns (values <original-form> nil).
Called by ‘cl-annot-revisit:export’ to expand known ones. If expansion successed, returns (values <expansion> t). If failed, returns (values FORM nil).
If FORM is defining something (like ‘defun’, ‘defpackage’, etc), returns the name to be defined. If not, returns nil.
Determines whether cl-annot-revisit macros
try ‘macroexpand-1’ to forms beginning with OPERATOR.
Default is NIL, because applying ‘macroexpand-1’ change internal forms.
This may be a problem when ‘macrolet’ was used for for hooking.
at-required-precondition-error
)) ¶at-required-runtime-error
)) ¶at-required-runtime-error
)) ¶Called by ‘expand-add-declaration’ to insert DECL-SPECIFIER into FORM. If FORM can be expanded, returns the expansion. If not, returns FORM.
(eql defgeneric)
) decl-specifier form) ¶For ‘defgeneric’. Note: This does not add declarations into methods defined in this form.
(eql define-method-combination)
) decl-specifier form) ¶(eql defmethod)
) decl-specifier form) ¶(eql defsetf)
) decl-specifier form) ¶(eql declaim)
) decl-specifier form) ¶If this returns T, the macro named OPERATOR will be
‘macroexpand’ed at read-time.
This feature is for supporting ’:inline’ feature of the original cl-annot, but it is not needed conceptually because you can use ’#.’ anytime.
Called by ‘expand-documentation’ to insert DOCSTRING into FORM. If FORM can be expanded, returns its expansion. If not, returns FORM.
(eql defstruct)
) docstring form) ¶Special handling for ‘defstruct’, which define a new type only when it doesn’t have :type.
(eql function)
) docstring form) ¶Special handling for #’(lambda ..), adds DOCSTRING to the anonymous function.
(eql defstruct)
) form) ¶(eql defclass)
) form) ¶(eql define-condition)
) form) ¶Called by ‘expand-export-form’ to compute a result.
If FORM can be expanded, returns its expansion. If not, returns FORM.
General case. If FORM found by ‘find-name-to-be-defined’, returns the expansion of FORM. If not, returns FORM.
(eql defpackage)
) form) ¶A special handling for ‘defpackage’. It does not define a name as a symbol.
Called by ‘expand-add-declamation’ to expand FORM.
Returns at-syntax arity of OPERATOR. If this
returns NIL, OPERATOR is considered as not for @-syntax.
Default is 1, means OPERATOR takes one argument for ’@’ syntax.
null
) cl-annot-compatible-p) ¶symbol
) cl-annot-compatible-p) ¶cons
) cl-annot-compatible-p) ¶Called by ‘find-name-to-be-defined’ to compute a result.
(eql defstruct)
) form) ¶Special handling for ‘defstruct’. Its second form may contain some options.
list
) form) ¶Handles lambda forms. It returns nil.
symbol
) form) ¶Called if FORM-HEAD is symbol.
Returns T if OPERATOR naming a definition form and its first argument is a function name to be defined.
Returns true when DECLARATION-NAME is usable for OPERATOR.
(eql special)
) operator) ¶(eql type)
) operator) ¶(eql ftype)
) operator) ¶(eql inline)
) operator) ¶(eql notinline)
) operator) ¶Returns T if OPERATOR accepts docstring in its body.
When OPERATOR can be treated by our at-macros for declaration, returns an integer where its body locates.
See http://www.lispworks.com/documentation/HyperSpec/Body/s_declar.htm
Returns the doc-type (in ‘cl:documentation’) of OPERATOR.
This functions is for supporting ’:alias’ feature
of the original cl-annot. It was used for translating CL symbols to
CL-ANNOT symbols implicitly.
(E.g. "@export" -> ‘cl:export’ -> ‘cl-annot.std:export*’)
By default, this function does nothing; returns OPERATOR as-is.
Returns T if DECLARATION-IDENTIFIER can be used at a proclamation context.
See http://www.lispworks.com/documentation/HyperSpec/Body/f_procla.htm
Returns T if OPERATOR naming a definition form and its first argument is a variable name to be defined.
The root type of at-macro conditions.
Raised if an error occured.
at-macro-condition
.
error
.
Some macros embed this to report errors at evaluation time.
Signaled if some bad styles are found.
at-macro-condition
.
style-warning
.
Raised when a syntactic error is found.
Raised when :initform supplied for ‘cl-annot-revisit:required’ slot.
(quote nil)
:slot-name
This slot is read-only.
Raised when no value supplied for ‘cl-annot-revisit:required’ slot.
Used by at-macros of declarations for processing recursive expansion. If BODY is a form accepts declarations, adds a DECL-SPECIFIER into it. If not, wraps BODY with ‘locally’ containing DECL-SPECIFIER in it.
Executes BODY as like ‘progn’ and return the result as the first
value. As the second value, returns a boolean whether the result is
not same with ORIGINAL-FORM or not.
This macro is designed to follow the ‘macroexpand’ convention.
Multiple value variant of the famous ’COND-LET’. It takes multiple values and see N-th value as a condition.
Uses ‘mv-cond-let-n’ to see the second value.
If form is a special form treated specially at top level (‘progn’, ‘locally’, ‘macrolet’, ‘symbol-macrolet’ and ‘eval-when’), expand FORM into AT-MACRO-FORM recursively.
Our macro for declamation is ambiguous when the first value is a list of names.
Consider:
(cl-annot-revisit:inline
(defun foo nil) ; defining a function takes zero arguments and returns nil.
(defun bar () t))
I think it should expanded to next:
(progn (declaim inline foo) (defun foo nil)
(declaim inline bar) (defun bar () t))
Not like:
(defun bar
(declare (inline defun foo nil))
t)
To distinguish a macro form from a list of names, I check the form is a macro-form or not.
Do like ‘ensure-list’, except this function returns (list OBJ) when (funcall TEST OBJ) results true.
Return true when it is a function name.
Destructs ‘define-method-combination’ FORM to 5 parts;
1. its name, 2. lambda list, 3. list of method-group-specifiers, 4. options, 5. its body.
Destructs ‘defmethod’ FORM to 4 parts;
1. its name, 2. list of method-qualifiers, 3. lambda list, 4. its body.
The reader-macro function of ’@’ char.
The main reader of at-syntax. It reads the next symbol and collects arguments
by ARITY or‘find-at-syntax-arity’, and creates a new form.
If arity is :infinite, this function tries to read until next ’)’ or
EOF. This weird feature allows us to effect the whole file.
Reads until CHAR appearance or the end of stream.
The reader-macro function of ’#@’ syntax.
Return first N elements and rests of LIST.
Returns the slot name and slot options from SLOT-SPECIFIER.
Jump to: | %
A C D E F G I L M N O P R S T V |
---|
Jump to: | %
A C D E F G I L M N O P R S T V |
---|
Jump to: | *
+
C F I M S |
---|
Jump to: | *
+
C F I M S |
---|
Jump to: | A C D E F M P R S U |
---|
Jump to: | A C D E F M P R S U |
---|