(FILECREATED " 5-Sep-85 02:57:36" {ERIS}<LISPCORE>LIBRARY>CMLSTRUCT.;7 5620
changes to: (FNS DEFSTRUCT.TRANSLATE)
previous date: "15-Aug-85 17:44:32" {ERIS}<LISPCORE>LIBRARY>CMLSTRUCT.;6)
(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT CMLSTRUCTCOMS)
(RPAQQ CMLSTRUCTCOMS ((FNS DEFSTRUCT.TRANSLATE DEFAULT-STRUCTURE-PRINTER)
(PROP (USERRECORDTYPE MACRO)
DEFSTRUCT)
(P (MOVD (QUOTE RECORD)
(QUOTE DEFSTRUCT))
(ADDTOVAR CLISPRECORDTYPES DEFSTRUCT))))
(DEFINEQ
(DEFSTRUCT.TRANSLATE
[LAMBDA (TAIL) (* lmm " 5-Sep-85 02:48")
(LET* ((name&options (CAR TAIL))
(slotdescrs (CDR TAIL))
options
(doc (AND (STRINGP (CAR slotdescrs))
(pop slotdescrs)))
class
(name (COND
((LISTP name&options)
(CAR name&options))
(T name&options)))
includes initialization slotnames (conc-name (CONCAT name "-"))
(constructors)
(predicate (PACK* name "-P"))
(print-function (FUNCTION DEFAULT-STRUCTURE-PRINTER))
(copier (PACK* "COPY-" name))
named NAMED)
[if (LISTP name&options)
then (for option in (SETQ options (CDR name&options))
do (COND
[(LISTP option)
(SELECTQ (CAR option)
(:CLASS (SETQ class (CADR option))
NIL)
(:CONSTRUCTOR (push constructors (CDR option)))
(:CONC-NAME (SETQ conc-name (CADR option)))
(:INCLUDE (push includes (CADR option)))
(:COPIER (SETQ copier (CADR option)))
(:PRINT-FUNCTION (SETQ print-function (CADR option)))
(:PREDICATE (SETQ predicate (CADR option)))
(:TYPE (SETQ class (PACK* (CADR option)
"-CLASS"]
(T (SELECTQ option
(:NAMED (SETQ NAMED T))
(HELP]
(if includes
then (HELP "Can't fake includes yet"))
(BQUOTE ((, (SELECTQ class
((NIL STRUCTURE)
(QUOTE DATATYPE))
(LIST-CLASS (if NAMED
then (QUOTE TYPERECORD)
else (QUOTE RECORD)))
(HELP))
, name , [SETQ slotnames (for x in slotdescrs
collect (if (NLISTP x)
then x
else (if (CDDR x)
then (HELP))
(CAR x]
,@ initialization)
,@
[AND predicate (BQUOTE ((DEFUN , predicate (obj)
(type? , name obj]
,@
[AND copier (BQUOTE ((DEFUN , copier (obj)
(create (\, name) using obj]
,@
[AND print-function (BQUOTE ((DEFPRINT (QUOTE (\, name))
(FUNCTION (LAMBDA (x stream)
(COND
(stream
(APPLY* (FUNCTION (\,
print-function))
x stream 0)
(QUOTE (""]
,@
[for constructor in [OR constructors (LIST (LIST (PACK* "MAKE-" name]
collect (IF (CDR constructor)
THEN [BQUOTE (DEFUN , (CAR constructor)
,
(CADR constructor)
(create , name ,@ (for x in slotnames
join (LIST x (QUOTE ←)
x]
ELSE (BQUOTE (DEFUN , (CAR constructor)
[&KEY ,@ (for x in slotdescrs
collect (if (NLISTP x)
then x
else (LIST (CAR x)
(CADR x]
(create , name ,@ (for x in slotnames
join (LIST x (QUOTE ←)
x]
,@
(for slot in slotnames bind conc setfconc
join (BQUOTE ((DEFUN (\, (SETQ conc (PACK* conc-name slot)))
(object)
(fetch ((\, name)
(\, slot))
object))
(DECLARE: EVAL@COMPILE [PUTPROP (QUOTE (\, conc))
(QUOTE DMACRO)
(QUOTE ((obj)
(fetch ((\, name)
(\, slot))
obj]
[PUTPROP [QUOTE (\, (SETQ setfconc (PACK* "SETF-" conc]
(QUOTE DMACRO)
(QUOTE ((obj value)
(replace ((\, name)
(\, slot))
obj value]
(DEFSETF (\, conc)
(\, setfconc])
(DEFAULT-STRUCTURE-PRINTER
(CL:LAMBDA (STRUC STREAM LEVEL) (* raf "15-Aug-85 17:23")
(LET ((TYPE (TYPENAME STRUC)))
(PRIN1 \CML.READPREFIX)
(PRIN1 (QUOTE S))
(PRIN1 "(")
(PRIN1 TYPE)
(for FIELD in (RECORDFIELDNAMES TYPE) as DESCRIPTOR in (GETDESCRIPTORS TYPE)
do (PRIN1 " ")
(PRIN1 FIELD)
(PRIN1 " ")
(PRIN1 (FETCHFIELD DESCRIPTOR STRUC)))
(PRIN1 ")"))))
)
(PUTPROPS DEFSTRUCT USERRECORDTYPE [LAMBDA (L)
(LET [(DE (DEFSTRUCT.TRANSLATE (CDR L]
(RESETVARS ((FILEPKGFLG))
(MAPC (CDR DE)
(QUOTE EVAL)))
(CAR DE])
(PUTPROPS DEFSTRUCT MACRO (DEFMACRO (&REST tail)
(DEFSTRUCT.TRANSLATE tail)))
(MOVD (QUOTE RECORD)
(QUOTE DEFSTRUCT))
(ADDTOVAR CLISPRECORDTYPES DEFSTRUCT)
(PUTPROPS CMLSTRUCT COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
(FILEMAP (NIL (552 5161 (DEFSTRUCT.TRANSLATE 562 . 4603) (DEFAULT-STRUCTURE-PRINTER 4605 . 5159)))))
STOP