;;;; in Text, HTML, and XML formats. This includes hyperlinking
;;;; capability and sub-objects.
;;;;
-;;;; $Id: mop.lisp,v 1.18 2003/03/29 04:00:37 kevin Exp $
+;;;; $Id: mop.lisp,v 1.23 2003/03/29 07:17:47 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)
-#+(or sbcl scl cmu)
+
+(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* "(in-package #:hyperobject)~%"))
+ (format *queued-definitions-stream* "~A~%" def))
+
(defun process-queued-definitions ()
- (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)
-
- #-(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)))