File: special-slots-2.lisp

package info (click to toggle)
cl-contextl 1%3A0.6-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 296 kB
  • ctags: 327
  • sloc: lisp: 3,150; makefile: 29
file content (34 lines) | stat: -rw-r--r-- 960 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(asdf:oos 'asdf:load-op :contextl)

(in-package :contextl-user)

(define-layered-class person2 ()
  ((name2 :initarg :name
          :layered-accessor person-name2)))

(defparameter *p*
  (make-instance 'person2 :name "Dr. Jekyll"))

(assert (equal (person-name2 *p*) "Dr. Jekyll"))

(symbol-macrolet ((safe-special-symbol-progv t))
  (handler-bind
      ((error (lambda (error)
                (eval '(define-layered-class person2 ()
                         ((name2 :initarg :name
                                 :special t
                                 :layered-accessor person-name2))))
                (assert (equal (person-name2 *p*) "Dr. Jekyll"))
                (continue error))))
    (dletf (((person-name2 *p*) "Mr. Hide"))
      (assert (equal (person-name2 *p*) "Mr. Hide")))))

(assert (equal (person-name2 *p*) "Dr. Jekyll"))

(print :done)

#+allegro (excl:exit)
#+clozure (ccl:quit)
#+cmu (ext:quit)
#+ecl (si:quit)
#+sbcl (sb-ext:quit)