@node Type, GCL Specific, Doc, Top
@chapter Type

@defun COERCE (x type)
Package:LISP

Coerces X to an object of the type TYPE.


@end defun

@defun TYPE-OF (x)
Package:LISP

Returns the type of X.


@end defun

@defun CONSTANTP (symbol)
Package:LISP

Returns T if the variable named by SYMBOL is a constant; NIL otherwise.


@end defun

@defun TYPEP (x type)
Package:LISP

Returns T if X is of the type TYPE; NIL otherwise.


@end defun

@defun COMMONP (x)
Package:LISP

Returns T if X is a Common Lisp object; NIL otherwise.


@end defun

@defun SUBTYPEP (type1 type2)
Package:LISP

Returns T if TYPE1 is a subtype of TYPE2; NIL otherwise.  If it could not
determine, then returns NIL as the second value.  Otherwise, the second value
is T.


@end defun

@deffn {Macro} CHECK-TYPE 
Package:LISP

Syntax:
@example
(check-type place typespec [string])
@end example

Signals an error, if the contents of PLACE are not of the specified type.


@end deffn

@deffn {Macro} ASSERT 
Package:LISP

Syntax:
@example
(assert test-form [(@{place@}*) [string @{arg@}*]])
@end example

Signals an error if the value of TEST-FORM is NIL.  STRING is an format string
used as the error message.  ARGs are arguments to the format string.


@end deffn

@deffn {Macro} DEFTYPE 
Package:LISP

Syntax:
@example
(deftype name lambda-list @{decl | doc@}* @{form@}*)
@end example

Defines a new type-specifier abbreviation in terms of an 'expansion' function
	(lambda lambda-list1 @{decl@}* @{form@}*)
where lambda-list1 is identical to LAMBDA-LIST except that all optional
parameters with no default value specified in LAMBDA-LIST defaults to the
symbol '*', but not to NIL.  When the type system of GCL encounters a
type specifier (NAME arg1 ... argn), it calls the expansion function with
the arguments arg1 ... argn, and uses the returned value instead of the
original type specifier.  When the symbol NAME is used as a type specifier,
the expansion function is called with no argument.  The doc-string DOC, if
supplied, is saved as the TYPE doc of NAME, and is retrieved by
(documentation 'NAME 'type).


@end deffn

@defvr {Declaration} DYNAMIC-EXTENT 
Package:LISP
Declaration to allow locals to be cons'd on the C stack.
For example
(defun foo (&rest l) (declare (:dynamic-extent l)) ...)
will cause l to be a list formed on the C stack of the foo function
frame.
Of course passing L out as a value of foo will cause havoc.
(setq x (make-list n))
(setq x (cons a b))
(setq x (list a  b c ..))
also are handled on the stack, for dynamic-extent x.



@end defvr
