I've added the inaccessible hidden field to <optional-field> as well as to
<automatic-field>, and changed <specification> according to the change.
(define-lambda-object stack
(name 'stack) ;optional read-only field
('stack '()) ;optional hidden-field
(',original-stack stack) ;automatic hidden-field
(`,pop (if (null? stack) ;automatic virtual-field
(error 'stack "null stack (original stack)" stack original-stack)
(let ((s (car stack))) (set! stack (cdr stack)) s)))
(,push (lambda (s) (set! stack (cons s stack))))) ;automatic read-only field
(define stack (make-stack 'stack (list 'sunflower)))
((stack 'push) 'rose)
((stack 'push) 'lily)
(stack 'pop) => lily
(stack 'pop) => rose
(stack 'pop) => sunflower
(stack 'pop) => error: stack: null stack (original stack) () (sunflower)
(stack 'name) => stack
(stack 'stack) => error: define-lambda-object: absent field stack
(stack 'original-stack) => error: define-lambda-object: absent field original-stack
--
Joo