;;;; symbol-value-utils.scm -*- Scheme -*- ;;;; Kon Lovett, Jul '18 (declare (always-bound ##sys#arbitrary-unbound-symbol)) (module symbol-value-utils (;export unbound-value unbound-value? unbound? symbol-value unspecified-value unspecified-value? unspecified?) (import scheme (chicken base) (chicken syntax)) ;; Unbound (define-syntax unbound-value (syntax-rules () ((_) (##sys#slot '##sys#arbitrary-unbound-symbol 0) ) ) ) (define-syntax unbound-value? (syntax-rules () ((_ ?val) (eq? (unbound-value) ?val) ) ) ) (define-syntax unbound? (syntax-rules () ((_ ?sym) (unbound-value? (##sys#slot ?sym 0)) ) ) ) (define-syntax symbol-value (syntax-rules () ; ((_ ?sym ?def) (let ((val (##sys#slot ?sym 0))) (if (unbound-value? val) ?def val) ) ) ; ((_ ?sym) (symbol-value ?sym #f) ) ) ) ;; Undefined (define unspecified-value void) (define-syntax unspecified-value? (syntax-rules () ((_ ?val) (eq? (unspecified-value) ?val) ) ) ) (define-syntax unspecified? (syntax-rules () ((_ ?obj) (unspecified-value? ?obj) ) ) ) ) ;module symbol-value-utils