; ************************************************************************* ; Copyright (c) 1992 Xerox Corporation. ; All Rights Reserved. ; ; Use, reproduction, and preparation of derivative works are permitted. ; Any copy of this software or of any derivative work must include the ; above copyright notice of Xerox Corporation, this paragraph and the ; one after it. Any distribution of this software or derivative works ; must comply with all applicable United States export control laws. ; ; This software is made available AS IS, and XEROX CORPORATION DISCLAIMS ; ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ; PURPOSE, AND NOTWITHSTANDING ANY OTHER PROVISION CONTAINED HEREIN, ANY ; LIABILITY FOR DAMAGES RESULTING FROM THE SOFTWARE OR ITS USE IS ; EXPRESSLY DISCLAIMED, WHETHER ARISING IN CONTRACT, TORT (INCLUDING ; NEGLIGENCE) OR STRICT LIABILITY, EVEN IF XEROX CORPORATION IS ADVISED ; OF THE POSSIBILITY OF SUCH DAMAGES. ; ************************************************************************* ; ; port to R6RS -- 2007 Christian Sloma ; (library (clos slot-access) (export slot-ref slot-set! register-class-of-classes!) (import (only (rnrs) define set! let if eq? cadr caddr assq quote) (clos private allocation) (clos private core-class-layout) (clos private compat)) (define #f) (define (register-class-of-classes! class) (set! class)) (define (slot-ref inst slot-name) (let ((class (instance-class inst))) (if (eq? class ) ;; break loop -- assumes does not change (instance-ref inst (position slot-name core-class-slot-names)) (let ((slot-info (get-slot-info class slot-name))) ((cadr slot-info) inst))))) (define (slot-set! inst slot-name val) (let ((class (instance-class inst))) (if (eq? class ) ;; break loop -- assumes does not change (instance-set! inst (position slot-name core-class-slot-names) val) (let ((slot-info (get-slot-info class slot-name))) ((caddr slot-info) inst val))))) (define (get-slot-info class slot-name) (let ((getters-and-setters (slot-ref class 'getters-and-setters))) (assq slot-name getters-and-setters))) ) ;; library (clos slot-access)