;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: equal.lisp,v 1.1 2002/10/12 06:10:17 kevin Exp $
+;;;; $Id$
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
;;;; *************************************************************************
-(in-package :kmrcl)
-(declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3)))
+(in-package #:kmrcl)
(defun generalized-equal (obj1 obj2)
(complex
(and (generalized-equal (realpart obj1) (realpart obj2))
(generalized-equal (imagpart obj1) (imagpart obj2))))
- (standard-xstructure
+ (structure-object
(generalized-equal-fielded-object obj1 obj2))
(standard-object
(generalized-equal-fielded-object obj1 obj2))
(return-from test nil)))
(return-from test t)))
-#+(or allegro lispworks)
-(defun class-slot-names (class-name)
+(defun class-slot-names (c-name)
"Given a CLASS-NAME, returns a list of the slots in the class."
- (mapcar #'clos:slot-definition-name
- (clos:class-slots (find-class class-name))))
-
-#-(or allegro lispworks)
-(defun class-slot-names (class-name)
- (warn "class-slot-names not supported on this platform"))
+ #+(or allegro cmu lispworks sbcl scl)
+ (mapcar #'kmr-mop:slot-definition-name
+ (kmr-mop:class-slots (kmr-mop:find-class c-name)))
+ #+(and mcl (not openmcl))
+ (let* ((class (find-class c-name nil)))
+ (when (typep class 'standard-class)
+ (nconc (mapcar #'car (ccl:class-instance-slots class))
+ (mapcar #'car (ccl:class-class-slots class)))))
+ #-(or allegro lispworks cmu mcl sbcl scl openmcl)
+ (error "class-slot-names is not defined on this platform")
+ )
+(defun structure-slot-names (s-name)
+ "Given a STRUCTURE-NAME, returns a list of the slots in the structure."
+ #+allegro (class-slot-names s-name)
+ #+lispworks (structure:structure-class-slot-names
+ (find-class s-name))
+ #+(or sbcl cmu) (mapcar #'kmr-mop:slot-definition-name
+ (kmr-mop:class-slots (kmr-mop:find-class s-name)))
+ #+scl (mapcar #'kernel:dsd-name
+ (kernel:dd-slots
+ (kernel:layout-info
+ (kernel:class-layout (find-class s-name)))))
+ #+(and mcl (not openmcl))
+ (let* ((sd (gethash s-name ccl::%defstructs%))
+ (slots (if sd (ccl::sd-slots sd))))
+ (mapcar #'car (if (symbolp (caar slots)) slots (cdr slots))))
+ #-(or allegro lispworks cmu sbcl scl mcl)
+ (error "structure-slot-names is not defined on this platform")
+ )
(defun function-to-string (obj)
"Returns the lambda code for a function. Relies on