import source from 1.3.40
[external/swig.git] / Lib / chicken / swigclosprefix.scm
1 (declare (hide swig-initialize))
2
3 (define (swig-initialize obj initargs create)
4      (slot-set! obj 'swig-this
5         (if (memq 'swig-this initargs)
6             (cadr initargs)
7             (let ((ret (apply create initargs)))
8               (if (instance? ret)
9                 (slot-ref ret 'swig-this)
10                 ret)))))
11
12 (define-class <swig-metaclass-$module> (<class>) (void))
13
14 (define-method (compute-getter-and-setter (class <swig-metaclass-$module>) slot allocator)
15   (if (not (memq ':swig-virtual slot))
16     (call-next-method)
17     (let ((getter (let search-get ((lst slot))
18                     (if (null? lst)
19                       #f
20                       (if (eq? (car lst) ':swig-get)
21                         (cadr lst)
22                         (search-get (cdr lst))))))
23           (setter (let search-set ((lst slot))
24                     (if (null? lst)
25                       #f
26                       (if (eq? (car lst) ':swig-set)
27                         (cadr lst)
28                         (search-set (cdr lst)))))))
29       (values
30         (lambda (o) (getter (slot-ref o 'swig-this)))
31         (lambda (o new) (setter (slot-ref o 'swig-this) new) new)))))