home *** CD-ROM | disk | FTP | other *** search
- ; -*- Mode: Lisp; Syntax: Common-Lisp; Package: SCHEME-TRANSLATOR; -*-
-
- ; This file was generated by Pseudoscheme 2.8a
- ; running in Lucid Common Lisp 4.0.1
- ; from file /amd/night/b/jar/pseudo/p-record.scm
-
- (SCHI:BEGIN-TRANSLATED-FILE)
- (DEFSTRUCT
- (RECORD-TYPE-DESCRIPTOR (:CONSTRUCTOR MAKE-RTD)
- (:PRINT-FUNCTION PRINT-RTD)
- (:CONC-NAME "RTD-"))
- IDENTIFICATION
- UNIQUE-ID
- FIELD-NAMES
- CONSTRUCTOR-FUNCTION
- PREDICATE-FUNCTION
- ACCESSOR-FUNCTIONS)
- (LOCALLY (DECLARE (SPECIAL *RECORD-TYPE-UNIQUE-ID*))
- (SETQ *RECORD-TYPE-UNIQUE-ID* 0))
- (SCHI:SET-FORWARDING-FUNCTION '*RECORD-TYPE-UNIQUE-ID*
- 'SCHEME::*RECORD-TYPE-UNIQUE-ID*)
- (LOCALLY (DECLARE (SPECIAL PACKAGE-FOR-RECORD-FUNCTIONS))
- (SETQ PACKAGE-FOR-RECORD-FUNCTIONS (MAKE-PACKAGE
- (IF (FIND-PACKAGE ".RECORD")
- (LABELS
- ((.LOOP (N)
- (LET ((NAME
- (STRING-APPEND
- ".RECORD-"
- (NUMBER->STRING
- N))))
- (IF (FIND-PACKAGE
- NAME)
- (.LOOP
- (+ N 1))
- NAME))))
- (.LOOP 0))
- ".RECORD")
- :USE
- 'NIL)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'PACKAGE-FOR-RECORD-FUNCTIONS
- 'SCHEME::PACKAGE-FOR-RECORD-FUNCTIONS)
- (DEFUN REALLY-MAKE-RECORD-TYPE
- (TYPE-ID FIELD-NAMES)
- (DECLARE
- (SPECIAL *RECORD-TYPE-UNIQUE-ID*
- PRINT-RECORD
- PACKAGE-FOR-RECORD-FUNCTIONS
- STRING-APPEND))
- (FLET
- ((CONC (&REST THINGS)
- #+:LISPM
- (SETQ THINGS (COPY-LIST THINGS))
- (INTERN
- (APPLY STRING-APPEND
- (MAPCAR
- #'(LAMBDA (THING)
- (IF (SIMPLE-STRING-P THING) THING
- (IF (NUMBERP THING) (NUMBER->STRING THING)
- (IF (SCHI:SCHEME-SYMBOL-P THING)
- (SYMBOL-NAME THING) "?"))))
- THINGS))
- PACKAGE-FOR-RECORD-FUNCTIONS)))
- (LET ((ID-SYMBOL (CONC TYPE-ID "#" *RECORD-TYPE-UNIQUE-ID*)))
- (LET ((CONSTRUCTOR-FUNCTION (CONC 'SCHEME::MAKE-
- ID-SYMBOL)))
- (LET ((PREDICATE-FUNCTION (CONC ID-SYMBOL 'SCHEME::?)))
- (LET ((ACCESSOR-FUNCTIONS
- (MAPCAR #'(LAMBDA (F)
- (CONC ID-SYMBOL 'SCHEME::- F))
- FIELD-NAMES)))
- (LET ((RTD
- (MAKE-RTD :IDENTIFICATION
- TYPE-ID
- :UNIQUE-ID
- *RECORD-TYPE-UNIQUE-ID*
- :FIELD-NAMES
- FIELD-NAMES
- :CONSTRUCTOR-FUNCTION
- CONSTRUCTOR-FUNCTION
- :PREDICATE-FUNCTION
- PREDICATE-FUNCTION
- :ACCESSOR-FUNCTIONS
- ACCESSOR-FUNCTIONS)))
- (SETF (GET ID-SYMBOL 'SCHEME::RTD)
- RTD)
- (LET ((*PACKAGE* PACKAGE-FOR-RECORD-FUNCTIONS))
- (EVAL
- (CONS 'DEFSTRUCT
- (CONS
- (CONS ID-SYMBOL
- (CONS
- (CONS ':CONSTRUCTOR
- (CONS CONSTRUCTOR-FUNCTION
- '(NIL)))
- (CONS
- (CONS ':PRINT-FUNCTION
- (LIST 'PRINT-RECORD))
- (CONS
- (CONS ':PREDICATE
- (LIST PREDICATE-FUNCTION))
- '((:COPIER NIL) (:CONC-NAME NIL))))))
- ACCESSOR-FUNCTIONS))))
- (SETQ *RECORD-TYPE-UNIQUE-ID* (+ *RECORD-TYPE-UNIQUE-ID* 1))
-
- RTD)))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'REALLY-MAKE-RECORD-TYPE
- 'SCHEME::REALLY-MAKE-RECORD-TYPE)
- (DEFUN RECORD-CONSTRUCTOR
- (RTD &REST INIT-NAMES-OPTION)
- #+:LISPM
- (SETQ INIT-NAMES-OPTION (COPY-LIST INIT-NAMES-OPTION))
- (LET ((CFUN (RTD-CONSTRUCTOR-FUNCTION RTD))
- (FUNS
- (MAPCAR #'(LAMBDA (NAME)
- (RTD-ACCESSOR-FUNCTION RTD NAME))
- (IF (NULL INIT-NAMES-OPTION)
- (RTD-FIELD-NAMES RTD)
- (CAR INIT-NAMES-OPTION)))))
- (UNLESS (COMPILED-FUNCTION-P (SYMBOL-FUNCTION CFUN))
- (COMPILE CFUN))
- (COMPILE 'NIL
- (CONS 'LAMBDA
- (CONS FUNS
- (LIST
- (CONS 'LET
- (CONS
- (LIST
- (CONS 'SCHEME::THE-RECORD
- (LIST (LIST CFUN))))
- (APPEND
- (MAPCAR
- #'(LAMBDA (FUN)
- (CONS 'SETF
- (CONS
- (CONS FUN
- '(SCHEME::THE-RECORD))
- (LIST FUN))))
- FUNS)
- '(SCHEME::THE-RECORD))))))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'RECORD-CONSTRUCTOR
- 'SCHEME::RECORD-CONSTRUCTOR)
- (DEFUN RECORD-PREDICATE
- (RTD)
- (LET ((FUN (RTD-PREDICATE-FUNCTION RTD)))
- (COMPILE 'NIL
- (CONS 'LAMBDA
- (CONS '(SCHEME::X)
- (LIST
- (CONS 'SCHI:TRUE?
- (LIST (CONS FUN '(SCHEME::X))))))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'RECORD-PREDICATE
- 'SCHEME::RECORD-PREDICATE)
- (DEFUN RECORD-ACCESSOR
- (RTD NAME)
- (LET ((FUN (RTD-ACCESSOR-FUNCTION RTD NAME)))
- (UNLESS (COMPILED-FUNCTION-P (SYMBOL-FUNCTION FUN))
- (COMPILE FUN))
- (SYMBOL-FUNCTION FUN)))
- (SCHI:SET-VALUE-FROM-FUNCTION 'RECORD-ACCESSOR
- 'SCHEME::RECORD-ACCESSOR)
- (DEFUN RECORD-MODIFIER
- (RTD NAME)
- (LET ((FUN (RTD-ACCESSOR-FUNCTION RTD NAME)))
- (COMPILE 'NIL
- (CONS 'LAMBDA
- (CONS '(SCHEME::X SCHEME::Y)
- (LIST
- (CONS 'SETF
- (CONS (CONS FUN '(SCHEME::X))
- '(SCHEME::Y)))))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'RECORD-MODIFIER
- 'SCHEME::RECORD-MODIFIER)
- (DEFUN RTD-ACCESSOR-FUNCTION
- (RTD NAME)
- (PROG (L A)
- (PSETQ L
- (RTD-FIELD-NAMES RTD)
- A
- (RTD-ACCESSOR-FUNCTIONS RTD))
- (GO .LOOP)
- .LOOP (IF (NULL L)
- (RETURN
- (ERROR "~S is not a field name for ~S records"
- NAME
- (RTD-IDENTIFICATION RTD)))
- (IF (EQ NAME (CAR L))
- (RETURN (CAR A))
- (PROGN (PSETQ L (CDR L) A (CDR A))
- (GO .LOOP))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'RTD-ACCESSOR-FUNCTION
- 'SCHEME::RTD-ACCESSOR-FUNCTION)
- (LOCALLY (DECLARE (SPECIAL RECORD-TYPE-TABLE))
- (SETQ RECORD-TYPE-TABLE (MAKE-HASH-TABLE :TEST 'EQUAL)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'RECORD-TYPE-TABLE
- 'SCHEME::RECORD-TYPE-TABLE)
- (DEFUN MAKE-RECORD-TYPE
- (TYPE-ID FIELD-NAMES)
- (DECLARE (SPECIAL RECORD-TYPE-TABLE))
- (LET ((KEY (CONS TYPE-ID FIELD-NAMES)))
- (LET ((EXISTING (GETHASH KEY RECORD-TYPE-TABLE)))
- (IF (AND (NOT (EQ EXISTING 'NIL))
- (PROGN
- (FORMAT *QUERY-IO*
- "~&Existing ~S has fields ~S.~%"
- EXISTING
- FIELD-NAMES)
- (NOT
- (EQ
- (Y-OR-N-P
- "Use that descriptor (instead of creating a new one)? ")
- 'NIL))))
- EXISTING
- (LET ((NEW (REALLY-MAKE-RECORD-TYPE TYPE-ID FIELD-NAMES)))
- (SETF (GETHASH KEY RECORD-TYPE-TABLE)
- NEW)
- NEW)))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'MAKE-RECORD-TYPE
- 'SCHEME::MAKE-RECORD-TYPE)
- (DEFUN RECORD-TYPE
- (RECORD)
- (GET (TYPE-OF RECORD) 'SCHEME::RTD))
- (SCHI:SET-VALUE-FROM-FUNCTION 'RECORD-TYPE
- 'SCHEME::RECORD-TYPE)
- (DEFUN PRINT-RTD
- (RTD .STREAM ESCAPE?)
- ESCAPE?
- (FORMAT .STREAM
- "#{Record-type-descriptor ~S.~S}"
- (RTD-IDENTIFICATION RTD)
- (RTD-UNIQUE-ID RTD)))
- (SCHI:SET-VALUE-FROM-FUNCTION 'PRINT-RTD
- 'SCHEME::PRINT-RTD)
- (DEFUN PRINT-RECORD
- (RECORD .STREAM ESCAPE?)
- ESCAPE?
- (LET ((D (DISCLOSE-RECORD RECORD)))
- (DISPLAY "#{")
- (DISPLAY
- (IF (SCHI:SCHEME-SYMBOL-P (CAR D))
- (STRING-CAPITALIZE (SYMBOL->STRING (CAR D)))
- (CAR D))
- .STREAM)
- (MAPC
- #'(LAMBDA (X) (WRITE-CHAR #\Space .STREAM) (.WRITE X .STREAM))
- (CDR D))
- (DISPLAY "}")))
- (SCHI:SET-VALUE-FROM-FUNCTION 'PRINT-RECORD
- 'SCHEME::PRINT-RECORD)
- (LOCALLY (DECLARE (SPECIAL RECORD-DISCLOSERS))
- (SETQ RECORD-DISCLOSERS (MAKE-HASH-TABLE)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'RECORD-DISCLOSERS
- 'SCHEME::RECORD-DISCLOSERS)
- (DEFUN DISCLOSE-RECORD
- (RECORD)
- (DECLARE (SPECIAL DEFAULT-RECORD-DISCLOSER
- RECORD-DISCLOSERS))
- (FUNCALL
- (GETHASH (RECORD-TYPE RECORD)
- RECORD-DISCLOSERS
- DEFAULT-RECORD-DISCLOSER)
- RECORD))
- (SCHI:SET-VALUE-FROM-FUNCTION 'DISCLOSE-RECORD
- 'SCHEME::DISCLOSE-RECORD)
- (DEFUN DEFAULT-RECORD-DISCLOSER
- (RECORD)
- (LIST (RTD-IDENTIFICATION (RECORD-TYPE RECORD))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'DEFAULT-RECORD-DISCLOSER
- 'SCHEME::DEFAULT-RECORD-DISCLOSER)
- (DEFUN DEFINE-RECORD-DISCLOSER
- (RTD PROC)
- (DECLARE (SPECIAL RECORD-DISCLOSERS))
- (SETF (GETHASH RTD RECORD-DISCLOSERS)
- PROC))
- (SCHI:SET-VALUE-FROM-FUNCTION 'DEFINE-RECORD-DISCLOSER
- 'SCHEME::DEFINE-RECORD-DISCLOSER)
-