;;;; in Text, HTML, and XML formats. This includes hyperlinking
;;;; capability and sub-objects.
;;;;
-;;;; $Id: mop.lisp,v 1.20 2003/03/29 04:20:19 kevin Exp $
+;;;; $Id: mop.lisp,v 1.21 2003/03/29 07:09:41 kevin Exp $
;;;;
;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
;;;;
(setf (slot-value ,the-instance ,the-slot-name)
(,reader ,@keys)))))
-#+(or sbcl scl cmu)
-(defparameter *queued-definitions* nil)
+
+(defparameter *queued-definitions-pathname*
+ (make-pathname :directory '(:absolute "tmp")
+ :name (format nil "hyperobject-def-~d" (get-universal-time))
+ :type "lisp"))
+(defparameter *queued-definitions-stream* nil)
+
+(defun add-definition (def)
+ (unless *queued-definitions-stream*
+ (setq *queued-definitions-stream* (open *queued-definitions-pathname*
+ :direction :output
+ :if-exists :supersede)))
+ (format *queued-definitions-stream* "~A~%" def))
(defun process-queued-definitions ()
- #+(or sbcl scl cmu)
- (progn
- (dolist (def *queued-definitions*)
- (eval def))
- (setq *queued-definitions* nil)))
+ (when *queued-definitions-stream*
+ (close *queued-definitions-stream*)
+ (compile-file *queued-definitions-pathname*)
+ (load (compile-file-pathname *queued-definitions-pathname*))
+ (delete-file *queued-definitions-pathname*)
+ (delete-file (compile-file-pathname *queued-definitions-pathname*))
+ (setq *queued-definitions-stream* nil)))
(defun finalize-subobjects (cl)
"Process class subobjects slot"
nil
(cdr subobj-def)))))
(unless (eq (lookup subobject) t)
- #+(or sbcl scl cmu)
- (push `(def-lazy-reader ,(name-class subobject)
- ,(name-slot subobject) ,(lookup subobject)
- ,@(lookup-keys subobject))
- *queued-definitions*)
- #-(or sbcl scl cmu)
- (eval `(def-lazy-reader ,(name-class subobject)
- ,(name-slot subobject) ,(lookup subobject)
- ,@(lookup-keys subobject))))
+ (add-definition
+ `(def-lazy-reader ,(name-class subobject)
+ ,(name-slot subobject) ,(lookup subobject)
+ ,@(lookup-keys subobject))))
(push subobject subobjects))))
subobjects)))