Next: slots vectors, Previous: slots sysops, Up: slots [Contents][Index]
When the block value is a Scheme pair, we could make a more descriptive use of the system operations with the following macros:
(define-syntax-rule ($car ?pair) (##sys#slot ?pair 0)) (define-syntax-rule ($cdr ?pair) (##sys#slot ?pair 1)) (define-syntax-rule ($car-set! ?pair ?new-value) (##sys#setslot ?pair 0 ?new-value)) (define-syntax-rule ($cdr-set! ?pair ?new-value) (##sys#setslot ?pair 1 ?new-value)) (define-syntax-rule ($car-set-immediate! ?pair ?new-value) (##sys#setislot ?pair 0 ?new-value)) (define-syntax-rule ($cdr-set-immediate! ?pair ?new-value) (##sys#setislot ?pair 1 ?new-value)) (define-syntax-rule ($pair-size ?pair) (##sys#size ?pair)) ($pair-size '(a . b)) ⇒ 2 (let ((P (cons 'a 'b))) (values ($car P) ($cdr P))) ⇒ a b (let ((P (cons 'a 'b))) ($car-set! P 'x) ($cdr-set! P 'y) (values ($car P) ($cdr P))) ⇒ x y (let ((P (cons 'a 'b))) ($car-set-immediate! P 88) ($cdr-set-immediate! P 99) (values ($car P) ($cdr P))) ⇒ 88 99
Next: slots vectors, Previous: slots sysops, Up: slots [Contents][Index]