2000-10-25 14:51:33 +00:00
|
|
|
|
;;; installed-scm-file
|
|
|
|
|
|
|
2006-04-16 23:37:40 +00:00
|
|
|
|
;;;; Copyright (C) 1999, 2001, 2006 Free Software Foundation, Inc.
|
2000-10-25 14:51:33 +00:00
|
|
|
|
;;;;
|
2003-04-05 19:15:35 +00:00
|
|
|
|
;;;; This library is free software; you can redistribute it and/or
|
|
|
|
|
|
;;;; modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
|
;;;; License as published by the Free Software Foundation; either
|
|
|
|
|
|
;;;; version 2.1 of the License, or (at your option) any later version.
|
2000-10-25 14:51:33 +00:00
|
|
|
|
;;;;
|
2003-04-05 19:15:35 +00:00
|
|
|
|
;;;; This library is distributed in the hope that it will be useful,
|
2000-10-25 14:51:33 +00:00
|
|
|
|
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2003-04-05 19:15:35 +00:00
|
|
|
|
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
|
;;;; Lesser General Public License for more details.
|
2000-10-25 14:51:33 +00:00
|
|
|
|
;;;;
|
2003-04-05 19:15:35 +00:00
|
|
|
|
;;;; You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
|
;;;; License along with this library; if not, write to the Free Software
|
2005-05-23 19:57:22 +00:00
|
|
|
|
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
2000-10-25 14:51:33 +00:00
|
|
|
|
;;;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;; This software is a derivative work of other copyrighted softwares; the
|
|
|
|
|
|
;;;; copyright notices of these softwares are placed in the file COPYRIGHTS
|
|
|
|
|
|
;;;;
|
|
|
|
|
|
;;;; This file is based upon active-slot.stklos from the STk
|
|
|
|
|
|
;;;; distribution by Erick Gallesio <eg@unice.fr>.
|
|
|
|
|
|
;;;;
|
|
|
|
|
|
|
|
|
|
|
|
(define-module (oop goops active-slot)
|
* lib.scm: Move module the system directives `export',
`export-syntax', `re-export' and `re-export-syntax' into the
`define-module' form. This is the recommended way of exporting
bindings.
* srfi-2.scm, srfi-4.scm, srfi-8.scm, srfi-9.scm, srfi-10.scm,
srfi-11.scm, srfi-14.scm, srfi-16.scm: Move module the system
directives `export', `export-syntax', `re-export' and
`re-export-syntax' into the `define-module' form. This is the
recommended way of exporting bindings.
* goops.scm, goops/active-slot.scm, goops/compile.scm,
goops/composite-slot.scm, goops/describe.scm, goops/dispatch.scm,
goops/old-define-method.scm, goops/save.scm, goops/util.scm: Move
module the system directives `export', `export-syntax',
`re-export' and `re-export-syntax' into the `define-module' form.
This is the recommended way of exporting bindings.
* slib.scm (array-indexes): New procedure.
(*features*): Extend. (Probably some of these options should be
set elsewhere.) (Thanks to Aubrey Jaffer.)
* and-let-star-compat.scm, and-let-star.scm, calling.scm,
channel.scm, common-list.scm, debug.scm, debugger.scm,
expect.scm, hcons.scm, lineio.scm, ls.scm, mapping.scm,
null.scm, optargs.scm, poe.scm, popen.scm, pretty-print.scm,
q.scm, r5rs.scm, rdelim.scm, regex.scm, runq.scm, safe-r5rs.scm,
safe.scm, session.scm, slib.scm, streams.scm, string-fun.scm,
syncase.scm, threads.scm: Move module the system directives
`export', `export-syntax', `re-export' and `re-export-syntax'
into the `define-module' form. This is the recommended way of
exporting bindings.
2001-10-21 09:49:19 +00:00
|
|
|
|
:use-module (oop goops internal)
|
|
|
|
|
|
:export (<active-class>))
|
2000-10-25 14:51:33 +00:00
|
|
|
|
|
|
|
|
|
|
(define-class <active-class> (<class>))
|
|
|
|
|
|
|
2001-03-10 03:09:50 +00:00
|
|
|
|
(define-method (compute-get-n-set (class <active-class>) slot)
|
2000-10-25 14:51:33 +00:00
|
|
|
|
(if (eq? (slot-definition-allocation slot) #:active)
|
|
|
|
|
|
(let* ((index (slot-ref class 'nfields))
|
|
|
|
|
|
(name (car slot))
|
|
|
|
|
|
(s (cdr slot))
|
|
|
|
|
|
(env (class-environment class))
|
|
|
|
|
|
(before-ref (get-keyword #:before-slot-ref s #f))
|
|
|
|
|
|
(after-ref (get-keyword #:after-slot-ref s #f))
|
|
|
|
|
|
(before-set! (get-keyword #:before-slot-set! s #f))
|
|
|
|
|
|
(after-set! (get-keyword #:after-slot-set! s #f))
|
|
|
|
|
|
(unbound (make-unbound)))
|
|
|
|
|
|
(slot-set! class 'nfields (+ index 1))
|
|
|
|
|
|
(list (lambda (o)
|
|
|
|
|
|
(if before-ref
|
|
|
|
|
|
(if (before-ref o)
|
|
|
|
|
|
(let ((res (%fast-slot-ref o index)))
|
|
|
|
|
|
(and after-ref (not (eqv? res unbound)) (after-ref o))
|
|
|
|
|
|
res)
|
|
|
|
|
|
(make-unbound))
|
|
|
|
|
|
(let ((res (%fast-slot-ref o index)))
|
|
|
|
|
|
(and after-ref (not (eqv? res unbound)) (after-ref o))
|
|
|
|
|
|
res)))
|
|
|
|
|
|
|
|
|
|
|
|
(lambda (o v)
|
|
|
|
|
|
(if before-set!
|
|
|
|
|
|
(if (before-set! o v)
|
|
|
|
|
|
(begin
|
|
|
|
|
|
(%fast-slot-set! o index v)
|
|
|
|
|
|
(and after-set! (after-set! o v))))
|
|
|
|
|
|
(begin
|
|
|
|
|
|
(%fast-slot-set! o index v)
|
|
|
|
|
|
(and after-set! (after-set! o v)))))))
|
|
|
|
|
|
(next-method)))
|