(FILECREATED " 7-Feb-86 18:49:21" {ERIS}<LISPCORE>LIBRARY>CMLTYPES.;21 18221  

      changes to:  (TYPES ARRAY)

      previous date: " 3-Dec-85 16:24:06" {ERIS}<LISPCORE>LIBRARY>CMLTYPES.;20)


(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT CMLTYPESCOMS)

(RPAQQ CMLTYPESCOMS ((MACROS COERCE DEFTYPE NILL TRUE TYPEP CHECK-TYPE THE)
	(PROP PROPTYPE DEFTYPE TYPE-DOCUMENTATION TYPE-PREDICATE)
	(FNS ENUMERATED-TYPES-OF TYPE-OF TYPEP TYPES.GETDEF \COERCE.FUNCTION \RANGE.TYPE 
	     \TYPEP.EXPAND.MACRO \TYPEP.PRED \CHECK-TYPE-FAIL)
	(P (MOVD (QUOTE STRINGP)
		 (QUOTE SIMPLE-STRING-P))
	   (MOVD (QUOTE TYPENAMEP)
		 (QUOTE STRUCTURE-TYPEP))
	   (ADDTOVAR SYSPROPS DEFTYPE TYPE-DOCUMENTATION))
	(FILEPKGCOMS TYPES)
	(TYPES ATOM BIGNUM BIT CHARACTER CONS DOUBLE-FLOAT FIXNUM FLOAT HASH-TABLE INTEGER KEYWORD 
	       LIST LONG-FLOAT MEMBER MOD NULL NUMBER SHORT-FLOAT SIGNED-BYTE STANDARD-CHAR 
	       SINGLE-FLOAT SYMBOL UNSIGNED-BYTE)
	(TYPES ARRAY VECTOR SIMPLE-STRING STRING SIMPLE-ARRAY SIMPLE-VECTOR BIT-VECTOR 
	       SIMPLE-BIT-VECTOR)
	(PROP CMLTYPE ARRAYP CMLARRAY FIXP FLOATP LISTP LITATOM SMALLP STRINGP HARRAYP)
	(PROP CMLSUBTYPEDESCRIMINATOR SYMBOL)
	(PROP TYPE-COERCE CHARACTER FLOAT SIMPLE-STRING)
	(VARS (\COERCEMACROHASH (HASHARRAY 30)))
	(MACROS TYPECASE)))
(DECLARE: EVAL@COMPILE 
[PUTPROPS COERCE DMACRO (DEFMACRO (OBJ TYPESPEC)
				  (LET* [(CE (CONSTANTEXPRESSIONP TYPESPEC))
					 (CF (AND CE (\COERCE.FUNCTION (CAR CE]
					(if CF then (LIST CF OBJ)
					    else
					    (QUOTE IGNOREMACRO]
[DEFMACRO DEFTYPE (NAME LAMBDA-LIST &REST REST)
	  (* doesn't return right value)
	  (LET [(DOC (if (STRINGP (CAR REST))
			 then
			 (pop REST]
	       (BQUOTE (PUTPROPS (\, NAME)
				 DEFTYPE
				 (MACRO (\, LAMBDA-LIST)
					(\, (MKPROGN REST)))
				 (\,@ (AND DOC (BQUOTE ((\, NAME)
							TYPE-DOCUMENTATION
							(\, DOC]
[PUTPROPS NILL DMACRO (DEFMACRO BODY (BQUOTE (PROG1 NIL (\,@ BODY]
[PUTPROPS TRUE DMACRO (DEFMACRO BODY (BQUOTE (PROG1 T (\,@ BODY]
[PUTPROPS TYPEP DMACRO (DEFMACRO (OBJ TYPESPEC)
				 (LET ((CE (CONSTANTEXPRESSIONP TYPESPEC)))
				      (if CE then (BQUOTE (AND (, (\TYPEP.PRED (CAR CE))
								  , OBJ)
							       T))
					  else
					  (QUOTE IGNOREMACRO]
[DEFMACRO CHECK-TYPE (PLACE TYPESPEC &OPTIONAL STRING)
	  (BQUOTE (PROG NIL TOP (if (TYPEP (\, PLACE)
					   (QUOTE (\, TYPESPEC)))
				    then
				    (RETURN NIL))
			[SETF (\, PLACE)
			      (\CHECK-TYPE-FAIL "place" (QUOTE (\, PLACE))
						(\, (OR STRING (BQUOTE (QUOTE (\, TYPESPEC]
			(GO TOP]
[PUTPROPS THE MACRO ((TYPESPEC FORM)
	   (PROG ((VAL FORM))
		 RETRY
		 (RETURN (CL:IF (TYPEP VAL (QUOTE TYPESPEC))
				VAL
				(PROGN (SETQ VAL (\CHECK-TYPE-FAIL "value" VAL (QUOTE TYPESPEC)))
				       (GO RETRY]
)

(PUTPROPS DEFTYPE PROPTYPE TYPES)

(PUTPROPS TYPE-DOCUMENTATION PROPTYPE TYPES)

(PUTPROPS TYPE-PREDICATE PROPTYPE TYPES)
(DEFINEQ

(ENUMERATED-TYPES-OF
  [LAMBDA NIL                                                (* edited: "26-Jul-85 20:16")
    (for X in (DATATYPES) collect (OR (GETPROP X (QUOTE CMLTYPE))
						X])

(TYPE-OF
  [LAMBDA (X)                                                (* raf "17-Oct-85 17:29")
    (LET ((TYPE (TYPENAME X)))
         (SETQ TYPE (OR (GETPROP TYPE (QUOTE CMLTYPE))
			    TYPE))
         (OR (LET (D)
		    (AND (SETQ D (GETPROP TYPE (QUOTE CMLSUBTYPEDESCRIMINATOR)))
			   (FUNCALL D X)))
	       TYPE])

(TYPEP
  [LAMBDA (OBJECT TYPE)                                      (* lmm " 1-Aug-85 12:07")
    (AND (FUNCALL (\TYPEP.PRED TYPE)
		      OBJECT)
	   T])

(TYPES.GETDEF
  [LAMBDA (NAME)                                             (* lmm "18-Jul-85 21:03")
    (PROG [(PROP (GETPROP NAME (QUOTE DEFTYPE)))
	     (DOC (GETPROP NAME (QUOTE TYPE-DOCUMENTATION)))
	     (TYPE-PREDICATE (GETPROP NAME (QUOTE TYPE-PREDICATE]
	    (RETURN (MKPROGN
			(APPEND (AND (OR PROP DOC)
					 (SELECTQ (CAR PROP)
						    [MACRO (BQUOTE
							     ((DEFTYPE (\, NAME)
								       (\, (CAR (CDR PROP)))
								       (\,@ (AND DOC (LIST DOC)))
								       (\, (CADR (CDR PROP]
						    (HELP)))
				  (AND TYPE-PREDICATE (BQUOTE ((PUTPROPS (\, NAME)
									       TYPE-PREDICATE
									       (\, TYPE-PREDICATE])

(\COERCE.FUNCTION
  [LAMBDA (TYPE)                                             (* lmm "31-Jul-85 13:28")
    (if (LISTP TYPE)
	then (OR (GETHASH TYPE \COERCEMACROHASH)
		     (PUTHASH TYPE
				[SELECTQ (CAR TYPE)
					   (SATISFIES (SHOULDNT))
					   [AND (if (NULL (CDDR TYPE))
						      then (\COERCE.FUNCTION (CADR TYPE))
						    else
						     (BQUOTE (LAMBDA (X)
								 ([\, (\COERCE.FUNCTION
									(CONS (QUOTE AND)
										(CDDR TYPE]
								  ((\, (\COERCE.FUNCTION
									 (CADR TYPE)))
								   X]
					   ((OR NOT)
					     (SHOULDNT))
					   (LET [(PROP (GETPROP (CAR TYPE)
								  (QUOTE DEFTYPE]
					        (SELECTQ (CAR PROP)
							   (MACRO (\COERCE.FUNCTION (
									      \TYPEP.EXPAND.MACRO
											PROP TYPE)))
							   (HELP]
				\COERCEMACROHASH))
      else (SELECTQ TYPE
			(T (QUOTE IDENTITY))
			[NIL (QUOTE (LAMBDA (X)
					      (ERROR "can't coerce" X]
			(OR (GETPROP TYPE (QUOTE TYPE-COERCE))
			      (PROGN (PRINTOUT T "Warning: No COERCE function for " TYPE T)
				       NIL])

(\RANGE.TYPE
  [LAMBDA (BASETYPE LOW HIGH RANGELIST)                      (* lmm " 1-Aug-85 12:02")
    (if (NULL LOW)
	then (SETQ LOW (QUOTE *)))
    (OR HIGH (SETQ HIGH (QUOTE *)))
    (if (AND (EQ LOW (QUOTE *))
		 (EQ HIGH (QUOTE *)))
	then BASETYPE
      else
       (for X in RANGELIST when (AND (EQUAL LOW (CAR X))
					     (EQUAL HIGH (CADR X)))
	  do (RETURN (CADDR X))
	  finally
	   (RETURN
	     (BQUOTE (AND , BASETYPE
			      (SATISFIES
				(LAMBDA (X)
				  (AND [\,@ (if (NEQ LOW (QUOTE *))
						  then (BQUOTE (((\, (if (LISTP LOW)
									     then (SETQ LOW
										      (CAR LOW))
										    (QUOTE <)
									   else (QUOTE <=)))
								     (\, LOW)
								     X]
					 (\,@ (if (NEQ HIGH (QUOTE *))
						  then (BQUOTE (((\, (if (LISTP HIGH)
									     then (SETQ HIGH
										      (CAR HIGH))
										    (QUOTE <)
									   else (QUOTE <=)))
								     X
								     (\, HIGH])

(\TYPEP.EXPAND.MACRO
  [LAMBDA (PROP TYPE)                                        (* lmm "18-Jul-85 20:38")
    (DEFMACRO.EXPAND (CADR PROP)
		       TYPE
		       (CADDR PROP)
		       (QUOTE *])

(\TYPEP.PRED
  [LAMBDA (TYPE)                                             (* lmm " 1-Aug-85 11:52")
    (if (LISTP TYPE)
	then (OR (GETHASH TYPE CLISPARRAY)
		     (PUTHASH TYPE [SELECTQ
				  (CAR TYPE)
				  (SATISFIES (CADR TYPE))
				  [DATATYPE (BQUOTE (OPENLAMBDA
							  (X)
							  (TYPENAMEP X (QUOTE
									 (\, (CADR TYPE]
				  [(AND OR NOT)
				    (BQUOTE (OPENLAMBDA (X)
							  (, (CAR TYPE)
							     (\,@ (for PRED in (CDR TYPE)
								     collect (LIST (\TYPEP.PRED
											 PRED)
										       (QUOTE
											 X]
				  (LET [(PROP (GETPROP (CAR TYPE)
							 (QUOTE DEFTYPE]
				       (SELECTQ (CAR PROP)
						  (MACRO (\TYPEP.PRED (\TYPEP.EXPAND.MACRO PROP 
											     TYPE)))
						  (HELP "undefined type used in TYPEP"]
				CLISPARRAY))
      else (SELECTQ TYPE
			(T (QUOTE TRUE))
			(NIL (QUOTE NILL))
			(LET [(PROP (GETPROP TYPE (QUOTE DEFTYPE]
			     (SELECTQ (CAR PROP)
					[MACRO (\TYPEP.PRED (\TYPEP.EXPAND.MACRO PROP
										     (LIST TYPE]
					(PROGN (PRINTOUT T "Warning: type " TYPE 
							   " assumed to be datatype"
							   T)
						 [/PUTPROP TYPE (QUOTE DEFTYPE)
							     (BQUOTE (MACRO NIL
									      (QUOTE (DATATYPE
											 , TYPE]
						 (\TYPEP.PRED TYPE])

(\CHECK-TYPE-FAIL
  (CL:LAMBDA (NAME OBJECT STRINGORTYPESPEC)                  (* raf "17-Oct-85 17:03")
    (ERROR (CONCAT "The " NAME " " OBJECT " was not " (CL:IF (STRINGP STRINGORTYPESPEC)
								 STRINGORTYPESPEC
								 (CONCAT "a/an " STRINGORTYPESPEC)))
	     "Type 'RETURN X' where X is a new value")))
)
(MOVD (QUOTE STRINGP)
      (QUOTE SIMPLE-STRING-P))
(MOVD (QUOTE TYPENAMEP)
      (QUOTE STRUCTURE-TYPEP))
(ADDTOVAR SYSPROPS DEFTYPE TYPE-DOCUMENTATION)
(PUTDEF (QUOTE TYPES) (QUOTE FILEPKGCOMS) (QUOTE ((TYPE DESCRIPTION "type specifiers" GETDEF 
							TYPES.GETDEF))))
(PUTDEF (QUOTE ATOM) (QUOTE TYPES) (QUOTE (PUTPROPS ATOM TYPE-PREDICATE NLISTP)))
(PUTDEF (QUOTE BIGNUM) (QUOTE TYPES) [QUOTE (DEFTYPE BIGNUM NIL (QUOTE (NOT (DATATYPE SMALLP])
(PUTDEF (QUOTE BIT) (QUOTE TYPES) [QUOTE (DEFTYPE BIT NIL (QUOTE (MOD 2])
(PUTDEF (QUOTE CHARACTER) (QUOTE TYPES) [QUOTE (DEFTYPE CHARACTER NIL (QUOTE (SATISFIES CHARACTERP])
(PUTDEF (QUOTE CONS) (QUOTE TYPES) [QUOTE (DEFTYPE CONS NIL (QUOTE (DATATYPE LISTP])
(PUTDEF (QUOTE DOUBLE-FLOAT) (QUOTE TYPES) (QUOTE (DEFTYPE DOUBLE-FLOAT (&REST X)
							   (CONS (QUOTE FLOAT)
								 X))))
(PUTDEF (QUOTE FIXNUM) (QUOTE TYPES) [QUOTE (DEFTYPE FIXNUM NIL (QUOTE (DATATYPE SMALLP])
(PUTDEF (QUOTE FLOAT) (QUOTE TYPES) (QUOTE (DEFTYPE FLOAT (&OPTIONAL LOW HIGH)
						    (\RANGE.TYPE (QUOTE (DATATYPE FLOATP))
								 LOW HIGH))))
(PUTDEF (QUOTE HASH-TABLE) (QUOTE TYPES) [QUOTE (DEFTYPE HASH-TABLE NIL (QUOTE (DATATYPE HARRAYP])
(PUTDEF (QUOTE INTEGER) (QUOTE TYPES) [QUOTE (DEFTYPE INTEGER (&OPTIONAL LOW HIGH)
						      (\RANGE.TYPE (QUOTE (SATISFIES FIXP))
								   LOW HIGH
								   (QUOTE ((-65536 65535 FIXNUM)
									   (0 1 (MEMBER 0 1])
(PUTDEF (QUOTE KEYWORD) (QUOTE TYPES) [QUOTE (DEFTYPE KEYWORD NIL (QUOTE (SATISFIES \KEYWORDP])
(PUTDEF (QUOTE LIST) (QUOTE TYPES) [QUOTE (DEFTYPE LIST NIL (QUOTE (OR CONS NULL])
(PUTDEF (QUOTE LONG-FLOAT) (QUOTE TYPES) (QUOTE (DEFTYPE LONG-FLOAT (&REST X)
							 (CONS (QUOTE FLOAT)
							       X))))
(PUTDEF (QUOTE MEMBER) (QUOTE TYPES) [QUOTE (DEFTYPE MEMBER (&REST VALUES)
						     (BQUOTE (SATISFIES (LAMBDA
									  (X)
									  (CL:MEMBER
									    X
									    (QUOTE (\, VALUES])
(PUTDEF (QUOTE MOD) (QUOTE TYPES) [QUOTE (DEFTYPE MOD (N)
						  (BQUOTE (INTEGER 0 (\, (SUB1 N])
(PUTDEF (QUOTE NULL) (QUOTE TYPES) [QUOTE (DEFTYPE NULL NIL (QUOTE (MEMBER NIL])
(PUTDEF (QUOTE NUMBER) (QUOTE TYPES) [QUOTE (DEFTYPE NUMBER NIL (QUOTE (SATISFIES NUMBERP])
(PUTDEF (QUOTE SHORT-FLOAT) (QUOTE TYPES) (QUOTE (DEFTYPE SHORT-FLOAT (&REST REST)
							  (CONS (QUOTE FLOAT)
								REST))))
(PUTDEF (QUOTE SIGNED-BYTE) (QUOTE TYPES) [QUOTE
					    (DEFTYPE
					      SIGNED-BYTE
					      (&OPTIONAL S)
					      (if (EQ S (QUOTE *))
						  then
						  (QUOTE INTEGER)
						  else
						  (BQUOTE (INTEGER
							    [\, (MINUS (SETQ S (EXPT 2 (SUB1 S]
							    (\, (SUB1 S])
(PUTDEF (QUOTE STANDARD-CHAR) (QUOTE TYPES) [QUOTE (DEFTYPE STANDARD-CHAR NIL (QUOTE (SATISFIES
										       
										  STANDARD-CHAR-P])
(PUTDEF (QUOTE SINGLE-FLOAT) (QUOTE TYPES) (QUOTE (DEFTYPE SINGLE-FLOAT (&REST REST)
							   (CONS (QUOTE FLOAT)
								 REST))))
(PUTDEF (QUOTE SYMBOL) (QUOTE TYPES) [QUOTE (DEFTYPE SYMBOL NIL (QUOTE (DATATYPE LITATOM])
(PUTDEF (QUOTE UNSIGNED-BYTE) (QUOTE TYPES) [QUOTE (DEFTYPE
						     UNSIGNED-BYTE
						     (&OPTIONAL S)
						     (if (EQ S (QUOTE *))
							 then
							 (QUOTE (INTEGER 0))
							 else
							 (BQUOTE (INTEGER 0 ((\, (EXPT 2 S])
(PUTDEF (QUOTE ARRAY) (QUOTE TYPES) [QUOTE
				      (DEFTYPE
					ARRAY
					(&OPTIONAL (ELEMENT-TYPE (QUOTE *))
						   (DIMENSIONS (QUOTE *)))
					(PROGN
					  [if (AND (NLISTP DIMENSIONS)
						   (NEQ DIMENSIONS (QUOTE *)))
					      then
					      (SETQ DIMENSIONS (to DIMENSIONS collect (QUOTE *]
					  (if
					    (AND (EQ ELEMENT-TYPE (QUOTE STRING-CHAR))
						 (ILESSP (LENGTH DIMENSIONS)
							 2))
					    then
					    [if [MEMBER DIMENSIONS (QUOTE (* (*]
						then
						(QUOTE (DATATYPE STRINGP))
						else
						(BQUOTE (AND (DATATYPE STRINGP)
							     (SATISFIES (LAMBDA (X)
										(= (NCHARS X)
										   ,
										   (CAR DIMENSIONS]
					    elseif
					    (NEQ ELEMENT-TYPE (QUOTE *))
					    then
					    [BQUOTE (AND (ARRAY * (\, DIMENSIONS))
							 (SATISFIES (LAMBDA
								      (X)
								      (EQUAL (ARRAY-ELEMENT-TYPE
									       X)
									     (QUOTE (\, ELEMENT-TYPE]
					    elseif
					    (AND (EQ ELEMENT-TYPE (QUOTE *))
						 (EQ DIMENSIONS (QUOTE *)))
					    then
					    (QUOTE (OR (DATATYPE ARRAY)
						       (DATATYPE STRINGP)
						       (DATATYPE ARRAYP)
						       (DATATYPE BITMAP)))
					    elseif
					    (EQUAL DIMENSIONS (QUOTE (*)))
					    then
					    (if (EQ ELEMENT-TYPE (QUOTE STRING-CHAR))
						then
						(QUOTE STRING)
						else
						(QUOTE VECTOR))
					    elseif
					    (EQ ELEMENT-TYPE (QUOTE *))
					    then
					    [BQUOTE
					      (SATISFIES
						(LAMBDA
						  (X)
						  (AND
						    (CL:ARRAYP X)
						    ,
						    (if [OR (NLISTP DIMENSIONS)
							    (if [EVERY DIMENSIONS
								       (FUNCTION
									 (LAMBDA (X)
										 (EQ X (QUOTE *]
								then
								(SETQ DIMENSIONS (LENGTH DIMENSIONS]
							then
							(BQUOTE (EQ (ARRAY-RANK X)
								    , DIMENSIONS))
							else
							(BQUOTE (\ARRAY.DIMENSIONS.MATCH
								  (ARRAY-DIMENSIONS X)
								  (QUOTE , DIMENSIONS]
					    else
					    (ERROR "Bad (final) array type designator"
						   (BQUOTE (ARRAY , ELEMENT-TYPE , DIMENSIONS])
(PUTDEF (QUOTE VECTOR) (QUOTE TYPES) [QUOTE
				       (DEFTYPE
					 VECTOR
					 (&OPTIONAL (ELEMENT-TYPE (QUOTE *))
						    (SIZE (QUOTE *)))
					 (if (EQ ELEMENT-TYPE (QUOTE *))
					     then
					     [if (EQ SIZE (QUOTE *))
						 then
						 (BQUOTE (SATISFIES VECTORP))
						 else
						 (BQUOTE (AND (SATISFIES VECTORP)
							      (SATISFIES (LAMBDA (V)
										 (IEQP (
ARRAY-DIMENSION V 0)
										       , SIZE]
					     else
					     (BQUOTE (ARRAY , ELEMENT-TYPE (*])
(PUTDEF (QUOTE SIMPLE-STRING) (QUOTE TYPES) [QUOTE (DEFTYPE SIMPLE-STRING NIL (QUOTE (SATISFIES
										       STRINGP])
(PUTDEF (QUOTE STRING) (QUOTE TYPES) [QUOTE (DEFTYPE
					      STRING
					      (&OPTIONAL SIZE)
					      (if (OR (NULL SIZE)
						      (EQ SIZE (QUOTE *)))
						  then
						  (QUOTE (SATISFIES STRINGP))
						  else
						  (BQUOTE (SATISFIES (LAMBDA
								       (X)
								       (AND (STRINGP X)
									    (EQL (NCHARS X)
										 (\, SIZE])
(PUTDEF (QUOTE SIMPLE-ARRAY) (QUOTE TYPES) [QUOTE (DEFTYPE SIMPLE-ARRAY (&OPTIONAL
							     (ELEMENT-TYPE (QUOTE *))
							     (DIMSPEC (QUOTE *)))
							   (if (EQ ELEMENT-TYPE (QUOTE *))
							       then
							       [if (EQ DIMSPEC (QUOTE *))
								   then
								   (BQUOTE (SATISFIES SIMPLE-ARRAY-P))
								   else
								   (BQUOTE (AND (SATISFIES 
										   SIMPLE-ARRAY-P)
										(ARRAY * , DIMSPEC]
							       else
							       (BQUOTE (AND (SATISFIES SIMPLE-ARRAY-P)
									    (ARRAY , ELEMENT-TYPE , 
										   DIMSPEC])
(PUTDEF (QUOTE SIMPLE-VECTOR) (QUOTE TYPES) [QUOTE
					      (DEFTYPE
						SIMPLE-VECTOR
						(&OPTIONAL (SIZE (QUOTE *)))
						(if (EQ SIZE (QUOTE *))
						    then
						    (BQUOTE (SATISFIES SIMPLE-VECTOR-P))
						    else
						    (BQUOTE (AND (SATISFIES SIMPLE-VECTOR-P)
								 (SATISFIES (LAMBDA
									      (V)
									      (IEQP (ARRAY-DIMENSION
										      V 0)
										    , SIZE])
(PUTDEF (QUOTE BIT-VECTOR) (QUOTE TYPES) [QUOTE
					   (DEFTYPE
					     BIT-VECTOR
					     (&OPTIONAL (SIZE (QUOTE *)))
					     (if (EQ SIZE (QUOTE *))
						 then
						 (BQUOTE (SATISFIES BIT-VECTOR-P))
						 else
						 (BQUOTE (AND (SATISFIES BIT-VECTOR-P)
							      (SATISFIES (LAMBDA (V)
										 (IEQP (
ARRAY-DIMENSION V 0)
										       , SIZE])
(PUTDEF (QUOTE SIMPLE-BIT-VECTOR) (QUOTE TYPES) [QUOTE
						  (DEFTYPE
						    SIMPLE-BIT-VECTOR
						    (&OPTIONAL (SIZE (QUOTE *)))
						    (if (EQ SIZE (QUOTE *))
							then
							(BQUOTE (SATISFIES SIMPLE-BIT-VECTOR-P))
							else
							(BQUOTE (AND (SATISFIES SIMPLE-BIT-VECTOR-P)
								     (SATISFIES
								       (LAMBDA (V)
									       (IEQP (ARRAY-DIMENSION
										       V 0)
										     , SIZE])

(PUTPROPS ARRAYP CMLTYPE ARRAY)

(PUTPROPS CMLARRAY CMLTYPE ARRAY)

(PUTPROPS FIXP CMLTYPE BIGNUM)

(PUTPROPS FLOATP CMLTYPE SINGLE-FLOAT)

(PUTPROPS LISTP CMLTYPE CONS)

(PUTPROPS LITATOM CMLTYPE SYMBOL)

(PUTPROPS SMALLP CMLTYPE FIXNUM)

(PUTPROPS STRINGP CMLTYPE SIMPLE-STRING)

(PUTPROPS HARRAYP CMLTYPE HASH-ARRAY)

(PUTPROPS SYMBOL CMLSUBTYPEDESCRIMINATOR [LAMBDA (X)
						   (CL:IF (\KEYWORDP X)
							  (QUOTE KEYWORD)
							  (QUOTE SYMBOL])

(PUTPROPS CHARACTER TYPE-COERCE CL:CHARACTER)

(PUTPROPS FLOAT TYPE-COERCE FLOAT)

(PUTPROPS SIMPLE-STRING TYPE-COERCE MKSTRING)

(RPAQ \COERCEMACROHASH (HASHARRAY 30))
(DECLARE: EVAL@COMPILE 
[DEFMACRO TYPECASE (KEYFORM &REST FORMS)
	  "Type dispatch, order is important, more specific types should appear first"
	  (BQUOTE (LET (($$TYPE-VALUE , KEYFORM))
		       (COND ., (CL:MAPCAR [FUNCTION (LAMBDA
						       (FORM)
						       (LET ((TYPE (CL:IF (EQ (CAR FORM)
									      (BQUOTE OTHERWISE))
									  T
									  (CAR FORM)))
							     (FORM (CDR FORM)))
							    (BQUOTE ((TYPEP $$TYPE-VALUE
									    (QUOTE , TYPE))
								     ., FORM]
					   FORMS]
)
(PUTPROPS CMLTYPES COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2920 8924 (ENUMERATED-TYPES-OF 2930 . 3153) (TYPE-OF 3155 . 3528) (TYPEP 3530 . 3704) (
TYPES.GETDEF 3706 . 4468) (\COERCE.FUNCTION 4470 . 5700) (\RANGE.TYPE 5702 . 6896) (
\TYPEP.EXPAND.MACRO 6898 . 7122) (\TYPEP.PRED 7124 . 8583) (\CHECK-TYPE-FAIL 8585 . 8922)))))
STOP