set-symbol-plist!
symbol-bound?
symbol-fbound?
+ symbol-default-bound?
+ symbol-default-value
+ set-symbol-default-value!
bind-symbol
makunbound!
fmakunbound!
;;; Note: Naming those value-slot and/or function-slot clashes with the
;;; submodules of these names!
-(define value-slot-module (resolve-module '(elisp-symbols)))
+(define value-slot-module (define-module* '(elisp-symbols) #:pure #t))
-(define function-slot-module (resolve-module '(elisp-functions)))
+(define function-slot-module (define-module* '(elisp-functions) #:pure #t))
-(define plist-slot-module (resolve-module '(elisp-plists)))
+(define plist-slot-module (define-module* '(elisp-plists) #:pure #t))
(define nil_ 'nil)
(define t_ 't)
value)
(define (symbol-function symbol)
- (set! symbol (schemify symbol))
- (ensure-present! function-slot-module symbol (lambda () #nil))
- (let ((module function-slot-module))
- (module-ref module symbol)))
+ (cond
+ ((module-variable function-slot-module (schemify symbol))
+ => variable-ref)
+ (else #nil)))
(define (set-symbol-function! symbol value)
(set! symbol (schemify symbol))
(dynamic-bound? (variable-ref var))
#t)))))
+(define symbol-default-bound? symbol-bound?)
+
+(define symbol-default-value symbol-value)
+
+(define set-symbol-default-value! set-symbol-value!)
+
(define (symbol-fbound? symbol)
(set! symbol (schemify symbol))
(and
(vector-set! (symbol-desc sym) 3 1)
#nil)
-(define (emacs! ref set boundp bind)
+(define (emacs! ref set boundp dref dset dboundp bind)
(set! symbol-value ref)
(set! set-symbol-value! set)
(set! symbol-bound? boundp)
+ (set! symbol-default-value dref)
+ (set! set-symbol-default-value! dset)
+ (set! symbol-default-bound? dboundp)
(set! bind-symbol bind)
(set! lexical-binding? (lambda () (symbol-value 'lexical-binding)))
(set! set-lexical-binding-mode (lambda (x) (set-symbol-value! 'lexical-binding x))))
(syntax-case x ()
((_ name args body ...)
(with-syntax ((scheme-name (make-id #'name 'compile- #'name)))
- #'(define scheme-name
- (cons 'special-operator (lambda args body ...))))))))
+ #'(begin
+ (define scheme-name
+ (cons 'special-operator (lambda args body ...)))
+ (set-symbol-function! 'name scheme-name)))))))