;;;; in Text, HTML, and XML formats. This includes hyperlinking
;;;; capability and sub-objects.
;;;;
-;;;; $Id: mop.lisp,v 1.46 2003/04/12 05:31:43 kevin Exp $
+;;;; $Id: mop.lisp,v 1.54 2003/04/16 19:56:33 kevin Exp $
;;;;
;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
;;;;
(defclass hyperlink ()
((name :type symbol :initform nil :initarg :name :reader name)
- (lookup :type function :initform nil :initarg :lookup :reader lookup)
+ (lookup :type (or function symbol) :initform nil :initarg :lookup :reader lookup)
(link-parameters :type list :initform nil :initarg :link-parameters
:reader link-parameters)))
value
already-processed-options
slot)
- (list* option value already-processed-options))
+ (list* option `',value already-processed-options))
#-lispworks
(declare (ignore slot-name))
)
(t
t)))
-#+(or sbcl cmu scl)
-(defmethod compute-effective-slot-definition :around ((cl hyperobject-class) dsds)
- (let* ((dsd (car dsds))
- (value-type (canonicalize-value-type (slot-value dsd 'value-type))))
- (multiple-value-bind (sql-type length) (value-type-to-sql-type value-type)
- (setf (slot-value dsd 'sql-type) sql-type)
- (setf (slot-value dsd 'type) (value-type-to-lisp-type value-type))
- (let ((ia (compute-effective-slot-definition-initargs
- cl #+lispworks name dsds)))
- (apply
- #'make-instance 'hyperobject-esd
- :value-type value-type
- :sql-type sql-type
- :length length
- :print-formatter (slot-value dsd 'print-formatter)
- :subobject (slot-value dsd 'subobject)
- :hyperlink (slot-value dsd 'hyperlink)
- :hyperlink-parameters (slot-value dsd 'hyperlink-parameters)
- :description (slot-value dsd 'description)
- :user-name (slot-value dsd 'user-name)
- :index (slot-value dsd 'index)
- :value-constraint (slot-value dsd 'value-constraint)
- :null-allowed (slot-value dsd 'null-allowed)
- ia)))))
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (when (>= (length (generic-function-lambda-list
+ (ensure-generic-function
+ 'compute-effective-slot-definition)))
+ 3)
+ (push :ho-named-cesd-fun cl:*features*)))
(defmethod compute-effective-slot-definition :around ((cl hyperobject-class)
- #+(or lispworks allegro) name
+ #+ho-named-cesd-fun name
dsds)
#+allegro (declare (ignore name))
(let* ((dsd (car dsds))
:value-constraint (slot-value dsd 'value-constraint)
:null-allowed (slot-value dsd 'null-allowed)
ia)))))
-
+
+
+#+ho-named-cesd-fun
+(setq cl:*features* (delete :ho-named-cesd-fun cl:*features*))
+
(defun value-type-to-lisp-type (value-type)
(case (if (atom value-type)
value-type
(defun intern-eql-specializer (slot)
`(eql ,slot))
-#+(or sbcl cmu lispworks)
+#+(or sbcl lispworks)
(defun ensure-lazy-reader (class-name slot-name reader &rest reader-keys)
(let ((keys nil)
(gf (ensure-generic-function 'slot-unbound)))
nil
(cdr subobj-def)))))
(unless (eq (lookup subobject) t)
- #-(or sbcl cmu lispworks)
+ #-(or sbcl lispworks)
(eval
`(hyperobject::def-lazy-reader ,(name-class subobject)
,(name-slot subobject) ,(lookup subobject)
,@(lookup-keys subobject)))
- #+(or sbcl cmu lispworks)
+ #+(or sbcl lispworks)
(apply #'ensure-lazy-reader
(name-class subobject) (name-slot subobject) (lookup subobject) (lookup-keys subobject))
)